#include <std.h> inherit OBJECT; int dark_level, dark_time; object creator; void create() { ::create(); set_id( ({ "orb", "orb of darkness" })); set_name("orb"); set_adjectives( ({ "magic", "magical", "dark" }) ); set_short("an orb of darkness"); set_mass(0); set_value(0); dark_level = 0; dark_time = 0; } void init() { add_action("shatter", "shatter"); } set_creator(object ob) { creator = ob; } dark(int level, int time) { dark_level = level; dark_time = time; environment(this_object())->add_property("light", -level); call_out("brighten", time); } int shatter(string str) { if(!id(str)) { notify_fail("Shatter what?\n"); return 0; } if(this_player() != creator) { notify_fail("Only the creator of this orb can shatter it!\n"); return 0; } write("You shatter your orb.\n"); say(this_player()->query_cap_name()+" shatters " + this_player()->query_possessive() + " orb.\n", this_player()); tell_room(environment(this_player()), "The thousands of shards of darkness are quickly " + "absorbed by the light.\n"); environment(this_object())->add_property("light", dark_level); remove_call_out("brighten"); dark_level = 0; remove(); return 1; } brighten() { dark_level = dark_level - 1; environment(this_object())->add_property("light", 1); if(dark_level == 0) { if(!living(environment(this_object()))) /* must be a room or bag */ tell_object(environment(this_object()), "The orb fades out of existence.\n"); else /* in a person */ { tell_room(environment(environment(this_object())), "The orb that " + capitalize((string)environment(this_object())->query_name()) + " is carrying fades out of existence.\n", environment(this_object())); tell_object(environment(this_object()), "The orb that you are carrying fades out of existence.\n"); } remove(); } else { if(!living(environment(this_object()))) /* must be a room or bag */ tell_object(environment(this_object()), "The orb brightens slightly.\n"); else /* in a person */ { tell_room(environment(environment(this_object())), "The orb that " + capitalize((string)environment(this_object())->query_name()) + " is carrying brightens slightly.\n", environment(this_object())); tell_object(environment(this_object()), "The orb that you are carrying brightens slightly.\n"); } call_out("brighten", dark_time); } } int move(mixed dest) { int x; if(environment(this_object())) { environment(this_object())->add_property("light", dark_level); } x = ::move(dest); if(environment(this_object())) { environment(this_object())->add_property("light", -dark_level); } return x; } int remove() { if(dark_level) { if(environment(this_object())) environment(this_object())->add_property("light", -dark_level); } return ::remove(); }