Weapons are items that can be carried around by players or monsters. Each player can wield one weapon and will use that weapon to attack in combat. Weapons have the following default properties: Weapon class: a number in the range from 0 to 20. The higher the class the better is the weapon. The weapon class will sink with the usage of the weapon, but can be restored to the initial weapon class again. Weapon type: Either slashing, piercing or bludgeoning. This property is only used to display different combat messages at the time. Twohander: Is the weapon two-handed or one-handed. Block value: The number that is added to the armour class of a armour zone when block is used. The proper way to create weapons is to use the convenience function set_class to set the default values for a wide range of weapons. The different available classes are listed in the file /include/weapon_tbl.h. It is possible to change the default values of course. If your weapon doesn't need to change the default values, you should create the weapon using clone_object from inside your room or monster file: object weapon; weapon=clone_object("obj/weapon"); weapon->set_class("longsword"); move_object(weapon, this_object()); If your weapon differs from the defaults in one or more cases, you have to put the weapon into a separate file: inherit "obj/weapon"; reset(arg) { ::reset(arg); if (arg) return; set_class("longsword"); set_short("a fine longsword"); set_value(800); } Make sure that set_class is the first function you call, else it will delete your previous settings. If you need the defines for properties, such as P_NO_SELL (listed in /include/properties.h and /include/weapon.h), you have to replace the inherit "obj/weapon"; line with #include . Addendum 2016: There has never been and is NO property P_NO_SELL! But there was and is a property P_DESTRUCT_WHEN_SOLD! To get a complete list of functions you can call, look at the files /obj/item.c and /obj/weapon.c. To get more information about properties read 'man properties'. Useful functions you can override are wield() and hit(), which are called when the player wants to wield the weapon or when he hits an enemy respec- tively. The proper way to do it is like this: wield(str) { if (this_player()->query_guild()!="fighters") { write("You cannot wield this fine weapon.\n"); return 1; } return ::wield(str); } hit(ob) { if (ob->query_race()=="troll") return random(10); } The return value of the hit function is added to the hits of the player. Examples for various weapons are listed in /lib/weapon.