/* The singing birthday demon */ #define SONG "/obj/b_day/happy" inherit "/obj/monster"; int line; object owner; string owner_name; string* act_lines = ({ ":takes a deep breath...", "sing \"Happy Birthday to you\"", "sing \"Happy Birthday to you\"", "sing \"Happy Birthday, dear $N\"", ":pauses for breath...", "sing \"Happy Birthday to yoooou.\"", "sing \"The End!\"", "hug $n in a way that only a tiny paper " "demon could", ":waves a minute pointed hand.", ":frowns, then folds itself into nothingness..." }); void setup() { set_name("demon"); set_short("origami demon"); add_adjective("tiny"); add_adjective("pink"); add_adjective("paper"); add_adjective("origami"); set_main_plural("origami demons"); add_plural("demons"); set_long("This is a tiny, pink, paper demon. Looking closely you see " "that it has been made by someone with a black belt in " "Origami!\n"); set_race("demon"); set_level(1); line = 1; } void set_owner(string person_name) { owner = find_living(lower_case(person_name)); owner_name = person_name; } void do_the_act(int i) { string line_to_act; if(i >= sizeof(act_lines)) { dest_me(); return; } if(environment(owner) != environment()) { tell_room(environment(), "The origami demon rustles after " + owner_name + ".\n"); move(environment(owner)); tell_room(environment(), "The origami demon rustles in.\n" ); do_command("'Hey "+owner_name+"! I hadn't finished!\n"); return; } line_to_act = act_lines[i]; line_to_act = replace(line_to_act, ({"$N", owner_name, "$n", lower_case(owner_name) })); if(!strlen(line_to_act)) { set_heart_beat(0); dest_me(); return; } do_command(line_to_act); i++; if(owner) { call_out("do_the_act", 2, i); } return; } /*Let's keep this fellow unkillable, thankyouverymuch! Siel*/ void attack_by( object thing ){ if( !thing) return; if( environment( thing ) != environment() ) return; this_object()->stop_fight (thing); thing->stop_fight (this_object()); init_command("say Meanie! Shame on you! I shall finish what I " "started and then I shall be off. You don't really " "deserve this, you know.", 1); return; } /* attack_by() */