NAME
	object - general guidelines for building objects

DESCRIPTION

	/basic/id.c
	/basic/object/dimensions

	It is always better to clone and define objects than to make
	every one into its own file.

	It is always better to use virtual rooms than normal rooms.

	Standard objects are currently in /obj directory. These
	include /obj/armour.c, (/obj/bag.c?), /obj/drink.c, /obj/food.c,
	/obj/monster.c, /obj/room.c, (/obj/torch.c), /obj/treasure.c
	and /obj/weapon.c

FUNCTIONS
	These functions are common to all objects. Standard set_ functions
	should be "status set_xxx(...)", and return 1 if setting was
	successful, 0 if it wasn't.

    basic/id.c:

	set_name(string str)
		set_name should always be called first, unless it is
		a special case.
		Name should be in lower case, like this:
		set_name("long sword"), set_name("full plate mail"),
		set_name("torch"). Articles (a, an, the) must NEVER be used
		with this function.
	set_id(string *str)
		This function adds more id's to the thing. The one given
		with set_name doesn't have to be added, it is done
		automatically. Example:
		set_id(({ "long", "sword", "shining", "magical" }));
	set_short(string str)
		Short should not have articles either. It should also
		be in lower case, unless there is a reason to use upper
		case. Examples:
		set_short("full plate mail");
		set_short("Shining long sword");
	set_long(string str)
		Long description does not need to have line feeds. The mudlib
		automatically word wraps long descriptions. Example:
		set_long("It is a beautiful, glowing long sword of \
elvish workmanship. The magically sharpened blade is made of \
pure Ithilnaur!");
		Note the "\" method - this style uses less memory than
		concatenating the strings with '+'.

    basic/object/dimensions.c:

	set_weight(int x)
		Weight is measured in stupid units that mean nothing.

		Typical weights of objects are:
			1	any small object
			2	objects that weigh about 0.5 to 1 kg
			3	objects that weight 5 or less kilograms
			4	about 5..10 kg
			5..	about (2 * weight units) kilograms

	set_width(int x), set_height(int x), set_depth(int x)
		Functions to set up one dimension.

	int *query_size()
		Always returns the array of 3 integers.

	set_size(mixed x)
		Array of three integers, dimensions in _centimetres_ (!)

		({ width, height, depth })    = X, Y, Z

		If you use "set_size(7)", _height_ (size[1]), the default
		dimension, will be set to 7.

		Normally this function should however be used only to
		set up the whole size array, like this:

			set_size(({ 40, 50, 20 }));

		That makes an object 40 cm wide, 50 cm tall and 20 cm deep.

		If (and when) objects have size, we can check if an
		armour fits a player, if a sword actually fits into a
		bag etc.

		But what if you have for example a cloak? That can be
		folded into very small size, yet it is quite large when
		spread. Simple, just do

			set_size(({ 120, 120, 0 }));

		There you have a 120x120 cm cloth, depth 0 which indicates
		that it can be folded, taking no space at all (practically).

EXAMPLE
	Two simple objects. I assume these are in reset_room().

		orc = clone_object("obj/monster");
		orc->set_name(orc);		/* ALWAYS set_name! */
		orc->set_id(({ "little", "little orc" }));
		orc->set_short("little orc");
		orc->set_level(1);
		orc->set_wander(4);
		orc->set_hp(75);	/* Normal hits is 50, but this is */
					/* a tough little bastard.	  */
		orc->set_weight(30); /* 60 kg */
		orc->set_size(({ 50, 140, 40 }));

		club = clone_object("obj/weapon");
		club->set_name("club");
		club->set_wc(6);
		club->set_weight(2);
		club->set_size(({ 6, 53, 4 }));
		club->set_blunt(1);
		move_object(club, orc);

		orc->wield(club);

		/* Finally move the orc into the room (don't forget this!) */
		move_object(orc, this_object());

	There you have a simple orc (who doesn't even talk), wielding
	a lousy club.

SEE ALSO
	armours, containers, doors, drinks, foods, livings,
	objects, players, monsters, rooms, torches, virtuals, weapons
