Hi, this is a small snippet to add hometowns to a Rom 2.4 mud...it's very simple to install. Edit merc.h. At the end of the file add these lines : struct hometown_type { char *name; int recall; int school; int morgue; int death; }; extern const struct hometown_type hometown_table []; int get_hometown args( ( char *argument ) ); Now, in char_data, add this line : /// sh_int start_pos; sh_int default_pos; sh_int hometown; /* <--- This one */ }; /// Find this block : #define CON_READ_IMOTD 13 #define CON_READ_MOTD 14 #define CON_BREAK_CONNECT 15 And at the end of that block add this line: #define CON_GET_HOMETOWN 16 Go to handler.c and at the end of the file add this function : int get_hometown( char * argument ) { int i = 0; while ( hometown_table[i].name != NULL ) { if (!str_cmp(argument,hometown_table[i].name)) return i; i++; } return -1; } Now... in tables.c , add this table to the end of the file : const struct hometown_type hometown_table [] = { /* { "name", recall, school, morgue, death }, */ { "Midgaard", 3001, 3700, 3036, 3054 }, { "New Thalos", 9506, 18600, 3036, 3054 }, { NULL, 3001, 3001, 3001, 3001 } }; (Of course you'll need to change the vnums). Edit comm.c . Find this block of code : write_to_buffer( d, "You may be good, neutral, or evil.\n\r",0); write_to_buffer( d, "Which alignment (G/N/E)? ",0); d->connected = CON_GET_ALIGNMENT; Change it to this : write_to_buffer( d, "Select a Hometown:\n\r", 0 ); for (i=0;hometown_table[i].name != NULL; ++i) { sprintf(buf,"[%-15s]\n\r", hometown_table[i].name ); write_to_buffer( d, buf, 0 ); } write_to_buffer( d, "\n\rWhat's your hometown? ", 0); d->connected = CON_GET_HOMETOWN; break; case CON_GET_HOMETOWN: if (get_hometown(argument) == -1) { write_to_buffer( d, "\n\rThat's not a valid selection.\n\r",0); write_to_buffer( d, "Valid selections are:\n\r",0); for (i=0;hometown_table[i].name != NULL; ++i) { sprintf(buf,"[%-15s]\n\r", hometown_table[i].name ); write_to_buffer( d, buf, 0 ); } write_to_buffer( d, "\n\rWhat's your hometown? ", 0); return; } ch->hometown = get_hometown(argument); write_to_buffer( d, "You may be good, neutral, or evil.\n\r",0); write_to_buffer( d, "Which alignment (G/N/E)? ",0); d->connected = CON_GET_ALIGNMENT; break; Find this line : char_to_room( ch, get_room_index( ROOM_VNUM_SCHOOL ) ); And change it to this : char_to_room( ch, get_room_index( hometown_table[ch->hometown].school ) ); Now goto save.c and in fwrite_char find this block : fprintf( fp, "Sex %d\n", ch->sex ); fprintf( fp, "Cla %d\n", ch->class ); At the end of that block add this line : fprintf(fp, "Hmtown %d\n", ch->hometown); In load_char_obj find this block : ch->pcdata->pwd = str_dup( "" ); ch->pcdata->bamfin = str_dup( "" ); ch->pcdata->bamfout = str_dup( "" ); At the end of that block add this line : ch->hometown = 0; Go to fread_char and find this block : KEY( "Hitroll", ch->hitroll, fread_number( fp ) ); KEY( "Hit", ch->hitroll, fread_number( fp ) ); Add this line (yes, at the end :) : KEY( "Hmtown", ch->hometown, fread_number( fp ) ); Now, the final changes ... edit handler.c again, and find this block : /* Death room is set in the clan tabe now */ if ( !fPull ) { char_to_room(ch,get_room_index(clan_table[ch->clan].hall)); return; } Change it to this : /* Death room is set in the clan tabe now */ if ( !fPull ) { if (ch->clan) char_to_room(ch, get_room_index(clan_table[ch->clan].hall)); else char_to_room(ch, get_room_index(hometown_table[ch->hometown].death)); return; } Edit act_move.c and find this line : if ( ( location = get_room_index( ROOM_VNUM_TEMPLE ) ) == NULL ) Change it to : if ( ( location = get_room_index( hometown_table[ch->hometown].recall ) ) == NULL ) Edit fight.c and at the top of make_corpse add this line : (if you don't have morgues, or you don't need them, skip the rest of the file) ROOM_INDEX_DATA *location; location = get_room_index ( hometown_table[ch->hometown].morgue ); At the end of make_corpse find this : obj_to_room( corpse,ch->in_room ); Change it to : if ( IS_NPC(ch) ) { obj_to_room( corpse,ch->in_room ); } else { obj_to_room( corpse,location ); } I think that's all. This worked for me. Hope it helps you. BTW, this will be posted in my homepage at geocities in a few hours, with the latest version of Rom 2.4 OLC and Envy2Rom. (http://www.geocities.com/SiliconValley/Pines/9618/) Ivan ----- NOTE: Below are fixes to this snippet. ----- From: cook@InfoAve.net Subject: Re: Ivan's HomeTown snippet Add this to your do_recall function... ************************************************* if (ch->pet != NULL) { char_from_room( ch->pet ); char_to_room( ch->pet, location ); do_look(ch->pet, "auto" ); } return; } From: eidsod01@condor.stcloudstate.edu Hmm... how about this? if (ch->pet != NULL) { char_from_room( ch->pet ); char_to_room( ch->pet, ch->in_room ); /* Causes the pet to go to * the right room no matter * what */ do_look(ch->pet, "auto" ); } return; } From: gsa44@cs.teiher.gr Guess what!!!!!! I found what the problem was! I edit the act_obj.c file and I add to the void do_buy the following line! pet->hometown = ch->hometown; and it works with out puting on act_move.c the following: if (ch->pet != NULL) { char_from_room(ch->pet); char_to_room( ch->pet, location ); do_look( ch, "auto" ); }