How to add a new continent to the Overland - Version 3.01
---------------------------------------------------------

Further typo and logic fixes provided by RazorZero 9/23/03
Modified by Kilroy of The Obsidian Palace 6/13/2003
Modified by Kilroy of The Obsidian Palace 5/9/2002
part 2.2 Contibuted to by Kilroy of OP & Dwip of Alsherok 5/9/2002

Keep in mind that adding an additional continent will increase your
RAM and disk usage. You should check to see that your site quotas
will allow you to do this before beginning.

1. Perhaps the most time consuming step - create a graphic image of
the new continent using colors for terrain that conform to the table
in RGB.txt. This will no doubt require ALOT of time, patience, and
effort. The file should be saved as a png graphic.

2. In overland.h 

2.1 In the Definitions at the Top add
#define OVERLAND_XXXXXXX VNUMS under the other #definitions
where XXXXXXX is the name of the Continent, and VNUMS is the 1st VNUM assigned
into your continent.are file

2.2 Then just below that, in this enum:

enum map_types
{
   MAP_ONE, MAP_MAX
};

Add MAP_something to the listing, before MAP_MAX.

"something" should be a code identifier that you will be able to remember.

3. In overland.cpp

3.1 In this list, add the filename you generated in step 1.

char *const map_filenames[] = {
   "one.png"
};

3.2: In these lists:

char *const map_names[] = {
   "One"
};

char *const map_name[] = {
   "one"
};

Add your new continent's name to them.

3.3: In void enter_map

Find:
void enter_map( char_data * ch, exit_data * pexit, int x, int y, int continent )
{
   room_index *maproom = NULL, *original;

   if( continent < 0 )  /* -1 means you came in from a regular area exit */
      maproom = find_continent( ch, ch->in_room );

   else  /* Means you are either an immortal using the goto command, or a mortal who teleported */
   {
      switch ( continent )
      {
         case ACON_ONE:
            maproom = get_room_index( OVERLAND_ONE );
            ch->map = MAP_ONE;
            break;
         default:
            bug( "%s: Invalid target map specified: %d", __FUNCTION__, continent );
            return;
      }
   }

And Change it to look like:

void enter_map( char_data * ch, exit_data * pexit, int x, int y, int continent )
{
   room_index *maproom = NULL, *original;

   if( continent < 0 )  /* -1 means you came in from a regular area exit */
      maproom = find_continent( ch, ch->in_room );

   else  /* Means you are either an immortal using the goto command, or a mortal who teleported */
   {
      switch ( continent )
      {
         case ACON_ONE:
            maproom = get_room_index( OVERLAND_ONE );
            ch->map = MAP_ONE;
            break;
         case ACON_XXXXX:
            maproom = get_room_index( OVERLAND_XXXXXX );
            ch->map = MAP_XXXXXX;
            break;
         default:
            bug( "%s: Invalid target map specified: %d", __FUNCTION__, continent );
            return;
      }
   }

Where XXXXXX is the name of your new Continent.

3.4: In find_continent
Find:
   if( maproom->area->continent == ACON_ONE )
   {
      location = get_room_index( OVERLAND_ONE );
      ch->map = MAP_ONE;
   }

And add below that:
   if( maproom->area->continent == ACON_XXX )
   {
      location = get_room_index( OVERLAND_XXX );
      ch->map = MAP_XXX;
   }

Where XXX is the designation for your new continent.

3.5: In do_mapedit
Find:
      if( !str_cmp( argument, "one" ) )
         map = MAP_ONE;

And add below that:
      if( !str_cmp( argument, "xxxxxxx" ) )
         map = MAP_XXXXXX;

Where xxxxxx = your continent name & XXXXXX = the MAP that you defined in overland.h

3.6 In void do_setexit

Find the Following:
      if( !str_cmp( arg2, "one" ) )
         map = ACON_ONE;

And add below that 
      if( !str_cmp( arg2, "xxxxxxx" ) )
         map = ACON_XXXXXX;

Where xxxxxx = your continent name & XXXXXX = the ACON that you will define in step 5.

4. In build.c:

4.1 Beneath this section:

      if( !str_cmp( arg1, "one" ) )
         map = ACON_ONE;

Add another check for your new continent's values.

5. In mudcfg.h, in this section:

/* New continent and plane support - Samson 3-28-98
 * Name of continent or plane is followed by the recall and death zone.
 * Area continent flags for continent and plane system, revised format - Samson 8-8-98
 */
enum acon_types
{
   ACON_ONE, ACON_ASTRAL, ACON_IMMORTAL, ACON_MAX
};

Add your new continent between ACON_IMMORTAL and ACON_MAX.

6. In build.cpp, in this section:

/* Area continent table for continent/plane system */
char *const continents[] = {
   "one", "astral", "immortal"
};

Add your new continent plane in the appropriate place in the list.

7. In mudcfg.cpp, check_room, find:

   if( dieroom->area->continent == ACON_ONE )
      location = get_room_index( ROOM_VNUM_ALTAR );

Add a new section to reflect your new continent, if you wish for it to send
dead players to a different location that the default ROOM_VNUM_ALTAR room.
You will also need to edit mudcfg.h to add new room targets to the well known
rooms section.

Similar changes should be made in the recall_room function, as well as adding to the
pc_data class to support additional locations for recalls.

8. Make clean, recompile. With any luck you should now have yourself
a nice shiny new continent :)
