skylib_mudos_v1/
skylib_mudos_v1/bin/
skylib_mudos_v1/bin/db/
skylib_mudos_v1/mudlib/banish/a/
skylib_mudos_v1/mudlib/banish/b/
skylib_mudos_v1/mudlib/banish/c/
skylib_mudos_v1/mudlib/banish/d/
skylib_mudos_v1/mudlib/banish/e/
skylib_mudos_v1/mudlib/banish/f/
skylib_mudos_v1/mudlib/banish/g/
skylib_mudos_v1/mudlib/banish/h/
skylib_mudos_v1/mudlib/banish/j/
skylib_mudos_v1/mudlib/banish/l/
skylib_mudos_v1/mudlib/banish/m/
skylib_mudos_v1/mudlib/banish/n/
skylib_mudos_v1/mudlib/banish/o/
skylib_mudos_v1/mudlib/banish/p/
skylib_mudos_v1/mudlib/banish/r/
skylib_mudos_v1/mudlib/banish/s/
skylib_mudos_v1/mudlib/banish/t/
skylib_mudos_v1/mudlib/banish/u/
skylib_mudos_v1/mudlib/banish/w/
skylib_mudos_v1/mudlib/cmds/
skylib_mudos_v1/mudlib/cmds/admin/
skylib_mudos_v1/mudlib/cmds/guild-race/
skylib_mudos_v1/mudlib/cmds/guild-race/crafts/
skylib_mudos_v1/mudlib/cmds/guild-race/magic/
skylib_mudos_v1/mudlib/cmds/guild-race/other/
skylib_mudos_v1/mudlib/cmds/living/broken/
skylib_mudos_v1/mudlib/cmds/player/group_cmds/
skylib_mudos_v1/mudlib/d/admin/
skylib_mudos_v1/mudlib/d/admin/room/
skylib_mudos_v1/mudlib/d/admin/room/we_care/
skylib_mudos_v1/mudlib/d/admin/save/
skylib_mudos_v1/mudlib/d/admin/text/
skylib_mudos_v1/mudlib/d/learning/TinyTown/buildings/
skylib_mudos_v1/mudlib/d/learning/TinyTown/map/
skylib_mudos_v1/mudlib/d/learning/TinyTown/roads/
skylib_mudos_v1/mudlib/d/learning/chars/
skylib_mudos_v1/mudlib/d/learning/functions/
skylib_mudos_v1/mudlib/d/learning/handlers/
skylib_mudos_v1/mudlib/d/learning/help_topics/
skylib_mudos_v1/mudlib/d/learning/help_topics/npcs/
skylib_mudos_v1/mudlib/d/learning/help_topics/objects/
skylib_mudos_v1/mudlib/d/learning/help_topics/rcs_demo/
skylib_mudos_v1/mudlib/d/learning/help_topics/rcs_demo/RCS/
skylib_mudos_v1/mudlib/d/learning/help_topics/rooms/
skylib_mudos_v1/mudlib/d/learning/help_topics/rooms/crowd/
skylib_mudos_v1/mudlib/d/learning/help_topics/rooms/situations/
skylib_mudos_v1/mudlib/d/learning/save/
skylib_mudos_v1/mudlib/d/learning/school/
skylib_mudos_v1/mudlib/d/learning/school/add_sc/
skylib_mudos_v1/mudlib/d/learning/school/characters/
skylib_mudos_v1/mudlib/d/learning/school/general/
skylib_mudos_v1/mudlib/d/learning/school/getting-started/
skylib_mudos_v1/mudlib/d/learning/school/getting-started/basic_commands/
skylib_mudos_v1/mudlib/d/learning/school/getting-started/edtutor/
skylib_mudos_v1/mudlib/d/learning/school/getting-started/unix_tutor/
skylib_mudos_v1/mudlib/d/learning/school/items/
skylib_mudos_v1/mudlib/d/learning/school/npc_school/
skylib_mudos_v1/mudlib/d/learning/school/room_school/
skylib_mudos_v1/mudlib/d/learning/school/room_school/room_basic/
skylib_mudos_v1/mudlib/d/learning/school/room_school/situations/
skylib_mudos_v1/mudlib/d/learning/school/room_school/terrain_tutor/
skylib_mudos_v1/mudlib/d/learning/text/
skylib_mudos_v1/mudlib/d/liaison/
skylib_mudos_v1/mudlib/d/mudlib/
skylib_mudos_v1/mudlib/d/mudlib/changes/
skylib_mudos_v1/mudlib/d/playtesters/
skylib_mudos_v1/mudlib/d/playtesters/effects/
skylib_mudos_v1/mudlib/d/playtesters/handlers/
skylib_mudos_v1/mudlib/d/playtesters/items/
skylib_mudos_v1/mudlib/d/sage/
skylib_mudos_v1/mudlib/doc/
skylib_mudos_v1/mudlib/doc/creator/
skylib_mudos_v1/mudlib/doc/driver/
skylib_mudos_v1/mudlib/doc/driver/efuns/arrays/
skylib_mudos_v1/mudlib/doc/driver/efuns/buffers/
skylib_mudos_v1/mudlib/doc/driver/efuns/compile/
skylib_mudos_v1/mudlib/doc/driver/efuns/filesystem/
skylib_mudos_v1/mudlib/doc/driver/efuns/floats/
skylib_mudos_v1/mudlib/doc/driver/efuns/functions/
skylib_mudos_v1/mudlib/doc/driver/efuns/general/
skylib_mudos_v1/mudlib/doc/driver/efuns/mappings/
skylib_mudos_v1/mudlib/doc/driver/efuns/mixed/
skylib_mudos_v1/mudlib/doc/driver/efuns/mudlib/
skylib_mudos_v1/mudlib/doc/driver/efuns/numbers/
skylib_mudos_v1/mudlib/doc/driver/efuns/parsing/
skylib_mudos_v1/mudlib/doc/known_command/
skylib_mudos_v1/mudlib/doc/login/
skylib_mudos_v1/mudlib/doc/lpc/basic_manual/
skylib_mudos_v1/mudlib/doc/lpc/intermediate/
skylib_mudos_v1/mudlib/doc/new/add_command/
skylib_mudos_v1/mudlib/doc/new/events/
skylib_mudos_v1/mudlib/doc/new/handlers/
skylib_mudos_v1/mudlib/doc/new/living/race/
skylib_mudos_v1/mudlib/doc/new/living/spells/
skylib_mudos_v1/mudlib/doc/new/object/
skylib_mudos_v1/mudlib/doc/new/player/
skylib_mudos_v1/mudlib/doc/new/room/guild/
skylib_mudos_v1/mudlib/doc/new/room/outside/
skylib_mudos_v1/mudlib/doc/new/room/storeroom/
skylib_mudos_v1/mudlib/doc/object/
skylib_mudos_v1/mudlib/doc/playtesters/
skylib_mudos_v1/mudlib/doc/policy/
skylib_mudos_v1/mudlib/doc/weapons/
skylib_mudos_v1/mudlib/global/
skylib_mudos_v1/mudlib/global/creator/
skylib_mudos_v1/mudlib/global/handlers/
skylib_mudos_v1/mudlib/global/virtual/setup_compiler/
skylib_mudos_v1/mudlib/include/cmds/
skylib_mudos_v1/mudlib/include/effects/
skylib_mudos_v1/mudlib/include/npc/
skylib_mudos_v1/mudlib/include/room/
skylib_mudos_v1/mudlib/include/shops/
skylib_mudos_v1/mudlib/net/daemon/
skylib_mudos_v1/mudlib/net/daemon/chars/
skylib_mudos_v1/mudlib/net/inherit/
skylib_mudos_v1/mudlib/net/obj/
skylib_mudos_v1/mudlib/obj/amulets/
skylib_mudos_v1/mudlib/obj/b_day/
skylib_mudos_v1/mudlib/obj/clothes/
skylib_mudos_v1/mudlib/obj/dwarmours/plate/
skylib_mudos_v1/mudlib/obj/dwclothes/transport/horse/
skylib_mudos_v1/mudlib/obj/dwscabbards/
skylib_mudos_v1/mudlib/obj/dwweapons/axes/
skylib_mudos_v1/mudlib/obj/dwweapons/chains/
skylib_mudos_v1/mudlib/obj/faith/symbols/
skylib_mudos_v1/mudlib/obj/fungi/
skylib_mudos_v1/mudlib/obj/gatherables/
skylib_mudos_v1/mudlib/obj/instruments/
skylib_mudos_v1/mudlib/obj/magic/
skylib_mudos_v1/mudlib/obj/media/
skylib_mudos_v1/mudlib/obj/misc/player_shop/
skylib_mudos_v1/mudlib/obj/monster/godmother/
skylib_mudos_v1/mudlib/obj/monster/transport/
skylib_mudos_v1/mudlib/obj/rings/
skylib_mudos_v1/mudlib/obj/spells/
skylib_mudos_v1/mudlib/obj/stationery/
skylib_mudos_v1/mudlib/obj/stationery/envelopes/
skylib_mudos_v1/mudlib/obj/stationery/papers/
skylib_mudos_v1/mudlib/obj/toys/
skylib_mudos_v1/mudlib/obj/vessels/
skylib_mudos_v1/mudlib/obj/weapons/swords/
skylib_mudos_v1/mudlib/save/autodoc/
skylib_mudos_v1/mudlib/save/leaflets/
skylib_mudos_v1/mudlib/save/mail/
skylib_mudos_v1/mudlib/save/new_soul/data/
skylib_mudos_v1/mudlib/save/parcels/
skylib_mudos_v1/mudlib/save/playerinfo/
skylib_mudos_v1/mudlib/save/players/d/
skylib_mudos_v1/mudlib/save/random_names/
skylib_mudos_v1/mudlib/save/random_names/data/
skylib_mudos_v1/mudlib/save/terrains/
skylib_mudos_v1/mudlib/save/terrains/tutorial_desert/
skylib_mudos_v1/mudlib/save/terrains/tutorial_grassy_field/
skylib_mudos_v1/mudlib/save/terrains/tutorial_mountain/
skylib_mudos_v1/mudlib/save/todo_lists/
skylib_mudos_v1/mudlib/secure/
skylib_mudos_v1/mudlib/secure/cmds/admin/
skylib_mudos_v1/mudlib/secure/cmds/lord/
skylib_mudos_v1/mudlib/secure/config/
skylib_mudos_v1/mudlib/secure/handlers/autodoc/
skylib_mudos_v1/mudlib/secure/handlers/intermud/
skylib_mudos_v1/mudlib/secure/include/global/
skylib_mudos_v1/mudlib/secure/save/
skylib_mudos_v1/mudlib/secure/save/handlers/
skylib_mudos_v1/mudlib/secure/std/classes/
skylib_mudos_v1/mudlib/secure/std/modules/
skylib_mudos_v1/mudlib/std/commands/
skylib_mudos_v1/mudlib/std/commands/shadows/
skylib_mudos_v1/mudlib/std/creator/
skylib_mudos_v1/mudlib/std/dom/
skylib_mudos_v1/mudlib/std/effects/
skylib_mudos_v1/mudlib/std/effects/external/
skylib_mudos_v1/mudlib/std/effects/fighting/
skylib_mudos_v1/mudlib/std/effects/priest/
skylib_mudos_v1/mudlib/std/effects/room/
skylib_mudos_v1/mudlib/std/environ/
skylib_mudos_v1/mudlib/std/guilds/
skylib_mudos_v1/mudlib/std/guilds/old/
skylib_mudos_v1/mudlib/std/languages/
skylib_mudos_v1/mudlib/std/languages/BACKUPS/
skylib_mudos_v1/mudlib/std/liquids/
skylib_mudos_v1/mudlib/std/npc/
skylib_mudos_v1/mudlib/std/npc/goals/
skylib_mudos_v1/mudlib/std/npc/goals/basic/
skylib_mudos_v1/mudlib/std/npc/goals/misc/
skylib_mudos_v1/mudlib/std/npc/plans/
skylib_mudos_v1/mudlib/std/npc/plans/basic/
skylib_mudos_v1/mudlib/std/npc/types/
skylib_mudos_v1/mudlib/std/npc/types/helper/
skylib_mudos_v1/mudlib/std/npcs/
skylib_mudos_v1/mudlib/std/outsides/
skylib_mudos_v1/mudlib/std/races/shadows/
skylib_mudos_v1/mudlib/std/room/basic/topography/
skylib_mudos_v1/mudlib/std/room/controller/
skylib_mudos_v1/mudlib/std/room/inherit/topography/
skylib_mudos_v1/mudlib/std/room/topography/area/
skylib_mudos_v1/mudlib/std/room/topography/iroom/
skylib_mudos_v1/mudlib/std/room/topography/milestone/
skylib_mudos_v1/mudlib/std/shadows/curses/
skylib_mudos_v1/mudlib/std/shadows/disease/
skylib_mudos_v1/mudlib/std/shadows/fighting/
skylib_mudos_v1/mudlib/std/shadows/healing/
skylib_mudos_v1/mudlib/std/shadows/magic/
skylib_mudos_v1/mudlib/std/shadows/poison/
skylib_mudos_v1/mudlib/std/shadows/rituals/
skylib_mudos_v1/mudlib/std/shadows/room/
skylib_mudos_v1/mudlib/std/shops/controllers/
skylib_mudos_v1/mudlib/std/shops/objs/
skylib_mudos_v1/mudlib/std/shops/player_shop/
skylib_mudos_v1/mudlib/std/socket/
skylib_mudos_v1/mudlib/std/soul/
skylib_mudos_v1/mudlib/std/soul/d/
skylib_mudos_v1/mudlib/std/soul/e/
skylib_mudos_v1/mudlib/std/soul/i/
skylib_mudos_v1/mudlib/std/soul/j/
skylib_mudos_v1/mudlib/std/soul/k/
skylib_mudos_v1/mudlib/std/soul/l/
skylib_mudos_v1/mudlib/std/soul/n/
skylib_mudos_v1/mudlib/std/soul/o/
skylib_mudos_v1/mudlib/std/soul/q/
skylib_mudos_v1/mudlib/std/soul/u/
skylib_mudos_v1/mudlib/std/soul/v/
skylib_mudos_v1/mudlib/std/soul/y/
skylib_mudos_v1/mudlib/std/soul/z/
skylib_mudos_v1/mudlib/std/stationery/
skylib_mudos_v1/mudlib/w/
skylib_mudos_v1/mudlib/w/default/
skylib_mudos_v1/mudlib/w/default/armour/
skylib_mudos_v1/mudlib/w/default/clothes/
skylib_mudos_v1/mudlib/w/default/item/
skylib_mudos_v1/mudlib/w/default/npc/
skylib_mudos_v1/mudlib/w/default/room/
skylib_mudos_v1/mudlib/w/default/weapon/
skylib_mudos_v1/mudlib/www/
skylib_mudos_v1/mudlib/www/download/
skylib_mudos_v1/mudlib/www/java/
skylib_mudos_v1/mudlib/www/secure/
skylib_mudos_v1/mudlib/www/secure/lpc/advanced/
skylib_mudos_v1/mudlib/www/secure/lpc/intermediate/
skylib_mudos_v1/v22.2b14-DSv10/
skylib_mudos_v1/v22.2b14-DSv10/ChangeLog.old/
skylib_mudos_v1/v22.2b14-DSv10/Win32/
skylib_mudos_v1/v22.2b14-DSv10/compat/
skylib_mudos_v1/v22.2b14-DSv10/compat/simuls/
skylib_mudos_v1/v22.2b14-DSv10/include/
skylib_mudos_v1/v22.2b14-DSv10/mudlib/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/clone/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/command/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/data/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/etc/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/include/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/inherit/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/inherit/master/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/log/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/single/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/single/tests/compiler/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/single/tests/efuns/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/single/tests/operators/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/u/
skylib_mudos_v1/v22.2b14-DSv10/tmp/
skylib_mudos_v1/v22.2b14-DSv10/windows/
/**
 * This is the inherit for wrapping papers which can be wrapped
 * around things.
 *
 * To use the inherit you must call make_wrapping() on the object,
 * to set up the basic parameters of the wrapping paper.
 *
 * @see make_wrapping()
 * @author Sandoz, 2002.
 */

