Crossfire Mailing List Archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

My savecode diffs




Only a couple of people asked me for these, But I thought I'd go ahead
and post them to the group anyway. They are diffed with version 0.86.


diff -c crossfire/config.h ./config.h
*** crossfire/config.h	Fri Sep  4 03:31:40 1992
- --- ./config.h	Fri Sep 18 18:22:40 1992
***************
*** 28,34 ****
   * There is still a calloc() call in player.c which is not affected by this
   * definition due to a bug which hasn't been found yet.
   */
! /* #define USE_CALLOC */
  
  /*
   * This define exchanges some functions with macros.  If defined, a lot less
- --- 28,34 ----
   * There is still a calloc() call in player.c which is not affected by this
   * definition due to a bug which hasn't been found yet.
   */
! #define USE_CALLOC
  
  /*
   * This define exchanges some functions with macros.  If defined, a lot less
***************
*** 62,68 ****
   * archetype file to be.
   */
  
! #define LIBDIR "/hom/frankj/src/crossfire/lib"
  
  /*
   * If you want the players to be able to save their characters between
- --- 62,68 ----
   * archetype file to be.
   */
  
! #define LIBDIR "/afs/acpub.duke.edu/users6/yr_95/mel1/games/cfire/lib"
  
  /*
   * If you want the players to be able to save their characters between
***************
*** 70,78 ****
   * where the player-files will be put.
   */
  
! /* #define SAVE_PLAYER */
! #define PLAYERDIR "/hom/frankj/src/crossfire/lib/players"
  
  /*
   *  It shouldn't be needed to change the following constants.
   */
- --- 70,82 ----
   * where the player-files will be put.
   */
  
! #define SAVE_PLAYER 
! #define PLAYERDIR "/afs/acpub.duke.edu/users6/yr_95/mel1/News/.comp.src"
  
+ /* SCOREDIR is the directory were you want the highscores kept */
+ 
+ #define SCOREDIR "/afs/acpub.duke.edu/users6/yr_95/mel1/News/.comp.src"
+ 
  /*
   *  It shouldn't be needed to change the following constants.
   */
***************
*** 80,86 ****
  #define STARTMAX        500     /* How big array of objects to start with */
  #define OBJ_EXPAND      100     /* How big steps to use when expanding array */
  
! #define HIGHSCORE_LENGTH 100
  
  #define TABLESIZE 947		/* Used in the shared strings library */
  
- --- 84,90 ----
  #define STARTMAX        500     /* How big array of objects to start with */
  #define OBJ_EXPAND      100     /* How big steps to use when expanding array */
  
! #define HIGHSCORE_LENGTH 25
  
  #define TABLESIZE 947		/* Used in the shared strings library */
  
diff -c crossfire/hiscore.c ./hiscore.c
*** crossfire/hiscore.c	Fri Sep  4 03:31:44 1992
- --- ./hiscore.c	Fri Sep 18 18:18:06 1992
***************
*** 90,96 ****
   
    new_score->position=HIGHSCORE_LENGTH+1;
    old_score.position= -1;
