/* First of all, a class for complex items.  It does nothing except say
*  yes, they are complex.
*/

class complex: item
iscomplex = true
;

/*  Okay.  What we have here is a new function I created.  It looks much
*   like listcont, but is only ( and always ) called to get the item
*   listing for a room.  Hopefully, hopefully, hopefully, this will
*   allow us to give long descriptions for some objects, and short ones
*   for the rest.  Note the long descs are only used in room listings, not
*   for containers.
*/

roomcont: function( obj )
{
    local i, count, tot, ctot, stot, list, slist, clist, cur, disptot;
    count := 0;
    list := obj.contents;
    slist := [];
    clist := [];
    tot := length( list );
    i := 1;

/* The first thing to do is to sort the items.  Items with complex descriptions
*  are added to the c(omplex)list, and everything else is added to the
*  s(imple)list.
*/

    while ( i <= tot )
    {
        cur := list[i];
        if ( cur.iscomplex )
        {
            clist := clist + cur;
        }
        else
        {
            slist := slist + cur;
        }
        i := i + 1;
    }

/* Now we can define some things.  And reset i, the generic counter. */

    ctot := length( clist );
    stot := length( slist );
    disptot := itemcnt ( slist );
    i := 1;

/* Print the items on the clist first... */

    if ( ctot )
    {
        while ( i <= ctot )
        {
            cur := clist[i];
            cur.cdesc;               // list this object's cdesc
            if ( cur.islamp and cur.islit ) " (providing light)";
/* (Do we need extra space or not?) */

            if ( not ( ( i + 1 ) > ctot ) )
            {
                "  ";
            }

            i := i + 1;
        }
    }

/* ...reset values... */

    i := 1;

/*  ...and go on and print the items with normal descs, as usual. */

    if ( stot )
    {
/* Do we need some spaces first? */
    if ( ctot )
        "  ";
/* Now, let's proceed. */
    "You see ";
        while ( i <= stot )
        {
            cur := slist[i];
            if ( cur.isListed )
            {
                if ( count > 0 )
                {
                    if ( count+1 < disptot )
                        ", ";
                    else if (count = 1)
                        " and ";
                    else
                        ", and ";
                }
                count := count + 1;
                cur.adesc;               // list this object
                if ( cur.islamp and cur.islit ) " (providing light)";
            }
            i := i + 1;
        }
        " here.";
    }
}

/*  Now, all that's left is to modify the function used to look around... */

modify room
    nrmLkAround( verbosity ) =      // lookAround without location status
    {
        local l, cur, i, tot;

        if ( verbosity )
        {
            "\n\t"; self.ldesc;

            l := self.contents;
	    tot := length( l );
	    i := 1;
            while ( i <= tot )
            {
	        cur := l[i];
                if ( cur.isfixed ) cur.heredesc;
                i := i + 1;
            }
        }
        "\n\t";
        if (itemcnt( self.contents ))
        {
            roomcont( self );
        }
        listcontcont( self ); "\n";

        l := self.contents;
	tot := length( l );
	i := 1;
        while ( i <= tot )
        {
	    cur := l[i];
            if ( cur.isactor )
            {
                if ( cur <> Me )
                {
                    "\n\t";
                    cur.actorDesc;
                }
            }
            i := i + 1;
        }
    }
;

/* And voila!  Pretty cool, eh?  Yes, I know it is rather kludgey, and possibly
*  buggy.  Sorry.  All comments to scythe@u.washington.edu.  Please do not claim
*  this work as your own, but please feel free to use and distribute.  Thank you
*/

/* All that is needed to make an item complex is to make it class complex,
*  and give a cdesc for it.  For example:
*  nugget: complex, item
*  sdesc = "gold nugget"
*  ldesc = "It's a nugget of gold!"
*  cdesc = "A glittering gold nugget is here."
*  [...and so on.]
*  Enjoy!
*/