inherit BAGGAGE_OBJ;

#define TINY    10
#define SMALL   20
#define MEDIUM  50
#define LARGE   100
#define HUGE    200
#define MAX     400

nosave int wrapped, moving;
nosave string desc, size;

/** @ignore yes */
string get_long() {
    if( !wrapped ) {
        int number;
        string str;

        number = query_max_weight() / 5;

        switch( number ) {
           case 0 :
             str = "less than half a pound";
           break;
           case 1 :
             str = "about half a pound";
           break;
           case 2 :
             str = "about a pound";
           break;
           case 3 :
             str = "about a pound and a half";
           break;
           case 4 .. 14 :
             str = "about "+query_num( ( number + 1 ) / 2 ) +" pounds";
           break;
           case 15 .. 24 :
             str = "about ten pounds";
           break;
           case 25 .. 34 :
             str = "about fifteen pounds";
           break;
           case 35 .. 149 :
             str = "about "+query_num( ( number + 10 ) / 20 * 10 )+" pounds";
           break;
           case 150 .. 249 :
             str = "about a hundred pounds";
           break;
           default :
             str = "over a hundred pounds";
        }

        return "This is "+add_a(size)+" piece of "+desc+" paper, perfect for "
            "wrapping around goods before posting a parcel, or just making a "
            "present.\nIt looks big and durable enough to fit "+str+" of "
            "goods.\n";
    }

    return "This "+size+" piece of "+desc+" paper appears to have been "
        "wrapped around some goods.  A loose flap invites you to unwrap the "
        "packet and unravel whatever lies within.\n";

} /* get_long() */

