SYNOPSIS
        void reset(int arg)        /* compat mode */
        void reset(void)           /* native mode */

DESCRIPTION
        The H_RESET hook defines the function or closure to be called
        when the driver needs to reset an object. In older drivers
        this was hardwired to the lfun reset(), and a lot of hook
        implementations still follow this tradition.

        In compat mode, reset() was called with arg 0 after the object
        was compiled, and with arg != 0 every once in a while. In
        native mode, create() is called after compiling, and reset()
        is called without arguments every once in a while.

        So, if the argument is zero, the parser is running in compat
        mode, and reset() may call your create() code. If create() is
        called, you're on the new version and reset() is not called
        for object creation. You may call reset() from create() and
        vice versa, but make sure they do not call each other
        recursively on either type of driver.

        reset() will be called only in objects that have been used
        since the last call to reset(), i.e. a function in them was
        called (other than reset() or clean_up()), or it was moved
        around.

        This function can be used to reset the state of the object or
        do some checks or what ever. The game wouldn't be fun if no
        challenges remained.

        For 3.2.1, the mudlib can be programmed to call an other lfun
        than reset() to reset an object.

SEE ALSO
        clean_up(A), heart_beat(A), call_out(E), create(A), __INIT(A),
        reset(H), hooks(C), initialisation(M), native(C)
