! Clothing.h
! Written 1998 by Denis Moskowitz (
[email protected])
! - All Rites Reversed (k) Reuse what you like
! Defines Clothes class for easy clothing handling.
! Set area, level, and covering for pieces of clothing.
! Slightly mogrified from the original by Timothy Groves
! (
[email protected])
Class Clothes
has clothing
with area 0, ! area of body covered
level 0, ! distance of clothing from body: e.g. underwear < shirt < coat
covering true, ! whether this piece of clothing hides other pieces
conceal [i c l;
! Hide clothing that is entirely covered by other clothing
! This is called when clothing is put on or taken off
c = 0; l = -1;
! take a look at all worn clothing
objectloop (i in parent(self) && i has worn && i ofclass Clothes) {
if (i.area == self.area && i.level < self.level) {
if (self.covering && self has worn) { ! hide covered clothing
give i concealed;
}
else if (i.level > l) { ! find next visible clothing
c = i;
l = c.level;
}
}
}
if (c) { !show clothing under this piece and recurse inward
give c ~concealed;
c.conceal();
}
],
before [c j i l;
Wear, Disrobe:
! Don't let player take off clothing if it's under something
! (WEAR SHIRT. WEAR JACKET. TAKE OFF SHIRT.)
! Don't let player put on clothing in wrong order
! (WEAR JACKET. WEAR SHIRT.)
! Don't let player wear two of the same thing at once
! (WEAR BLUE SHIRT. WEAR WHITE SHIRT.)
c = 0; ! Clothing that is at the same level
j = 0; ! Clothing that is at a higher level
l = self.level; ! Level of j
objectloop(i in parent(self) && i has worn && i ofclass Clothes) {
if (i.area == self.area) {
if (i.level == self.level && i ~= self) c = i;
else if (i.level > l) { j = i; l = j.level; }
}
}
if (j) { ! Clothing over self
"You'll have to take off ", (the) j, " first.";
}
if (c && action == ##Wear) { ! Clothing at the same level as self
"You can't wear ", (the) self, " and ", (the) c, " at the same time.";
}
],
after [i count;
Wear, Disrobe: self.conceal();
print "You are now wearing ";
count = 0;
objectloop(i in parent(self))
{
if (i hasnt worn) give i ~workflag; else {give i workflag; count++;}
}
if (count == 0) print "nothing";
else WriteListFrom(child(parent(self)),
ENGLISH_BIT + WORKFLAG_BIT + CONCEAL_BIT);
".";
];
!
! ListClothing(subject) - lists everything worn by the subject. Concealed
! items are not revealed using this function.
!
[ ListClothing subject i count;
print (the) subject, " is wearing ";
count = 0;
objectloop(i in subject)
{
if (i hasnt worn) give i ~workflag; else {give i workflag; count++;}
}
if (count == 0) print "nothing";
else WriteListFrom(child(subject),
ENGLISH_BIT + WORKFLAG_BIT + CONCEAL_BIT);
".";
];
!
! CheckArea(subject, test_area) - return the outermost clothing item worn in
! the selected area on the subject. Great for testing for generic items of
! clothing at certain levels.
!
[ CheckArea subject test_area flag i;
flag = nothing;
objectloop (i in subject)
{
if (i ofclass Clothes)
if (i has worn)
if (i.area==test_area)
if (flag==nothing)
flag = i;
else
if (flag.level < i.level)
flag = i;
}
return flag;
];
!
! CheckLevel(subject,test_level) - Return the first article of clothing worn
! at the selected level in the subject's inventory.
!
[ CheckLevel subject test_level flag i;
flag = nothing;
objectloop (i in subject)
{
if (i ofclass Clothes)
if (i has worn)
if (i.level==test_level)
flag = i;
}
return flag;
];