/** @ignore */
void create() {
    ::create();
    set_stuck( 1 );
} /* create() */

/**
 * This method queries whether this object is a parcel
 * acceptable by the post office or not.
 * It returns true if it has been wrapped.
 * @return 1 if wrapped, 0 if not
 */
int query_is_postage_parcel() { return wrapped; }

/** @ignore yes */
void set_wrapped() {
    if( wrapped ) {
        set_name("packet");
        remove_adjective( ({"piece", "of", "wrapping"}) );
        remove_plural("papers");
        add_adjective("paper");
        add_plural("packets");
        set_short( size+" "+desc+" paper packet");
        set_main_plural( size+" "+desc+" paper packets");
    }
} /* get_short() */

/**
 * This method queries whether or not we have been wrapped or not.
 * @return 1 for wrapped, 0 for unused
 */
int query_wrapped() { return wrapped; }

/**
 * This method returns the size string of the paper.
 * @return the size of the paper as a string
 */
string query_size() { return size; }

/**
 * This method returns the extra description of the paper.
 * @return the extra description of the paper
 */
string query_desc() { return desc; }

/** @ignore yes */
int do_not_sell() { return wrapped; }

/**
 * This method sets up the basic parameters of the wrapping paper.
 * The description argument should be a short, adjective-like
 * description for the object, which should not hint at the size
 * of the paper, because that will be added automatically.
 * Capacity should be the maximum weight of the things that could
 * be wrapped with the paper.
 * <br>
 * The size description of the paper will be calculated from the
 * capacity according to the following table:<br>
 * 0..10    - "tiny"<br>
 * 11..20   - "small"<br>
 * 21..50   - "medium-sized"<br>
 * 51..100  - "large"<br>
 * 101..200 - "huge"<br>
 * 201..400 - "enormous"<br>
 * <br>
 * Anything above 200 will give an error message and a 'broken' paper
 * will be created.
 * @param description the short adjective-like description
 * @param capacity the capacity of the wrapping paper
 * @example
 * // Make a "huge brown wrapping paper"
 * make_wrapping("brown", 120 );
 * @example
 * // Make a "small beige wrapping paper"
 * make_wrapping("beige", 8 );
 */
