SYNOPSIS
        void init()

DESCRIPTION
        The H_MOVE_OBJECT0/1 implement the details of moving objects.
        In older drivers, init() was called to handle the adding of
        actions, and a lot of hook implementations still follow this
        tradition.

        The main purpose of this function is to publish the commands
        an object implements to other, living objects. Traditionally,
        whenever a living object enters the vicinity of another
        object, init() is called in the latter and this_player() will
        point to the former object. This happens mutually should both
        objects happen to be living.

        Or more formally:

            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.

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

        One caveat: commands defined in the player object for the player
        himself should not be defined in init(), as these commands would be
        added to _other_ players whenever they happen to be nearby. Instead
        use a separate function ("add_player_commands()" or so) which
        is called during the creation of the player.

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)
