/*
 * A birthday card to give to ppl on their birthday (in real life)
 */
#define DEMON "/obj/b_day/demon"
inherit "/std/object";
int is_open, opened_before;
string owner_name;
mixed *query_read_mess() {
  if(!is_open) {
    return ({ ({ "The card is addressed to you. Maybe you should open it?\n",
                 0, "common", 1 }) });
  }
  return ::query_read_mess();
}
void set_closed_mesg() {
    set_long("The closed card has been carefully handmade from pink " +
        "cardboard. There is a rather vague illustration of a " +
        "non-identifiable piece of flora on the front.\n");
}
void set_open_mesg() {
    set_long("The open card has been carefully handmade from pink " +
        "cardboard.\n");
}
void setup() {
  string *wizards, list;
  int i;
  is_open = opened_before = 0;
  owner_name = (string)this_player()->query_cap_name();
  set_name("card");
  add_adjective("birthday");
  set_short(owner_name + "'s birthday card");
  set_main_plural("birthday cards");
  add_property("determinate", "");
  set_closed_mesg();
/* I can't see why it shouldn't be droppable...
  reset_drop();
*/
  wizards = get_dir("/w/");
  list = "Written inside the card, in various hands, is:\n\n" +
        "  Have a wonderful Birthday, " + owner_name + "!!!\n" +
        "LOVE AND KISSES FROM...\n\n    ";
  for(i=0;i<sizeof(wizards);i++)
    if("/secure/login"->test_user(wizards[i])) {
      list += capitalize(wizards[i]);
      if(i == sizeof(wizards)-1) list += ".\n";
      else if(i == sizeof(wizards)-2) list += " and ";
      else list += ", ";
    }
  set_read_mess(list);
}
void init() {
    this_player()->add_command("open", this_object());
    this_player()->add_command("close", this_object());
}
int do_open() {
    object demon;
    if(is_open) {
        add_failed_mess("It is already open.\n");
        return 0;
    }
    is_open = 1;
    set_open_mesg();
    if(opened_before) return 1;
    opened_before = 1;
    demon = clone_object(DEMON);
    demon->move(environment(this_player()));
    demon->set_owner(this_player());
    say("*** POP ***\nAn Origami Demon explodes from " + owner_name +
"'s birthday card as " + owner_name +" opens it!\n");
    write("*** POP ***\n" +
"An Origami Demon explodes from your card as you open it!\n");
    return 1;
}
int do_close() {
    if(!is_open) {
        add_failed_mess("It is not open for you to close!\n");
        return 0;
    }
    is_open = 0;
    set_closed_mesg();
    return 1;
}
mixed query_auto_load() {
    return ({ is_open, opened_before });
}
void init_arg(mixed arg) {
    if(!this_player()->query_is_birthday_today()) {
       write("You throw away your old, tattered birthday card...\n");
        call_out("dest_me", 0);
       return;
    }
    /* it is still your birthday! */
    is_open = arg[0];
    opened_before = arg[1];
    if(is_open) set_open_mesg();
    else set_closed_mesg();
}