void make_wrapping( string description, int capacity ) {
    if( capacity < 2 )
        capacity = 2;

    desc = description;

    switch( capacity ) {
      case 0..TINY:
        size = "tiny";
      break;
      case TINY+1..SMALL:
        size = "small";
      break;
      case SMALL+1..MEDIUM:
        size = "medium-sized";
      break;
      case MEDIUM+1..LARGE:
        size = "large";
      break;
      case LARGE+1..HUGE:
        size = "huge";
      break;
      case HUGE+1..MAX:
        size = "enormous";
      break;
      default:
        size = "broken";
        capacity = MAX;
        printf("The maximum capacity for a wrapping paper is "+MAX+".\n");
    }

    set_name("paper");
    set_short( size+" piece of "+desc+" wrapping paper");
    set_main_plural( size+" pieces of "+desc+" wrapping paper");
    add_adjective( size+" piece of "+desc+" wrapping");

    set_long( (: get_long() :) );

    set_weight( 1 + capacity / ( LARGE * 25 ) );
    set_value( 100 + to_int( 20 * sqrt( to_float(capacity) ) ) );
    set_max_weight( capacity );

    set_material("paper");
    add_property("writeable", 1 );

} /* make_wrapping() */

/** @ignore yes */
int test_add( object ob, int flag ) {
    if( !moving )
        return 0;
    return ::test_add( ob, flag );
} /* test_add() */

