/* * Electrick Shoc. (shoc.t) * * This is a piece of TADS code that implements * an electrically live item. The player will * get a shock if s/he touches it, but is * otherwise unaffected if s/he tries to use * a verb that doesn't involve physical contact * with the device. * * Requires TADS compiler 2.1 or higher. * * This code is copyright (c) 1993 Neil K. * Internet: n_k_guy@sfu.ca * * You may distribute, modify and copy this * file as much as you like, but it cannot * be bought or sold. Please include this * notice and a list of any changes you made * if you choose to distribute it. * * Version History: * * Written 4/26/93 Neil K. * */ /* * * This is our electrically dangerous object. * * The shock feature relies on the new "dobjGen" * method that was added to TADS in version * 2.0.13. Consult your TADSVER file for more * details on this useful feature. * * All this implementation does is catch every * single verb for which the transformer is the * direct object. If the verb in question is of * of the "contactVerb" type then the function * named "electricShock" is called. If the verb * isn't of this type then it's left alone. * * This method uses the "isclass" function to * check if the verb being passed (v) is of * the "contactVerb" class or not. * */ powerTransformer: fixeditem sdesc = "power transformer" ldesc = "This large grey power transformer is covered with an assortment of threatening decals that warn you of the dangers of touching uninsulated electrical devices. " noun = 'transformer' adjective = 'large' 'grey' 'gray' 'power' location = TransRoom // replace with your own location dobjGen( a, v, i, p ) = { if ( isclass( v, contactVerb ) { electricShock(); exit; } } ; /* * This function should be predeclared * in your "adv.t" file. * * Naturally, if you wanted to be more * gruesome you could add the die(); * function here, so the player would * be killed if s/he touches the device. * This is a *nice* example, though, so * this and nastier ideas are left up * to you. * * "electricShock" is implemented as * a function rather than being part of * of the transformer item so it's * easily re-used should you have * several electrically dangerous * objects. Of course, you could always * create a class of electrically nasty * items and incorporate the "electric * shock" code into that instead. * */ electricShock: function { "That really wasn't a very bright idea. A sudden surge of electricity courses through %your% body, leaving %you% shaken and drained. "; } /* * * This is a new class of verb. * * The idea behind it is to have * a way of identifying all verbs * that involve the player touching * the direct object. You would * modify your "adv.t" file so that * all "touchy" verbs - such as * "take", "push", "open", etc. - * are of the "contactVerb" class. * * For instance, you would directly * change the "touchVerb" verb from a * regular deepverb to a contactVerb, * by modifying your "adv.t" file like * this: * * touchVerb: contactVerb * * Note that TADS now has a "replace" * feature that lets you make this * sort of change to your adv.t file * by adding the change to your own * game code. Check the TADSVER file * for more info. Note that the "modify" * isn't much use here, as "modify" * doesn't let you change superclasses. * * This class will allow the game to * distinguish between player actions * that result in a nasty shock, and * those actions that don't, such as * simply looking at or asking about * the item. * * The verb inherits everything from * the "deepverb" definition. In fact, * it doesn't do anything new itself. * It's just a kind of flag so that * electrically nasty items can tell * whether a verb involves physical * contact or not. * */ class contactVerb: deepverb ;