!   sprintf(filename,"%s/highscore",LIBDIR);
    if((fp=fopen(filename,"r"))!=NULL) {
      while(fgets(buf,MAX_BUF,fp)!=NULL&&nrofscores<HIGHSCORE_LENGTH) {
        if((tmp_score=get_score(buf))==NULL) break;
- --- 90,96 ----
   
    new_score->position=HIGHSCORE_LENGTH+1;
    old_score.position= -1;
!   sprintf(filename,"%s/highscore",SCOREDIR);
    if((fp=fopen(filename,"r"))!=NULL) {
      while(fgets(buf,MAX_BUF,fp)!=NULL&&nrofscores<HIGHSCORE_LENGTH) {
        if((tmp_score=get_score(buf))==NULL) break;
***************
*** 203,209 ****
    int i=0,j=0,maxchar=(op==NULL?80:INFOCHARS);
    score *sc;
  
!   sprintf(filename,"%s/highscore",LIBDIR);
    if((fp=fopen(filename,"r"))==NULL) {
      perror("Couldn't open highscore file");
      if(op!=NULL)
- --- 203,209 ----
    int i=0,j=0,maxchar=(op==NULL?80:INFOCHARS);
    score *sc;
  
!   sprintf(filename,"%s/highscore",SCOREDIR);
    if((fp=fopen(filename,"r"))==NULL) {
      perror("Couldn't open highscore file");
      if(op!=NULL)
diff -c crossfire/input.c ./input.c
*** crossfire/input.c	Fri Sep  4 03:31:45 1992
- --- ./input.c	Fri Sep 18 18:22:33 1992
***************
*** 592,626 ****
      return 1;
    }
  #ifdef SAVE_PLAYER
    if((op->contr->write_buf[0]=='?')&&(op->contr->password[0]=='~')) {
!     draw_info(op,op->contr->write_buf);
!     if(op->contr->writing<2) {
!       op->contr->write_buf[0]='>';
!       draw_info(op,"What is your name ");
        return 0;
- -     }
- -     if(op->name!=NULL)
- -       free_string(op->name);
- -     op->name=add_string(op->contr->write_buf+1);
- -     draw_stats(op);
- -     op->contr->write_buf[0]='\0';
- -     op->contr->writing=0;
- -     draw_info(op,"What is your password ");
- -     write_ch(op,'>');
- -     op->contr->password[0]='!';
- -     op->contr->no_echo=1;
- -     op->contr->name_changed=1;
- -     return 0;
    }
!   if((op->contr->write_buf[0]=='?')&&(op->contr->password[0]=='!')) {
      strncpy(op->contr->password,op->contr->write_buf+1,7);
      op->contr->password[8]='\0';
      op->contr->writing=0;
!     op->state=2;
!     op->contr->no_echo=0;
      check_login(op);
      return 0;
    }
  #endif
    if(op->contr->write_buf[0]=='"') {
      write_ch(op,'"');
- --- 592,646 ----
      return 1;
    }
  #ifdef SAVE_PLAYER
+ if(op->state==6) {
    if((op->contr->write_buf[0]=='?')&&(op->contr->password[0]=='~')) {
!       player *pl;
!       int used_name = 0; /* to keep from having multiple logins */
! 
!       if(op->name!=NULL)
!         free_string(op->name);
!       op->name=add_string(op->contr->write_buf+1);
!       op->contr->name_changed=1;
!       op->contr->last_value= -1;
!       op->contr->writing = 0;
!       for(pl=first_player;pl!=NULL;pl=pl->next)    /* check for multy login */
! 	if (strcmp(pl->ob->name,op->name) == 0)
! 		used_name++;
!       if(used_name > 1) {
! 	clear_win_info(op);
! 	draw_info(op,"*******   NOT SO FAST   *******");
! 	draw_info(op,"** That names already in use **");
! 	draw_info(op,"*******    TRY AGAIN    *******");
!         draw_info(op,"############# FIRST #############");
!         draw_info(op," ");
!         op->contr->writing=1;
!         op->contr->password[0]='~';
!         op->contr->write_buf[0]='?';
!         op->contr->write_buf[1]='\0';
!         draw_info(op,"By what name shalt thou be known");
! 	return 0;
!       }
!       draw_stats(op);
!       draw_info(op,"#######  NOW  #######");
!       draw_info(op," ");
!       op->contr->writing=1;
!       op->contr->write_buf[0]='?';
!       op->contr->write_buf[1]='\0';
!       draw_info(op,"What is your password ");
!       op->contr->name_changed=1; 
!       op->contr->password[0]='%';
        return 0;
    }
!   if((op->contr->write_buf[0]=='?')&&(op->contr->password[0]=='%')) { /* DMM */
      strncpy(op->contr->password,op->contr->write_buf+1,7);
      op->contr->password[8]='\0';
      op->contr->writing=0;
!     op->contr->write_buf[0] = '\0';
      check_login(op);
      return 0;
    }
+ return 0;
+ }
  #endif
    if(op->contr->write_buf[0]=='"') {
      write_ch(op,'"');
***************
*** 657,662 ****
- --- 677,685 ----
        draw_info(op,"  peaceful      - Toggles player attack.");
        draw_info(op,"  scroll        - Toggles scroll here.");
        draw_info(op,"  dm            - Enters cheat mode.");
+ #ifdef SAVE_PLAYER
+       draw_info(op,"  quit          - QUITS & SAVES character!");
+ #endif
        if(!IS_WIZ(op))
          return 0;
        draw_info(op,"Cheat mode commands:");
***************
*** 682,692 ****
        info_flush();
        strncpy(op->contr->killer,"quit",MAX_NAME);
  #ifdef SAVE_PLAYER
!       if(!save_player(op))
!         check_score(op);
! #else
!       check_score(op);
  #endif
        draw_info(op,"Do you want to play again (a/q)?");
        return 0;
      }
- --- 705,713 ----
        info_flush();
        strncpy(op->contr->killer,"quit",MAX_NAME);
  #ifdef SAVE_PLAYER
!       save_player(op);
  #endif
+       check_score(op);
        draw_info(op,"Do you want to play again (a/q)?");
        return 0;
      }
***************
*** 813,819 ****
         return 0;
      }
      if(op->contr->no_echo) {
!       if(!strcmp(op->contr->write_buf,">firecross")){
            SET_WIZ(op);
            draw_info(op, "Ok, you are the DUNGEON MASTER!");
            info_all("The Dungeon Master has arrived!",1);
- --- 834,840 ----
         return 0;
      }
      if(op->contr->no_echo) {
!       if(!strcmp(op->contr->write_buf,">naughty")){
            SET_WIZ(op);
            draw_info(op, "Ok, you are the DUNGEON MASTER!");
            info_all("The Dungeon Master has arrived!",1);
***************
*** 1278,1285 ****
        look_at(op,0,0);
        pl->last_cmd=2;
        break;
!     case 'Q': 
        draw_info(op,"Type 'quit to quit.");
        break;
      case '>':
        rotate_right(op);
- --- 1299,1310 ----
        look_at(op,0,0);
        pl->last_cmd=2;
        break;
!     case 'Q':
! #ifndef SAVE_PLAYER 
        draw_info(op,"Type 'quit to quit.");
+ #else
+       draw_info(op,"Type 'quit to quit & SAVE.");
+ #endif
        break;
      case '>':
        rotate_right(op);
diff -c crossfire/login.c ./login.c
*** crossfire/login.c	Fri Sep  4 03:31:46 1992
- --- ./login.c	Fri Sep 18 18:18:06 1992
***************
*** 28,41 ****
    FILE *fp;
    char filename[MAX_BUF];
    object *tmp;
  
    if(!op->contr->name_changed||!op->stats.exp||WAS_WIZ(op)) {
!     draw_info(op,"Your name is not valid,");
!     draw_info(op,"Game not saved.");
      return 0;
    }
    sprintf(filename,"%s/%s.pl",PLAYERDIR,op->name);
    fp=fopen(filename, "w");
    fprintf(fp,"%s\n",op->contr->password);
    save_object(fp,op);
    op->contr->freeze_inv=1;
- --- 28,51 ----
    FILE *fp;
    char filename[MAX_BUF];
    object *tmp;
+   int loop;
  
    if(!op->contr->name_changed||!op->stats.exp||WAS_WIZ(op)) {
!     draw_info(op,"** No experience, or no name! **");
!     draw_info(op,"** Game not saved. **");
      return 0;
    }
    sprintf(filename,"%s/%s.pl",PLAYERDIR,op->name);
    fp=fopen(filename, "w");
+   if(fp == NULL) {             /* DMM So disk errors won't seg. fault us */
+ 	draw_info(op,"*** Disk full or protected ***");
+ 	draw_info(op,"*** Unable to save character ***");
+ 	return 0;
+   }
+  
fprintf(fp,"%c%c%c",op->contr->digestion,op->contr->gen_hp,op->contr->ge
n_sp);/*DMM*/
+   for(loop = 0; loop < 11; loop++) 
+ 	fprintf(fp,"%c%c",op->contr->levhp[loop],op->contr->levsp[loop]);
+   fprintf(fp,"%c",op->contr->last_level); /* DMM */
    fprintf(fp,"%s\n",op->contr->password);
    save_object(fp,op);
    op->contr->freeze_inv=1;
***************
*** 48,53 ****
- --- 58,64 ----
    fclose(fp); 
    op->contr->freeze_inv=0;
    draw_all_inventory(op);
+   draw_info(op,"*******  THY CHARACTER HAS BEEN SAVED  *******");
    chmod(filename,0660);
    return 1;
  }
***************
*** 58,64 ****
    char filename[MAX_BUF];
    char buf[MAX_BUF];
    object *tmp;
!   int i,j,flag;
    mapstruct *m;
  
    sprintf(filename,"%s/%s.pl",PLAYERDIR,op->name);
- --- 69,75 ----
    char filename[MAX_BUF];
    char buf[MAX_BUF];
    object *tmp;
!   int i,j,flag,loop;
    mapstruct *m;
  
    sprintf(filename,"%s/%s.pl",PLAYERDIR,op->name);
***************
*** 71,93 ****
      op->state = 2;
    }
    else{
      fgets(buf,MAX_BUF,fp);
      buf[strlen(buf)-1]='\0';
      if (strcmp(buf,op->contr->password)){
        draw_info(op," ");
!       draw_info(op,"Wrong Password!");
!       draw_info(op," ");
!       draw_info(op,"What is your name ");
!       op->state = 0;
        if(op->name!=NULL)
          free_string(op->name);
        op->name=NULL;
- -       op->contr->writing=0;
- -       write_ch(op,'>');
- -       op->contr->password[0]='~';
      } else {
        op->contr->name_changed=1;
        load_object(fp,op);
        m=ready_map(1,0);
        i=find_free_spot(NULL,m,m->startx,m->starty,0,SIZEOFFREE);
        op->x=m->startx+freearr_x[i],op->y=m->starty+freearr_y[i];
- --- 82,110 ----
      op->state = 2;
    }
    else{
+    
fscanf(fp,"%c%c%c",&(op->contr->digestion),&(op->contr->gen_hp),&(op->co
ntr->gen_sp));
+     for(loop = 0; loop < 11; loop++) 
+ 	fscanf(fp,"%c%c",&(op->contr->levhp[loop]),&(op->contr->levsp[loop]));
+     fscanf(fp,"%c",&(op->contr->last_level)); /* DMM */
      fgets(buf,MAX_BUF,fp);
      buf[strlen(buf)-1]='\0';
      if (strcmp(buf,op->contr->password)){
+       clear_win_info(op);
+       draw_info(op,"#### Invalid Password! ####");
        draw_info(op," ");
!       op->state = 6;
!       op->contr->writing=1;
!       op->contr->password[0]='~';
!       op->contr->write_buf[0]='?';
!       op->contr->write_buf[1]='\0';
!       draw_info(op,"By what name shalt thou be known");
        if(op->name!=NULL)
          free_string(op->name);
        op->name=NULL;
      } else {
        op->contr->name_changed=1;
        load_object(fp,op);
+       op->state=0;
        m=ready_map(1,0);
        i=find_free_spot(NULL,m,m->startx,m->starty,0,SIZEOFFREE);
        op->x=m->startx+freearr_x[i],op->y=m->starty+freearr_y[i];
***************
*** 110,116 ****
        draw_all_inventory(op);
        draw_all_look(op);
        draw_all_message(op);
!       if (op->stats.hp<0||op->stats.food<0){
          clear_win_info(op);
          draw_info(op,"Your character was dead, when you quit.");
          draw_info(op," ");
- --- 127,133 ----
        draw_all_inventory(op);
        draw_all_look(op);
        draw_all_message(op);
!       if (op->stats.hp<0||op->stats.food<0){ /* DMM MAKE THIS OBSOLETE */
          clear_win_info(op);
          draw_info(op,"Your character was dead, when you quit.");
          draw_info(op," ");
***************
*** 127,133 ****
          draw_all_inventory(op);
          draw_all_look(op);
          draw_all_message(op);
!         draw_info(op,"Welcome Back!");
          op->carrying=0;
          op->contr->freeze_inv=1;
          tmp=get_object();
- --- 144,152 ----
          draw_all_inventory(op);
          draw_all_look(op);
          draw_all_message(op);
!         draw_info(op,"*** Welcome Back! ***");
!         draw_info(op," ");
! 	start_info(op);
          op->carrying=0;
          op->contr->freeze_inv=1;
          tmp=get_object();
diff -c crossfire/main.c ./main.c
*** crossfire/main.c	Fri Sep  4 03:31:47 1992
- --- ./main.c	Fri Sep 18 18:18:07 1992
***************
*** 1238,1243 ****
- --- 1238,1247 ----
  
  void do_some_living(object *op) {
    char buf[MAX_BUF];
+ #ifdef SAVE_PLAYER
+   int i;
+   mapstruct *m;
+ #endif
    object *tmp;
    int last_food=op->stats.food;
    int gen_hp=(op->contr->gen_hp+1)*op->stats.maxhp;
***************
*** 1254,1274 ****
    }
    if(!op->state&&--op->last_heal<0) {
      if(op->stats.hp<op->stats.maxhp)
!       op->stats.hp++,op->stats.food--;
      op->last_heal=1200/(gen_hp<20 ? 30 : gen_hp+10);
!     op->stats.food--;
      if(op->contr->digestion<0)
        op->stats.food+=op->contr->digestion;
      else if(op->contr->digestion>0&&RANDOM()%op->contr->digestion)
        op->stats.food=last_food;
    }
    if(op->contr->digestion<0)
      
    while(op->stats.food<0&&op->stats.hp>0)
      op->stats.food++,op->stats.hp--;
  
!   if (!op->state&&!IS_WIZ(op)&&(op->stats.hp<0||op->stats.food<0)) {
!     if(op->stats.food<0) {
        sprintf(buf,"%s starved to death.",op->name);
        strcpy(op->contr->killer,"starvation");
      }
- --- 1258,1284 ----
    }
    if(!op->state&&--op->last_heal<0) {
      if(op->stats.hp<op->stats.maxhp)
!       if(op->stats.food > 0) /*DMM */
!         op->stats.hp++,op->stats.food--;
      op->last_heal=1200/(gen_hp<20 ? 30 : gen_hp+10);
!     if(op->stats.food > 0)
!         op->stats.food--;
!     else
! 	op->stats.hp--;
      if(op->contr->digestion<0)
        op->stats.food+=op->contr->digestion;
      else if(op->contr->digestion>0&&RANDOM()%op->contr->digestion)
        op->stats.food=last_food;
    }
+ 	
+ 
    if(op->contr->digestion<0)
      
    while(op->stats.food<0&&op->stats.hp>0)
      op->stats.food++,op->stats.hp--;
  
!   if (!op->state&&!IS_WIZ(op)&&(op->stats.hp<0/*||op->stats.food<0 */)) {
!     if(op->stats.food==0) {
        sprintf(buf,"%s starved to death.",op->name);
        strcpy(op->contr->killer,"starvation");
      }
***************
*** 1283,1297 ****
- --- 1293,1349 ----
        op->contr->golem=NULL;
      }
      remove_ob(op);
+ 
+ #ifndef SAVE_PLAYER
      op->state=1;
      op->direction=0;
      check_score(op);
      draw_info(op,"Do you want to play again (a/q)?");
+ #endif
+ 
      tmp=arch_to_object(find_archetype("gravestone"));
      sprintf(buf,"%s's gravestone",op->name);
      tmp->name=add_string(buf);
      tmp->x=op->x,tmp->y=op->y;
      insert_ob_in_map(tmp,op->map);
+ 
+ #ifdef SAVE_PLAYER    /* if players dies they lose posessions permanently */
+     op->state = 6; /* so monsters won't attack */
+     m=ready_map(1,0);
+     i=find_free_spot(NULL,m,m->startx,m->starty,0,SIZEOFFREE);
+     op->x=m->startx+freearr_x[i],op->y=m->starty+freearr_y[i];
+     insert_ob_in_map(op,m);
+     tmp = op->inv;
+     while (tmp != NULL) {
+ 	if (IS_APPLIED(tmp)) 
+ 		apply_special(op,tmp);
+ 	op->inv=tmp->below;
+ 	remove_ob(tmp);
+ 	free_object(tmp);
+ 	tmp = op->inv;
+     }
+     fix_player(op); /* give them 1 hp and 500 food and put them back at start */
+     op->stats.hp = 1;
+     op->stats.food = 500;
+     draw_stats(op);
+     draw_all_info(op);
+     draw_all_inventory(op);
+     draw_all_look(op);
+     draw_all_message(op);
+     clear_win_info(op);
+     draw_info(op,"******* YOU ARE AMAZINGLY REINCARNATED *******");
+     draw_info(op,"*******  TOO BAD YOUR ITEMS WEREN'T :) *******");
+     if (roll_stat() > 10) {        /* DMM give % chance of losing a Con point */
+ 	op->stats.Con -= 1;
+     	draw_info(op,"******* YOU DON'T QUITE RECOVER FULLY  *******");
+     	draw_info(op,"*******      YOU FEEL LESS HEALTHY     *******");
+ 	draw_stats(op);
+     }
+     save_player(op);
+     op->state = 0; /* player back in game */
+     check_score(op);
+ #endif
+ 
    }
  }
  
***************
*** 1513,1518 ****
- --- 1565,1573 ----
        break;
      case KeyPress:
        op->contr->count_left=0;
+ #ifdef SAVE_PLAYER    /* DMM Keeps ctrl characters from printing '&' */
+       if(op->state != 6)
+ #endif
        if(!XLookupString(&op->contr->gevent.xkey,text,10,
           &op->contr->gkey,NULL)) {
          text[0]='&';
***************
*** 1530,1543 ****
            return;
          }
          else if(text[0]=='a'||text[0]=='A') {
            op->contr->ob=get_player(op->contr,op->map);
            tmp=op->contr->ob;
! #ifdef SAVE_PLAYER
!           tmp->state=0;
            tmp->contr->writing=1;
            tmp->contr->password[0]='~';
            tmp->contr->write_buf[0]='?';
!           draw_info(tmp,"What is your name ");
  #else
            tmp->state=2;
            draw_info(tmp,"Welcome back!");
- --- 1585,1602 ----
            return;
          }
          else if(text[0]=='a'||text[0]=='A') {
+ 
            op->contr->ob=get_player(op->contr,op->map);
            tmp=op->contr->ob;
! #ifdef SAVE_PLAYER /* DMM CHANGE TO RESURRECTION CODE */
!           tmp->state=6;
! 	  clear_win_info(tmp);
! 	  draw_info(tmp,"############# FIRST #############");
! 	  draw_info(tmp," ");
            tmp->contr->writing=1;
            tmp->contr->password[0]='~';
            tmp->contr->write_buf[0]='?';
!           draw_info(tmp,"By what name shalt thou be known");
  #else
            tmp->state=2;
            draw_info(tmp,"Welcome back!");
***************
*** 1638,1643 ****
- --- 1697,1711 ----
          op->contr->fire_on=0;
          op->contr->run_on=0;
          break;
+ #ifdef SAVE_PLAYER
+       case 6:       /* DMM the login case! This is needed badly */
+ 	if ((XLookupString(&op->contr->gevent.xkey,text,10,
+              &op->contr->gkey,NULL)) && op->contr->writing && text[0] !=' ') {
+ 		op->contr->last_cmd=0;
+ 		repeat = parse_writing(op,text[0]);
+ 	}
+ 	break;
+ #endif
        default:
          fprintf(stderr,"Illegal state: %d\n",op->state);
        }
diff -c crossfire/object.c ./object.c
*** crossfire/object.c	Fri Sep  4 03:31:47 1992
- --- ./object.c	Fri Sep 18 18:18:07 1992
***************
*** 635,642 ****
      where->carrying+=op->weight*op->nrof; /* I assume combined
objects have no inventory */
    } else
      where->carrying+=op->weight+op->carrying;
- -   if(where->type==PLAYER)
- -     fix_player(where);
    UNSET_REMOVED(op);
    op->map=where->map;
    op->env=where;
- --- 635,640 ----
***************
*** 649,656 ****
    else
      op->below=NULL;
    where->inv=op;
!   if(where->type==PLAYER)
      draw_inventory(where);
  }
  
  void check_walk_on(object *op) {
- --- 647,656 ----
    else
      op->below=NULL;
    where->inv=op;
!   if(where->type==PLAYER) {
!     fix_player(where);
      draw_inventory(where);
+   }
  }
  
  void check_walk_on(object *op) {
diff -c crossfire/player.c ./player.c
*** crossfire/player.c	Fri Sep  4 03:31:47 1992
- --- ./player.c	Fri Sep 18 18:18:08 1992
***************
*** 114,134 ****
        free_string(p->ob->name);
      p->ob->name=add_string(cp);
  #ifdef SAVE_PLAYER
!     p->write_buf[0]='\0';
!     p->writing=0;
      draw_info(p->ob,"What is your password ");
!     write_ch(p->ob,'>');
!     p->password[0]='!';
!     p->no_echo=1;
  #endif
      p->name_changed=1;
    } else {
  #ifdef SAVE_PLAYER
!     p->ob->state=0;
      p->ob->contr->writing=1;
      p->password[0]='~';
      p->write_buf[0]='?';
!     draw_info(p->ob,"What is your name ");
  #endif
      cp=strchr(buf,'.');
      if(cp!=NULL) *cp='\0';
- --- 114,139 ----
        free_string(p->ob->name);
      p->ob->name=add_string(cp);
  #ifdef SAVE_PLAYER
!     p->ob->state=6;
!     draw_info(p->ob,"#######  NOW  #######");
!     draw_info(p->ob," ");
!     p->writing=1;
!     p->write_buf[0]='?';
!     p->write_buf[1]='\0';
      draw_info(p->ob,"What is your password ");
!     p->password[0]='%';
  #endif
      p->name_changed=1;
    } else {
  #ifdef SAVE_PLAYER
!     p->ob->state=6;
!     draw_info(p->ob,"############# FIRST #############");
!     draw_info(p->ob," ");
      p->ob->contr->writing=1;
      p->password[0]='~';
      p->write_buf[0]='?';
!     p->write_buf[1]='\0';
!     draw_info(p->ob,"By what name shalt thou be known");
  #endif
      cp=strchr(buf,'.');
      if(cp!=NULL) *cp='\0';
diff -c crossfire/xio.c ./xio.c
*** crossfire/xio.c	Fri Sep  4 03:31:48 1992
- --- ./xio.c	Fri Sep 18 18:18:09 1992
***************
*** 174,179 ****
- --- 174,182 ----
    (void) sprintf(buf,"%s lost connection.",pl->name);
    if(pl->ob->state==0||pl->ob->state==3||pl->ob->state==5)
      remove_ob(pl->ob);
+ #ifdef SAVE_PLAYER
+   save_player(pl->ob); /* DMM */
+ #endif
    free_object(pl->ob);
    free_player(pl);
    if(first_player==NULL)

------- End of Forwarded Message