/** @ignore */
int do_wrap( object *obs ) {
    object ob, *failed;
    int i;

    if( wrapped ) {
        add_failed_mess("$D $V$0=has,have$V$ already been wrapped around "
            "something.\n");
        return 0;
    }

    if( !sizeof(obs) ) {
        add_failed_mess("You need to $V $D around something.\n");
        return 0;
    }

    if( ( i = member_array( TO, obs ) ) != -1 ) {
        add_failed_mess("You cannot wrap $I around itself.\n", obs[i..i] );
        return 0;
    }

    if( sizeof( failed = filter( obs, (: living($1) :) ) ) ) {
        add_failed_mess("You cannot $V $D around $I because they are living "
            "things.\n", failed );
        return 0;
    }

    if( sizeof( failed = filter( obs, (: ENV($1) != TP :) ) ) ) {
        add_failed_mess("You don't appear to have $I anymore.\n", failed );
        return 0;
    }

    if( sizeof( failed = filter( obs, (: ENV($1) != TP :) ) ) ) {
        add_failed_mess("You don't appear to have $I anymore.\n", failed );
        return 0;
    }

    if( sizeof( failed = filter( obs, (: $1->query_worn_by() :) ) ) ) {
        add_failed_mess("You cannot $V $D around $I because you are "
            "wearing "+({"it", "them"})[query_group(failed)]+".\n", failed );
        return 0;
    }

    if( sizeof( failed = filter( obs, (: $1->query_wielded() :) ) ) ) {
        add_failed_mess("You cannot $V $D around $I because you are "
            "holding "+({"it", "them"})[query_group(failed)]+".\n", failed );
        return 0;
    }

    if( sizeof( failed = filter( obs, (: $1->query_keep() :) ) ) ) {
        add_failed_mess("You cannot $V $D around $I because you are "
            "keeping "+({"it", "them"})[query_group(failed)]+".\n", failed );
        return 0;
    }

    i = 0;

    foreach( ob in obs )
        i += ob->query_complete_weight();

    if( i > query_max_weight() ) {
        add_failed_mess("$I $V$0=is,are$V$ too large to fit in $D.\n", obs );
        return 0;
    }

    set_stuck( 0 );
    moving = 1;
    obs->move(TO);
    moving = 0;
    do_close();
    set_stuck( 1 );
    wrapped = 1;

    call_out( (: set_wrapped :), 2 );

    add_succeeded_mess("$N carefully $V $D around $I.\n", obs );
    return 1;

} /* do_wrap() */

