SYNOPSIS
        void init()

DESCRIPTION
        The main purpose of this function is to set up the
        add_actions() of an object. Therefore init() will always be
        called when an object moves near another object and one or
        both of them are marked as living.

        The way init() will be invoked is determined in the following
        manner:

        If the object O that moves is marked as living then first call
        init() of the destination object D with this_player() set to O.

        Then apply the two following rules for each object C inside D:

                If C is marked as living then call O->init() with
                this_player() set to C.

                If O is marked as living then call C->init() with
                this_player() set to O.

        Finally, if D is marked as living then call O->init(), with
        this_player() set to D.

        With 3.2.1, the actual move handling is part of the object
        library, so a given installation may implement any other
        scheme of calling init().

EXAMPLE
        (This example assumes a traditional implementation of the
         movement handling)

        Lets say we have a object structure of living (l1 and l2) and
        non living objects (n1 and n2) as the following:

        l1
           n1
           l2
           n2

        If we now move another living object l3 into l1, the call
        suequence of the init() functions looks like this:

        l1->init()  first init() of the destination will be called
        n1->init()  now iterate throw the inventory of the destination
        l3->init()
        l2->init()
        n2->init()
        l3->init()  and finally call init() of the object that has
                    been moved

SEE ALSO
        add_action(E), set_environment(E), environment(E), move_object(E),
        hooks(C)
