/*
* 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:
[email protected]
*
* 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
;