/** @ignore */
int do_unwrap() {
    object *obs, ob;

    if( !wrapped ) {
        add_failed_mess("$D $V$0=has,have$V$ not been wrapped around "
            "anything.\n");
        return 0;
    }

    set_stuck(0);
    do_open();

    if( !sizeof( obs = INV(TO) ) ) {
        add_succeeded_mess("$N tear$s $D to pieces and, much to $p "
            "surprise, find$s nothing within.\n");
    } else {
        add_succeeded_mess("");
        tell_object( TP, "You tear "+the_short()+" to pieces and find "+
            query_multiple_short( obs, "a")+" enclosed within.\n");
        tell_room( ENV(TP), TP->the_short()+" $V$0=tears,tear$V$ "+
            the_short()+" to pieces and $V$0=finds,find$V$ "+
            query_multiple_short( obs, "a")+" enclosed within.\n", TP );
        if( sizeof( obs = filter( obs, (: $1->move(TP) :) ) ) ) {
            obs->move(ENV(TP));
            tell_object( TP, "Unfortunately you are too burdened and fumble "+
                query_multiple_short(obs)+".\n");
        }
    }

    ob = clone_object(PAPER_OBJ);

    ob->set_short( size+" torn piece of "+desc+" paper");
    ob->set_adjectives( ({ }) );
    ob->add_adjective( size+" torn piece of "+desc );
    ob->set_long("This is "+add_a(size)+", somewhat torn piece of "+
        desc+" paper that seems to have come off a packet or something "
        "similar.\n");

    ob->set_weight( 80 * query_weight() / 100 + 1 );
    ob->set_value( 1 + to_int( 20 * sqrt( to_float(query_max_weight()) ) ) );
    ob->set_read_mess( query_read_mess() );

    if( ob->move(TP) )
        ob->move(ENV(TP));

    move("/room/rubbish");
    return 1;

} /* do_unwrap() */

