! ----------------------------------------------------------------------------- ! ! Smart Desk Object V2.0 ! By Jason Peter Brown ! For Hugo 2.4d by Kent Tessman ! Friday December 5 1997 ! ! ----------------------------------------------------------------------------- ! ! Okay, this object is no big deal, and it is something that no one in their ! right mind would waste their time coding, but I was really bored so I did ! it. Reason for coding: I hate accidently typing something like: ! ! >put envelope in desk ! ! Only to get the response: ! ! But the desk is not a container ! ! ..blah blah blah...Obviously I meant the drawer and not the desk!!! ! One easy way to remedy this by making the desk a container and then ! make "drawer" a noun under the entire desk object. This is alright except ! for the fact that >examine desk and >examine drawer will produce the same ! descriptions which is pretty lame if you write an involved description ! which makes sense when applied to the desk...(ie: >examine drawer / The ! desk is monstrous and made entirely of cockroach exoskeletons...) ! ! Thus I set out to make a "smart" desk. If the user types ">put envelope ! in desk" or ">open desk" or ">close desk" or ">look in desk" (or whatever!) ! the program will respond with: ! ! (assuming that you mean the drawer rather than the desk...) ! ! and then perform the proper operation on the *drawer* object. ! ! ***NEW WITH VERSION 2.0*** The old bug has been fixed, where if the user ! enters something along the lines of: ! ! >put the gun on the refrigerator. put the envelope in the desk. ! ! The code block will correctly perform the DoPutIn routine on the drawer. ! ! ***ALSO NEW TO V2.0*** You can now unlock and lock the desk and it will ! perform the proper operation on the drawer... ! ! ***ALSO NEW TO V2.0*** Vastly improved the DoLookIn code block to bring ! it up to par with the DoPutIn code block...I overlooked this is the ! last release... ! ! Any complaints, etc..can go to cbrown@utoronto.ca ! (it's my brother's account so please don't go nuts!) ! ! PS: If you are using the verbstubs library (or have your own ! DoPull and DoPush routines) then the drawer will open with a pull ! (but not if it is already open) and close with a push (but not if ! it is already closed). Pretty exciting stuff, I know... ! ! PPS: Feel free to mess with the code as much as you like! If you do ! improve on it please e-mail your changes! If you are feeling sarcastic ! you can always thank me for the "awe-inspiring" desk in the credits ! to your IF product, but if you don't no hard feelings! I know it is ! just a stupid object for all of us silly typers and code perfectionists ! (even though this code is far from perfect!) ! As freeware, no warranty is expressed or implied...Use this code at ! you own risk...If your computer explodes as a direct result of using ! this code it is not my fault! scenery desk "wooden desk" { adjectives "large" , "big" , "oak" , "wooden" , "wood" article "a" capacity 100 in emptyroom !change this to whatever room you want this desk to appear in! is static , enterable , platform , container, openable , open , lockable , locked noun "desk" long_desc {"The desk is quite large and is made of what appears to be oak. "; "It has no remarkable features save for a single drawer set into its underside."} before { self DoEnter , DoGo { ! If the user tries to enter the desk, this will code will be executed ! instead of letting him/her get onto it... "That's not what the desk has been designed for." } self DoOpen { ! If the user tries to open the desk, the command will be passed onto ! the drawer instead... "(Assuming that you mean the drawer rather than the desk...)" Perform (&DoOpen, drawer) } self DoClose { ! If the user tries to close the desk, the command will be passed onto ! the drawer instead "(Assuming that you mean the drawer rather than the desk...)" Perform (&DoClose, drawer) } self DoUnlock { ! If the user tries to unlock the desk, the command will be passed onto ! the drawer instead "(Assuming that you mean the drawer rather than the desk...)" Perform (&DoUnlock, drawer, xobject) } self DoLock { ! If the user tries to lock the desk, the command will be passed onto ! the drawer instead "(Assuming that you mean the drawer rather than the desk...)" Perform (&DoLock, drawer, xobject) } xobject DoPutIn { ! If the user tries to put something on or into the desk, this routine ! will determine whether to put it onto the desk or into the drawer. local temp_a = 1 local temp_b local temp_c do { if word[temp_a]="" { temp_c = 1 } elseif word[temp_a]="on","onto" { temp_b = 1 } if temp_a=words { temp_c = 1 } temp_a ++ } while not temp_c if temp_b = 1 { return false } else { "(Assuming that you mean the drawer rather than the desk...)" if drawer is not open { "(Attempting to open the drawer...)" Perform (&DoOpen, drawer) Perform (&DoPutIn, object, drawer) } else { Perform (&DoPutIn, object, drawer) } } } self DoLookIn { ! If the user tries to look on or in the desk, this routine ! will determine whether to look on the desk or into the drawer. local temp_d = 1 local temp_e local temp_f do { if word[temp_d]="" { temp_f=1 } elseif word[temp_d]="on","onto" { temp_e=1 } if temp_d=words { temp_f=1 } temp_d ++ } while not temp_f if temp_e=1 { return false } else { "(Assuming that you mean the drawer rather than the desk...)" Perform (&DoLookIn, drawer) } } self { ! If the user tries to do anything else to the desk (other than what has ! been trapped above), then it will perform as normal... return false } } } component drawer "drawer" { adjectives "small" , "tiny" , "little" , "wooden" article "a" capacity 30 is container , openable , not open , lockable , locked key_object small_key nouns "drawer" , "drawers" part_of desk long_desc {"The little drawer is attached to the underside of the desk, and seems to be made of the same kind of wood as the rest of the desk. It is "; if self is open {"open."} if self is not open {"closed."}} before { self DoPush { ! If the drawer is open and the user pushes it, it will close. ! If it is closed, he/she will be told that it is already closed.. if self is not open { "The drawer has been pushed in as far as it will go." } else { Perform (&DoClose , self) } } self DoPull { ! If the drawer is closed and the user pulls it, it will open. ! If it is open, he/she will be told that it is already open.. if self is open { "The drawer has been pulled out as far is it will go." } else { Perform (&DoOpen , self) } } self { return false } } } object small_key "metal key" { ! This is a key object for the drawer. If you don't want the drawer to be ! lockable, then remove this object and remove the key_object ! and the lockable/locked attributes from the drawer object, ! and remove the DoLock/DoUnlock routines from the BEFORE routine ! in the DESK object... adjectives "small" , "metal" article "a" in emptyroom noun "key" size 10 long_desc {"It is a small metal key with no distinguishing features."} }