// Petrarch
// Merentha Lib 1.0
// <inventory>
string help() {
return "Syntax: inventory\n\n\
This command displays the inventory which you are carrying or which \
you are wearing/wielding.";
}
int command() {
object *inv=all_inventory(this_player());
mapping worn=([]),carried=([]);
string *worn_items, *carried_items, *pic;
string tmp;
int i=sizeof(inv),j,w,c,p,x,px;
int total, total_weight;
if(member_array("left wing", this_player()->query_limbs())==-1) {
pic=explode(center("\
_ \n\
/ \\ \n\
\\_/ \n\
_|_ \n\
/| |\\ \n\
/ | | \\ \n\
M | | M\n\
|-| \n\
| | \n\
| | \n\
_| |_ ",13),"\n");
px=12;
} else {
pic=explode(center("\
_ \n\
__ / \\ __ \n\
/ \\ \\ / / \\ \n\
/ \\_|_/ \\\n\
| /| |\\ |\n\
| / | | \\ |\n\
| M /| |\\ M |\n\
| __/ |-| \\__ |\n\
|/ | | \\|\n\
| | \n\
_| |_ ",19),"\n");
px=18;
}
while(i--) {
tmp=inv[i]->query_short();
if(!tmp) tmp=inv[i]->query_name();
if(!tmp) continue;
if(inv[i]->query_worn_by() || inv[i]->query_wielded_by()) {
if(worn[tmp]) worn[tmp]=worn[tmp]+1;
else worn[tmp]=1;
} else {
if(carried[tmp]) carried[tmp]=carried[tmp]+1;
else carried[tmp]=1;
}
total++;
total_weight+=inv[i]->query_mass();
}
i=this_player()->getenv("SCREEN");
if(!i) i=75;
i-=px;
i-=4;
i=i/2;
x=i;
j=sizeof(worn_items=keys(worn));
while(j--)
worn_items[j]=arrange_string(consolidate(worn[worn_items[j]], worn_items[j]),i-1);
j=sizeof(carried_items=keys(carried));
while(j--)
carried_items[j]=arrange_string(consolidate(carried[carried_items[j]], carried_items[j]),i-1);
i=sizeof(pic)-2;
c=sizeof(carried_items);
w=sizeof(worn_items);
p=i;
if(c>i) i=c;
if(w>i) i=w;
tmp="";
j=-2;
while(j<i) {
if(j==-2) {
tmp+=arrange_string("%^GREEN%^"+center("Carried Items",x),x-1);
tmp+=arrange_string("%^ORANGE%^"+pic[0],px);
tmp+=arrange_string("%^GREEN%^"+center("Worn Items",x),x-1);
tmp+="\n";
j++;
continue;
}
if(j==-1) {
tmp+=arrange_string("",x-1);
tmp+=arrange_string("%^ORANGE%^"+pic[1],px);
tmp+="\n";
j++;
continue;
}
tmp+="%^RED%^";
if(j<c) tmp+=carried_items[j];
else tmp+=arrange_string("",x-1);
tmp+="%^ORANGE%^";
if(j<p) tmp+=pic[j+2];
else tmp+=arrange_string("",px);
tmp+="%^RED%^";
if(j<w) tmp+=worn_items[j];
else tmp+=arrange_string("",x-1);
tmp+="\n";
j++;
}
tmp+=center("\nYou are carrying "+total+"/"+this_player()->query_max_items()+" items and "+this_player()->query_holding_mass()+"/"+this_player()->query_max_mass()+" weight",x*2+px);
i=this_player()->getenv("SCREEN");
this_player()->more(border(tmp, "inventory", (i?i:75)));
return 1;
}