/** @ignore */
void init() {
    ::init();
    add_command("wrap",
        "<direct:object:me> around <indirect:object:me'things'>",
        (: do_wrap($1) :) );
    add_command("wrap", "<indirect:object:me'things'> in <direct:object:me>",
        (: do_wrap($1) :) );
    add_command("unwrap");
} /* init() */

/** @ignore */
mixed stats() {
    return ::stats() + ({
        ({ "wrapped", wrapped }),
        ({ "desc", desc }),
        ({ "size", size }),
    });
} /* stats() */

/** @ignore yes */
void init_dynamic_arg( mapping map, mixed dummy ) {
    if( map["::"] ) {
        moving = 1;
        ::init_dynamic_arg( map["::"], dummy );
        moving = 0;
    }

    if( map["wrapped"] )
        wrapped = map["wrapped"];

    set_wrapped();
    set_long( (: get_long() :) );

} /* init_dynamic_arg() */

/** @ignore yes */
mapping query_dynamic_auto_load() {
    mapping map;

    map = ([ "::" : ::query_dynamic_auto_load() ]);

    if( wrapped )
        map["wrapped"] = wrapped;

    return map;

} /* query_dynamic_auto_load() */

/** @ignore */
mapping int_query_static_auto_load() {
    mapping map;

    map = ([ "::" : ::int_query_static_auto_load() ]);

    if( desc )
        map["desc"] = desc;
    if( size )
        map["size"] = size;

    return map;

} /* int_query_static_auto_load() */

/** @ignore */
void init_static_arg( mapping map ) {
    if( map["::"] )
        ::init_static_arg( map["::"] );

    if( map["desc"] )
        desc = map["desc"];

    if( map["size"] )
        size = map["size"];

} /* init_static_arg() */

/** @ignore */
mixed query_static_auto_load() {
    if( base_name(TO) == __FILE__[0..<3] )
        return int_query_static_auto_load();
    return ([ ]);
} /* query_static_auto_load() */