/* -*- LPC -*- */
/*
* $Locker: ceres $
* $Id: woodland.c,v 1.8 2003/04/16 23:12:26 ceres Exp ceres $
*/
#define CREATOR "Ceres"
/**
* This is a standard woodland room. It is a specialisation of /std/outside
* providing various ready-made add_items for your woodland.
* <p>
* room_chats are also provided, if you don't wish to keep them simply use
* room_chat to write your own or stop_room_chats to remove them.
* <p>
* The items and chats are seasonal adding richness to your woodland setting.
* @author Ceres
*/
#include <weather.h>
#include <terrain_map.h>
inherit TERRAIN_MAP_OUTSIDE_BASE;
void create() {
do_setup++;
::create();
do_setup--;
set_light(80);
add_zone("woodland");
switch((string)WEATHER->query_season()) {
case "spring":
add_item("flower", ({"long", "Some pretty flowers.",
"get", ({this_object(), "do_get_flower"}),
"pick", ({this_object(), "do_get_flower"}),
"smell", "The flowers smell wonderful.\n"
}));
add_item("tree", "There are trees everywhere here, you have "+
"to pick your way between them. They are budding with "+
"new leaves at this time of year.");
add_item(({"floor", "ground", "earth"}), "The ground is covered "+
"by a beautiful carpet of flowers interspersed with small "+
"shrubs.");
add_item("shrub", "Dotted here and there among the carpet of flowers "+
"are small shrubs, some thorny, all green.");
room_chat(({120, 240, ({"Birds sing loudly announcing their presence.",
"Bees buzz busily from flower to flower.",
"A squirrel rushes up a nearby tree trunk.",
"A butterfly alights on a nearby flower.",
"A bird takes off from a tree with a furious "+
"beating of wings."})}));
add_property("flower type", "bluebell");
break;
case "summer":
add_item(({"floor", "ground", "earth"}), "You can barely see the "+
"ground because of the waist-high ferns. Dotted among the "+
"ferns are small shrubs.");
add_item("shrub", "Dotted here and there among the ferns "+
"are small shrubs, some thorny, all green.");
add_item("fern", "Everywhere you look there are ferns growing "+
"almost waist high between the trees.");
add_item("tree", "The trees are in their full foliage right now.");
room_chat(({120, 240, ({"The wind stirs the leaves of the trees making "+
"a sound like falling rain.",
"A squirrel rushes up a nearby tree trunk.",
"A butterfly alights on a nearby flower.",
"A bird takes off from a tree with a furious "+
"beating of wings."})}));
break;
case "autumn":
add_item(({"floor", "ground", "earth"}), "The ground is littered "+
"with dead leaves and the stems of dying ferns.");
add_item("tree", "You are surrounded by trees, they are resplendent "+
"with their autumn colours of red, gold and brown.");
add_item("shrub", "Dotted here and there among the ferns "+
"are small shrubs many with brightly coloured berries.");
add_item(({"berry", "berries"}),
({"long", "There are a variety of berries hanging from the "+
"shrubs here.",
"get", ({this_object(), "do_get_berry"}),
"pick", ({this_object(), "do_get_berry"})}));
add_item(({"leaf", "leaves"}),
({"long", "The ground is littered with dead leaves.",
"get", ({this_object(), "do_get_leaf"})}));
add_item("fern", "Here and there are the stems of ferns which have "+
"died back and will survive the coming winter underground.");
room_chat(({120, 240, ({"The wind stirs the leaves of the trees causing "+
"some to fall gently to earth.",
"A squirrel rushes up a nearby tree trunk.",
"A bird takes off from a tree with a furious "+
"beating of wings."})}));
add_extra_look(this_object());
break;
case "winter":
add_item(({"floor", "ground", "earth"}), "The ground is bare earth "+
"apart from the occasional hardy shrub.");
add_item("shrub", "Dotted here and there among the trees are small "+
"shrubs trying to survive the winter.");
add_item("tree", "There are bare trees everywhere here waiting for the "+
"coming of spring.");
room_chat(({120, 240, ({"The wind stirs the dry branches of the trees "+
"causing them to rustle eerily.",
"Somewhere a small animal forages in the "+
"undergrowth for winter food."})}));
break;
}
add_item("rock", ({ "long", "A nice rock looking thingy.",
"get", ({ this_object(), "do_get_rock" }) }) );
add_property("track type", "woodland");
if(!do_setup) {
this_object()->setup();
this_object()->reset();
}
}
string query_terrain_map_colour() { return "%^GREEN%^"; }
string extra_look() {
string extra;
extra = ::extra_look();
switch((string)WEATHER->query_season()) {
case "spring":
return extra + "Spring flowers are everywhere you look.\n";
case "autumn":
return extra + "The ground is littered with fallen leaves.\n";
break;
default:
return extra;
}
}
mixed do_get_rock( string verb, object *dest ) {
int rock_size;
string rock_type;
object rock;
if ( query_property( "rock object" ) )
return ( rock = clone_object( (string)query_property( "rock object" ) ) );
if ( undefinedp( rock_size = (int)query_property( "rock size" ) ) )
rock_size = 3;
if ( !rock_size ) return 0;
rock = clone_object( "/obj/mineral" );
if ( undefinedp( rock_type = (string)query_property( "rock type" ) ) )
rock_type = ({ "cinnabar", "coal", "rosy-quartz", "chalk", "flint",
"slate" })[ random( 6 ) ];
rock->make_mineral( rock_type, 1 + random( rock_size ) );
if ( !( rock->move( this_player() ) ) ) return 1;
rock->dest_me();
return 0;
}
mixed do_get_flower( string verb, object *dest ) {
string flower_type;
object flower;
if ( query_property( "flower object" ) )
return (flower = clone_object((string)query_property("flower object")));
if ((int)query_property("noflowers"))
return 0;
flower = clone_object("/std/plant");
if(undefinedp(flower_type = (string)query_property("flower type")))
flower_type = ({"forgetmenot", "violet"})[ random(2) ];
flower->set_plant(flower_type);
flower->set_plant_type(flower_type);
flower->set_plant_desc("A beautiful "+flower_type+" picked before its "+
"time.\n");
flower->set_main_plural(flower_type + "s");
if (!(flower->move(this_player()))) return 1;
flower->dest_me();
return 0;
}
mixed do_get_berry( string verb, object *dest ) {
object berry;
string berry_type;
if ((int)query_property("noflowers"))
return 0;
berry_type = ({"blackberry", "raspberry", "blueberry", "strawberry",
"blackcurrant"})[random(5)];
berry = clone_object( "/obj/food" );
berry->set_name(berry_type);
berry->set_short(berry_type);
berry->set_long("This is a lovely, plump "+berry_type+" it looks good "+
"enough to eat.\n");
berry->add_alias("berry");
if (!(berry->move(this_player()))) return 1;
berry->dest_me();
return 0;
}
mixed do_get_leaf( string verb, object *dest ) {
object leaf;
string leaf_type;
if ((int)query_property("noflowers"))
return 0;
leaf_type = ({"maple", "oak", "sycamore", "ash", "silver birch"})[random(5)];
leaf = clone_object("/std/object");
leaf->set_name("leaf");
leaf->set_short(leaf_type+" leaf");
leaf->set_long("This is a dead "+leaf_type+" leaf. Its natural green "+
"has turned to shades of gold, red and brown.\n");
leaf->add_adjective(leaf_type);
if (!(leaf->move(this_player()))) return 1;
leaf->dest_me();
return 0;
}