/********************************************************************** * Wilderness Set snipplet (C) 2004 by Zachery Crosswhite. * * Snipplet writen for SoulblightMUD. * * telnet://soulblight.slayn.net:5500 (5501) * * http://soulblight.slayn.net * * Email: cyhawk@comcast.net * * ICQ: 5335308 * * AIM: CalibanL * * * * Also check out 'The Void' a website devoted to area exchange * * and building. Located at http://void.slayn.net * * * * Orginal Idea by Drey of Underworld dreams. * * http://dreams.daestroke.com * * * * Credit also goes to mlkesl@stthomas.edu for creating * * the Ascii Automapper utility for which I based this code * * on, and to be used with. * * * * The command do_set_wilderness is a re-work of mlk's * * do_set_wild function in his Ascii Automapper utility. * * * * In order to use any part of this snipplet, you must * * Comply with the Orginal Diku/Merc and Rom lience agreements * * in 'licence.doc' and 'licence.txt'. You may NOT remove this * * copyright notice from this file. * * * * In order to use this code, you must also create a helpfile * * with the following information. (Just copy/paste it) * * * * -1 SET_WILD~ * * . * * Random Descriptions for wilderness area code, created by * * Thri of Soulblight Mud. (http://soulblight.slayn.net). * * ~ * * * * * * Several hours have gone into this code you are benfiting from. * * I encourage you to share your work with others as well. * * Remember, what comes around, goes around. * * * **********************************************************************/ /* * Known Bugs: * * The code doesn't complie cleanly ;) * the functions sector_by_number_ warn its sending a local varaible. * Honestly, this does not affect the way this code works. Im sure * Theres a better way to do this. * * MAX_STRING in db.c may need to be incressed due to the ammount * of data thats going to be sent to the wilderness. My wilderness * is 100x75 rooms, and i needed to double MAX_STRING to get the mud * to load. Your milage may vary depending on the size of the wilderness. * * Sectors that aren't defined here, will show up with no name, and * no description. Just define the Sectors ;) * * -Thri */ /* * Installation: * This part is easy. First put set_wild.c and set_wild.h * into your /src/ directory, add do_set_wilderness and do_set_wilderness_new * to your interp.h and interp.c files. (make sure level is ML, you honestly * don't want your low level builders mucking up your wilderness code, * do_set_wilderness_new can be set fairly low, due to the fact it just * sets the current room's name/description). * Next, edit do_set_wilderness command to change the vnums * to your wilderness's vnums. * Now, to make this work correctly.. goto your wilderness * (and backup your area directory..) and use the command do_set_wilderness * Now, asave changed before doing ANY other command. Then copyover. * Note: Do this with 0 players on. * Now, after the copyover, check around for any errors. */ /* * Expanding the code: * This part is also easy. Just add new fiels to the tables * below, and incresse the maxs in set_wild.h to fit the new descriptions. * Adding a new sector type is a bit more of a pain. First you need 4 new * tables and the defines for the tables (take a look how swamp was done) * You'll need at LEAST 3 names/moods/terrain/wind descriptions, otherwise * it becomes very repeative. Add them in to all the sector_by_number_ * functions (both the switch and the range at the top) then recomplie. * */ /* * How it works: * Basicly, the single room command, finds the sector_type of * the room your currently in, selects a Name, a Mood line, a Terrain line * and a wind line. It then sets the Name to the choosen name, and then * plays with the mood/wind/terrain lines so that they're randomized in * order, then spits out the final Name and description to the room. * After all that, it then sets the area to be saved and formats * the room description. Result: A random description for your wilderness. * */ /* * To-Do: * Support for more sectors. * Lots of descriptions! * Figure out how drey loaded the info from files. * Re-work do_set_wilderness to support ANY area. * (ch->in_room->area->lvnum? shrug im lazy ;) * Support to add objects/mobiles based on description. * (The room says theres a hawk flying around, where is it?) * (Oo some antlers.. fun ;) * Figure out how to make get_sector commands to not output errors. * (if anyone knows how, send em to me) */ #if defined(macintosh) #include <types.h> #include <time.h> #else #include <sys/types.h> #include <sys/time.h> #endif #include <stdio.h> #include <string.h> #include <stdlib.h> #include "merc.h" #include "interp.h" #include "recycle.h" #include "tables.h" #include "lookup.h" #include "magic.h" #include "olc.h" #include "set_wild.h" void do_set_wilderness (CHAR_DATA * ch, char *argument) { ROOM_INDEX_DATA *room; int start, end, current; start = 20001; end = 28000; room = get_room_index (start); /* initialize room for this check here */ if (!IS_BUILDER (ch, room->area)) { send_to_char ("do_set_wilderness: Insufficient Security", ch); return; } for (current = start; current <= end; current++) { room = get_room_index (current); char_to_room (ch, room); do_set_wilderness_new (ch, ""); char_from_room (ch); } char_to_room (ch, room); return; } /* * This command houses the full wilderness setting * sentax: set_wild inside the area you wish to set descriptions on */ void do_set_wilderness_new (CHAR_DATA * ch, char *argument) { char name[MSL]; // Holds the room name char mood[MSL]; // Holds the mood description line char wind[MSL]; // Holds the wind description line char terrain[MSL]; // Holds the terrain description line char desc[MSL]; // Holds the final description to be used ROOM_INDEX_DATA *room; int vnum; vnum = (ch->in_room->vnum); room = get_room_index (vnum); // Find a name and description lines sprintf(name, "%s", sector_by_number_name (ch->in_room->sector_type)); sprintf(wind, "%s", sector_by_number_wind (ch->in_room->sector_type)); sprintf(mood, "%s", sector_by_number_mood (ch->in_room->sector_type)); sprintf(terrain, "%s", sector_by_number_terrain(ch->in_room->sector_type)); // Randomize description. Theres a better way to do this, i know it.. switch(number_range(1, 6)) { default: case 1: sprintf(desc, "%s %s %s", wind, mood, terrain); break; case 2: sprintf(desc, "%s %s %s", wind, terrain, mood); break; case 3: sprintf(desc, "%s %s %s", mood, terrain, wind); break; case 4: sprintf(desc, "%s %s %s", mood, wind, terrain); break; case 5: sprintf(desc, "%s %s %s", terrain, mood, wind); break; case 6: sprintf(desc, "%s %s %s", terrain, wind, mood); break; } // Now that we have the Name, and final description, set the damn things free_string (room->name); room->name = str_dup (name); free_string (room->description); room->description = str_dup (desc); // Now lets format the description and set the area to be saved later format_string (room->description); SET_BIT (ch->in_room->area->area_flags, AREA_CHANGED); return; } /* * Gives a name based on the Room sector type */ char * sector_by_number_name (int sector) { char buf[MSL]; int forest_name = number_range(0, FOREST_NAME -1); int swamp_name = number_range(0, SWAMP_NAME -1); int plains_name = number_range(0, PLAINS_NAME -1); int mountians_name = number_range(0, MOUNTIANS_NAME -1); int desert_name = number_range(0, DESERT_NAME -1); int shallow_water_name = number_range(0, SHALLOW_NAME -1); int deep_water_name = number_range(0, DEEP_OCEAN_NAME -1); switch(sector) { default: sprintf(buf, "Error"); break; case SECT_FOREST: sprintf(buf, "%s", sector_forest_name_table[forest_name].name); break; case SECT_SWAMP: sprintf(buf, "%s", sector_swamp_name_table[swamp_name].name); break; case SECT_FIELD: sprintf(buf, "%s", sector_plains_name_table[plains_name].name); break; case SECT_MOUNTAIN: sprintf(buf, "%s", sector_mountians_name_table[mountians_name].name); break; case SECT_DESERT: sprintf(buf, "%s", sector_desert_name_table[desert_name].name); break; case SECT_WATER_SWIM: sprintf(buf, "%s", sector_shallow_water_name_table[shallow_water_name].name); break; case SECT_WATER_NOSWIM: sprintf(buf, "%s", sector_deep_water_name_table[deep_water_name].name); break; } return (buf); } /* * Gives a Wind description line based on sector_type */ char * sector_by_number_wind (int sector) { char buf[MSL]; int forest_wind = number_range(0, FOREST_WIND -1); int swamp_wind = number_range(0, SWAMP_WIND -1); int plains_wind = number_range(0, PLAINS_WIND -1); int mountians_wind = number_range(0, MOUNTIANS_WIND -1); int desert_wind = number_range(0, DESERT_WIND -1); int shallow_water_wind = number_range(0, SHALLOW_WIND -1); int deep_water_wind = number_range(0, DEEP_OCEAN_WIND -1); switch(sector) { default: break; case SECT_FOREST: sprintf(buf, "%s", sector_forest_wind_table[forest_wind].name); break; case SECT_SWAMP: sprintf(buf, "%s", sector_swamp_wind_table[swamp_wind].name); break; case SECT_FIELD: sprintf(buf, "%s", sector_plains_wind_table[plains_wind].name); break; case SECT_MOUNTAIN: sprintf(buf, "%s", sector_mountians_wind_table[mountians_wind].name); break; case SECT_DESERT: sprintf(buf, "%s", sector_desert_wind_table[desert_wind].name); break; case SECT_WATER_SWIM: sprintf(buf, "%s", sector_shallow_water_wind_table[shallow_water_wind].name); break; case SECT_WATER_NOSWIM: sprintf(buf, "%s", sector_deep_water_wind_table[deep_water_wind].name); break; } return (buf); } /* * Gives a Mood description line based on sector_type */ char * sector_by_number_mood (int sector) { char buf[MSL]; int forest_mood = number_range(0, FOREST_MOOD -1); int swamp_mood = number_range(0, SWAMP_MOOD -1); int plains_mood = number_range(0, PLAINS_MOOD -1); int mountians_mood = number_range(0, MOUNTIANS_MOOD -1); int desert_mood = number_range(0, DESERT_MOOD -1); int shallow_water_mood = number_range(0, SHALLOW_MOOD -1); int deep_water_mood = number_range(0, DEEP_OCEAN_MOOD -1); switch(sector) { default: break; case SECT_FOREST: sprintf(buf, "%s", sector_forest_mood_table[forest_mood].name); break; case SECT_SWAMP: sprintf(buf, "%s", sector_swamp_mood_table[swamp_mood].name); break; case SECT_FIELD: sprintf(buf, "%s", sector_plains_mood_table[plains_mood].name); break; case SECT_MOUNTAIN: sprintf(buf, "%s", sector_mountians_mood_table[mountians_mood].name); break; case SECT_DESERT: sprintf(buf, "%s", sector_desert_mood_table[desert_mood].name); break; case SECT_WATER_SWIM: sprintf(buf, "%s", sector_shallow_water_mood_table[shallow_water_mood].name); break; case SECT_WATER_NOSWIM: sprintf(buf, "%s", sector_deep_water_mood_table[deep_water_mood].name); break; } return (buf); } /* * Gives a Terrain description line based on sector_type */ char * sector_by_number_terrain (int sector) { char buf[MSL]; int forest_terrain = number_range(0, FOREST_TERRAIN -1); int swamp_terrain = number_range(0, SWAMP_TERRAIN -1); int plains_terrain = number_range(0, PLAINS_TERRAIN -1); int mountians_terrain = number_range(0, MOUNTIANS_TERRAIN -1); int desert_terrain = number_range(0, DESERT_TERRAIN -1); int shallow_water_terrain = number_range(0, SHALLOW_TERRAIN -1); int deep_water_terrain = number_range(0, DEEP_OCEAN_TERRAIN -1); switch(sector) { default: break; case SECT_FOREST: sprintf(buf, "%s", sector_forest_terrain_table[forest_terrain].name); break; case SECT_SWAMP: sprintf(buf, "%s", sector_swamp_terrain_table[swamp_terrain].name); break; case SECT_FIELD: sprintf(buf, "%s", sector_plains_terrain_table[plains_terrain].name); break; case SECT_MOUNTAIN: sprintf(buf, "%s", sector_mountians_terrain_table[mountians_terrain].name); break; case SECT_DESERT: sprintf(buf, "%s", sector_desert_terrain_table[desert_terrain].name); break; case SECT_WATER_SWIM: sprintf(buf, "%s", sector_shallow_water_terrain_table[shallow_water_terrain].name); break; case SECT_WATER_NOSWIM: sprintf(buf, "%s", sector_deep_water_terrain_table[deep_water_terrain].name); break; } return (buf); } /* The following three tables house Forest Name/Terrain/Wind/Mood descriptions */ const struct sector_forest_name_type sector_forest_name_table[] = { {"Pine Forest"}, {"Forest Clearing"}, {"Evergreen Grove"}, {"Old Game Trail"}, }; const struct sector_forest_terrain_type sector_forest_terrain_table[] = { {"The evergreens surround you on all sides, with only slight parts between some of them to allow a trail."}, {"You crunch through pine needles fallen from the trees that surround you and hide the horizon from view."}, {"The evergreens form an endless and monotonous landscape that seem to stretch out forever."}, {"The trees of this pristine wilderness rise around and above you on all sides in a variety of greens and styles of needles."}, }; const struct sector_forest_wind_type sector_forest_wind_table[] = { {"The wind carries the fragrant scent of the evergreens around you."}, {"The pine needles on the forest floor stir slightly from the wind."}, {"The wind here is a gentle breeze, which is due largely to the surround forest"}, {"A sudden rise in the wind dips down from above and picks up some of the needles in a small whirlwind on the ground."}, }; const struct sector_forest_mood_type sector_forest_mood_table[] = { {"Small little birds hop in and out of the trees here, gathering branches for their nests."}, {"Little forest birds are gathering juniper berries here for their young."}, {"The stillness is broken by the sound of the occassional pine cone falling to the floor."}, {"Distant crunching noises reveal to you that other parties, probably animals, are also moving through this forest."}, }; const struct sector_swamp_name_type sector_swamp_name_table[] = { {"Dank Swamp"}, {"Swampy Ground"}, {"Marshy Forest"}, {"Muddy Path"}, {"Inside the Bog"}, }; const struct sector_swamp_terrain_type sector_swamp_terrain_table[] = { {"Maneuvering here is slightly difficult, due to the mud and water you're forced to slog through."}, {"Each step you take is a difficult one, as the mud is reluctant to let go of your feet."}, {"Grey and dismal, the swamp surrounds you in a forgettable haze of reeds, cattails, and standing pools of water, all wrapped up in thick, gooey mud."}, {"The ground here is soft and oozing. You feel slimy water seeping into your boots."}, }; const struct sector_swamp_wind_type sector_swamp_wind_table[] = { {"The air here is barely moving and does nothing to relieve you."}, {"The occasional bit of wind sliughtly rustles the reeds and thrushes around you."}, {"Dark clouds whip around you and the wind raises its voice and assails you."}, {"A creaking beat fills the air, accompanied by groans and soughing of the air."}, {"Snarls can be heard echoing as if from a great distance."}, }; const struct sector_swamp_mood_type sector_swamp_mood_table[] = { {"Off to your right, a staggered but regular stream of bubbles appear on the surface of the water and then pop noisily, letting off an unpleasant smell in the process."}, {"You can't decided which is worse here; the stench of the swamp and the relentless attacks of the mosquitos and black flies."}, {"Occasionally you see a whole humanoid form floating face down in the water, but mostly you only find pieces."}, {"Several large winged beasts flap over you and send chilling glares your way. To the East you see a large mountian range."}, {"A creaking beat pulses through the air, leaving you with a cold sweat and fear in your heart."}, }; const struct sector_plains_name_type sector_plains_name_table[] = { {"On some plains."}, {"On the grassy wasteland."}, {"Deep within the grassy northland"}, }; const struct sector_plains_terrain_type sector_plains_terrain_table[] = { {"The grass here on the plains has grown up to your waist in height and impedes your progress somewhat."}, {"The grassland extends further than the eye can see. The grass is yellowed from lack of water."}, {"Small mana bushes grow here, sticking out of the sea of grass like a sore thumb."}, {"Patchs of dirt can be seen. The grass here is more brown than yellow here."}, }; const struct sector_plains_wind_type sector_plains_wind_table[] = { {"The winds sweep across the plain and move the long grass in endless waves."}, {"The winds whistle as it passes through the dying grass."}, {"The wind stops briefly, only to start agian, stronger than before."}, {"A few tree stumps are the only landmarks here."}, }; const struct sector_plains_mood_type sector_plains_mood_table[] = { {"Small grasshoppers are jumping in swarms through the grass."}, {"A small rodent pops its head out from a hole in the ground and quickly darts back in."}, {"To the far west you can see what appears to be greyish mountians."}, {"Some red flowers grow here."}, {"A log is on the ground here, providing shelter for the small creatues that live here."}, }; const struct sector_mountians_name_type sector_mountians_name_table[] = { {"On a rocky mountian range."}, {"A mountian range."}, {"Along a path in the mountians."}, {"Deep within grey mountians."}, {"A rocky path within the mountians"}, }; const struct sector_mountians_terrain_type sector_mountians_terrain_table[] = { {"A baren waste. Surrounded by giant boulders, the mountians are empty compared to the valleys below."}, {"You kick up some dust as your feet hit a small pile of gravel."}, {"A massive grey boulder sits here."}, {"A dried river once flowed through here."}, }; const struct sector_mountians_wind_type sector_mountians_wind_table[] = { {"The sun shines brightly here, causing waves of heat to rise from the boulders."}, {"A small gust of wind blows past you, but it is not enough to cool you from the scorching heat."}, {"A strong burst of wind rocks a large grey boulder side to side."}, }; const struct sector_mountians_mood_type sector_mountians_mood_table[] = { {"A Hawk soars high above."}, {"The mountians seem to go on forever in every direction."}, {"The pitter patter of little feet running across the scorching rock can be heard in the distance."}, {"The sound of falling rocks can be heard."}, }; const struct sector_desert_name_type sector_desert_name_table[] = { {"On a sand dune."}, {"Surrounded by sand dunes."}, {"Deep within the endless sand dunes"}, {"Inside a scorching hot desert."}, {"In the endless sand desert."}, {"Drifting Sands."}, }; const struct sector_desert_terrain_type sector_desert_terrain_table[] = { {"The sand here is very hot to the touch. The scorching sun makes you sweat."}, {"The sand dunes here are huge, some are even unclimbable. "}, {"Specks of white and black sand stand out aginst the sea of yellow sand that surrounds you."}, {"Small blackened rocks are scattered around this part of the desert."}, {"A few jagged rock outcropings can be seen in the distance."}, }; const struct sector_desert_wind_type sector_desert_wind_table[] = { {"A gust of wind picks up some sand and tosses it all around you."}, {"The scorching heat from the sun bares down on the desert."}, {"The still wind tortures you as you traverse the sand dunes."}, {"A cool breeze can be felt, but only for a moment."}, {"The winds that race across this sandy desert do little to cool you since the air itself is so hot."}, {"For a moment the sweat gathers on your brow, then the winds pick up again and leave you dry but not cooled."}, }; const struct sector_desert_mood_type sector_desert_mood_table[] = { {"A small red scorpian scurrys along the sand dunes, looking for a rock to hide under."}, {"The sun-bleached bones of some traveller less fortunate than yourself are buried here under the shifting sands."}, {"A few small stones, bleached white by the sun, peek out of the sand here."}, {"The shifting sands have uncovered a low stone wall, left over from some long forgotten home."}, {"A few pebbles, bleached white by the sun, peek out of the sand here."}, {"The leg of a an old stone statue, far too large or heavy to move, stands buried in the sands."}, {"A small rock, bleached white by the sun, peek out of the sand here."}, {"An old wooden wagon wheel juts out of the sand here."}, }; const struct sector_shallow_water_name_type sector_shallow_water_name_table[] = { {"In some shallow water."}, {"Shallow water."}, {"Light blue waters."}, }; const struct sector_shallow_water_terrain_type sector_shallow_water_terrain_table[] = { {"The water here is very shallow, only three to four feet deep."}, {"The beautiful light blue water shimmers aginst the setting sun."}, {"A few small waves brush up aginst you."}, }; const struct sector_shallow_water_wind_type sector_shallow_water_wind_table[] = { {"The cool ocean breeze feels good aginst your face."}, {"The breeze creates tiny little waves in the water here."}, {"A strong burst of wind is followed by a large wave, which almost overtakes you."}, }; const struct sector_shallow_water_mood_type sector_shallow_water_mood_table[] = { {"A small fish jumps out of the water just out of arms reach."}, {"Thousands of colourful fish can be seen swimming around the coral reef here."}, {"The water here is filled with ocean life."}, }; const struct sector_deep_water_name_type sector_deep_water_name_table[] = { {"On a sea"}, {"In the ocean"}, {"Surrounded by the blue ocean."}, }; const struct sector_deep_water_terrain_type sector_deep_water_terrain_table[] = { {"The waves here are much larger than those near the shore."}, {"The ocean stretches out for miles in every direction."}, {"As the sun sets, the deep blue ocean turns a dark orange."}, // Note: Yes i know the sun only turns orange because of // Polution, BUT.. Its cool anyhow. -Thri }; const struct sector_deep_water_wind_type sector_deep_water_wind_table[] = { {"The winds here are extremely strong, and create some very impressive waves."}, {"The wind here is but a weak summer breeze."}, {"The cool tropical winds here feel good aginst your skin."}, }; const struct sector_deep_water_mood_type sector_deep_water_mood_table[] = { {"In the distance, you can see a whale touching the surface."}, {"A few dolphins playfuly jump around here."}, {"Dark clouds can be seen in the distance."}, };