parent $located_location object $body var $root child_index 0 var $root owners [$body] var $root fertile 0 var $has_verbs verbs #[] var $location contents [] var $located location $nowhere var $root inited 1 var $root owned [$body] var $body body_parts #[] var $gendered gender $gender_neuter var $located obvious 1 var $described prose #[] var $root manager $body var $root writable [$body] var $root readable ['parameters, 'methods, 'code] var $root dbref 'body var $named name ['uniq, "Generic Body"] var $named name_aliases [] var $old_command_environment verb_cache #[] var $old_command_environment command_cache [] var $old_command_environment shortcuts_cache [] var $body available_body_parts 0 var $body wearing 0 method tell // . method set_body_part arg part, frob, param; if (sender().has_ancestor($wearable_class)) throw(~perm, "Sender must be $wearable_class."); body_parts = dict_add(body_parts, frob.new(part, param)); . method wearing arg [args]; var x, w; w = wearing || []; if (args && ('objects in args)) { for x in [1 .. listlen(w)] w = replace(w, x, class(w[x])); } return w; . method body_parts return body_parts; . method namef arg [args]; if (!args) args = [['name]]; if (((args[1]) == 'nactivity) || ((args[1]) == 'titled)) args = sublist(args, 2); return pass(@args); . method available_body_parts return available_body_parts || ['head, 'rleg, 'lleg, 'rarm, 'larm, 'torso]; . method wear arg frob; if (caller() != $wearable_class) throw(~wear, "You can only wear descendants of $wearable_class."); wearing = wearing ? [@wearing, frob] | [frob]; . method shed arg name; var f; (> .perms(sender(), 'this) <); for f in (.wearing()) { if (match_begin(f.name(), name)) wearing = setremove(wearing, f); } . method environment return pass() + (.wearing('objects)); .