new object $wearable_frob: $thing_frob;
var $described prose = [];
var $has_commands remote = #[];
var $has_name name = ['normal, "Generic Wearable Frob", "a Generic Wearable Frob"];
var $located location = $lost_and_found;
var $root created_on = 796268969;
var $root fertile = 1;
var $root flags = ['methods, 'code, 'fertile, 'variables, 'core];
var $root inited = 1;
var $root managed = [$wearable_frob];
var $root manager = $wearable_frob;
var $thing gender = 0;
protected method .change_data() {
arg this, what, new;
// hairy
if (!(this['worn])) {
if (what != 'worn)
return pass(this, what, new);
else
(this['location]).del_frob_from_contents((<this(), this>));
} else if (valid(this['worn])) {
(this['worn]).shed((<this(), this>));
}
this = dict_add(this, what, new);
if (valid(this['worn]))
(this['worn]).wear((<this(), this>));
else if (valid(this['location]))
(this['location]).add_frob_to_contents((<this(), this>));
return (<this(), this>);
};
public method .new() {
return .to_frob((pass().value()).add('worn, 0));
};
frob method .shed() {
arg this;
if (!(this['worn]))
throw(~perm, ("You are not wearing " + (.name(this))) + ".");
if ((this['worn]) != sender())
throw(~perm, ((("Remove " + (.name(this))) + " from ") + sender()) + "!?");
return .change_data(this, 'worn, 0);
};
frob method .wear() {
arg this;
if ((this['location]) != sender())
throw(~perm, ("You are not holding " + (.name(this))) + ".");
return .change_data(this, 'worn, sender());
};