/* -*- LPC -*- */ /* change log */ /* 26/6/93 Add in codes by LIFE so that the object can actually be * used to take photos instead of just a useless lump. * Godot's original setup() is mostly kept but all the rest * are my own code. */ #include <weather.h> inherit OBJECT_OBJ; int colour; int black_white; int scene; void setup() { colour = 2; black_white = 4; scene = 1; set_name( "box" ); add_adjective( ({ "heavy" , "black" }) ); set_short( "heavy black cube" ); set_main_plural( "heavy black cubes" ); set_long( "You see a heavy black box with a window on one side. " "Looking through the window, you notice a tiny demon sitting " "patiently next to a miniscule painter's easel.\n" ); set_weight( 10 ); add_alias( ({ "cube" , "camera" }) ); add_plurals(({ "cubes", "cameras"})); adjust_money( 1 , "gold" ); set_read_mess("To make the demon paint the picture, simply \"use" " camera on <subject>\".\n", "common", 1); } void init() { this_player()->add_command("use", this_object(), "%D %p %I"); this_player()->add_command("use", this_object(), "%D"); } int query_colour() { return colour; } int query_black_white() { return black_white; } int do_use(object *obs) { int i; string view; string photo_of; string chars_sorted; string things_sorted; object *players; object *chars; object *things; object photo; object env; object *yes; players = ({ }); chars = ({ }); things = ({ }); yes = ({ }); view = ""; photo_of = ""; chars_sorted = ""; things_sorted = ""; env = environment(this_player()) ; photo_of = "This is a beautiful "; if (env->query_light() < 60) { this_player()->add_failed_mess(this_object(), "The little imp whispers: Hey! " "Not everyone like you can see " "in the dark you know.\n",({ })); return 0; } if (env->query_light() >180) { this_player()->add_failed_mess(this_object(), "The little demon said quietly: " "Could I have a pair of sunspecs " "please! Not too much to ask, is it?\n", ({ })); return 0; } if (black_white <= 0) { call_out("out_of_paint", 0, env); this_player()->add_failed_mess(this_object(), "The little imp gives up painting " "for you.\n",({ })); return 0; } if (colour > 1) { photo_of += "colour "; colour --; } else if (colour == 1) { photo_of += "colour "; call_out("out_of_colour", 2, env); colour --; } else { photo_of += "black and white "; black_white --; } if (sizeof(obs)) { for (i=0;i<sizeof(obs);i++) { if (obs[i]->query_property("player")) { players += ({ obs[i] }); this_player()->add_succeeded(obs[i]); yes += ({ obs[i] }); } else if (obs[i]->query_property("npc")) { chars += ({ obs[i] }); this_player()->add_succeeded(obs[i]); yes += ({ obs[i] }); } else { if (environment(obs[i]) != this_player()) { things += ({ obs[i] }); this_player()->add_succeeded(obs[i]); yes += ({ obs[i] }); } } } chars_sorted = query_multiple_short(chars); things_sorted = query_multiple_short(things); if (chars_sorted || things_sorted || sizeof(players)) { scene = 0; } } view = env->query_long(); if(view[sizeof(view)-1] != 10) view += "\n"; if(env->query_property("location") == "outside" && !env->query_weather_obscured(WEATHER->query_day())) { view = WEATHER->weather_string(env) + ". " + view; } photo_of += "picture of " + env->a_short() + "."; if (scene == 0) { if ((sizeof(chars)+sizeof(players)) == 1) { if (sizeof(chars) == 1) { view += capitalize( (string)chars[0]->query_short() ) + " is here smiling.\n"; } else if (sizeof(players) == 1) { view += players[0]->one_short() +" is here smiling.\n"; } } else if ((sizeof(players)+sizeof(chars)) > 1) { for(i=0;i<sizeof(players);i++) { view += players[i]->one_short() ; if (i < (sizeof(players)-1)) { view += ", "; } } if (chars_sorted != "" && sizeof(players) > 0) { view += ", " + chars_sorted ; } else if (chars_sorted != "") { view += capitalize(chars_sorted) ; } view += " are smiling here.\n"; } if (sizeof(things) == 1) { view += "There is a "+ things_sorted +" in the photo.\n"; } else if ( sizeof( things ) ) { view += "There are " + things_sorted+" lying here in the photo.\n" ; } } photo = clone_object("/std/object"); photo->set_name("glass"); photo->add_adjective( ({"tiny", "square"}) ); photo->set_short("tiny square of glass"); photo->set_main_plural("tiny squares of glass"); photo->set_long("/global/player/events"->convert_message(view)); photo->set_read_mess(photo_of); photo->add_property("photographer", (string)this_player()->query_name()) ; photo->move(this_player()); if (scene == 0) { this_player()->add_succeeded_mess(this_object(), "$N $V $D on $I. After some frantic " "sounds of pens scratching and " "brushes brushing, a tiny " "demon inside hands a piece of painted " "glass to $N.\n", yes); } else { this_player()->add_succeeded_mess(this_object(), "$N $V $D on the scenery. After some " "frantic sounds of pens scratching " "and brushes brushing, a " "tiny demon inside hands a piece " "of painted glass to $N.\n"); } return 1; } mapping query_static_auto_load() { return ([ "colour" : colour, "black_white" : black_white ]); } void init_static_arg(mapping map) { colour = map["colour"]; black_white = map["black_white"]; } void out_of_paint(object room) { tell_object(this_player(), "The tiny demon whispers sarcastically: " "Without any more paints, I can still paint " "you invisible picture if you like!\n"); tell_room(room, "The tiny demon in the cube whispers something about " "paints to "+ this_player()->one_short() +".\n", this_player()); } void out_of_colour(object room) { tell_object(this_player(), "The tiny demon whispers: There are no more " "colour paints. This picture is the " "last colour one. I can only do you " "black and white pictures from now!\n"); tell_room(room, "The tiny demon in the cube whispers something about " "colour to "+ this_player()->one_short() +".\n", this_player()); }