Only in ../xpilot-a: .xpilotrc
diff -c -r ../xpilot-a/Local.config ./Local.config
*** ../xpilot-a/Local.config	Sun May 16 18:15:07 1999
--- ./Local.config	Fri Oct 30 14:35:18 1998
***************
*** 172,182 ****
   * or contains the word "beta" or "alpha".
   */
        VERSION_MAJOR = 4
!       VERSION_MINOR = U
!  VERSION_PATCHLEVEL = 4
      VERSION_WINDOWS = 13
!      VERSION_STATUS = alpha2
!         RELEASEDATE = May 23th, 1999
  
  
  /*
--- 172,182 ----
   * or contains the word "beta" or "alpha".
   */
        VERSION_MAJOR = 4
!       VERSION_MINOR = 1
!  VERSION_PATCHLEVEL = 0
      VERSION_WINDOWS = 13
!      VERSION_STATUS = 
!         RELEASEDATE = Oct 30th, 1998
  
  
  /*
Only in ../xpilot-a: Makefile
Only in ../xpilot-a: Makefile.bak
Only in ../xpilot-a/contrib: Makefile
Only in ../xpilot-a/contrib: Makefile.bak
Only in ../xpilot-a/contrib/msub: Makefile
Only in ../xpilot-a/contrib/msub: Makefile.bak
Only in ../xpilot-a/contrib/msub: msub
Only in ../xpilot-a/contrib/msub: msub.o
Only in ../xpilot-a/doc: Makefile
Only in ../xpilot-a/doc: Makefile.bak
Only in ../xpilot-a/doc/man: Makefile
Only in ../xpilot-a/doc/man: Makefile.bak
diff -c -r ../xpilot-a/doc/man/xp-replay.man ./doc/man/xp-replay.man
*** ../xpilot-a/doc/man/xp-replay.man	Sun May 16 18:52:23 1999
--- ./doc/man/xp-replay.man	Fri Oct 30 14:37:09 1998
***************
*** 4,10 ****
  .\"
  .TH XP-REPLAY  "Requires The X Window System"
  .ds )H GNU Public License 2.0 applies
! .ds ]W XPilot 4.U.4alpha2: May 16th, 1999
  .if n .ad l	\" If nroff formatter, adjust left margin only
  .if t .ad b	\" If troff formatter, adjust both margins
  
--- 4,10 ----
  .\"
  .TH XP-REPLAY  "Requires The X Window System"
  .ds )H GNU Public License 2.0 applies
! .ds ]W XPilot 4.1.0: Oct 30th, 1998
  .if n .ad l	\" If nroff formatter, adjust left margin only
  .if t .ad b	\" If troff formatter, adjust both margins
  
diff -c -r ../xpilot-a/doc/man/xpilot.man ./doc/man/xpilot.man
*** ../xpilot-a/doc/man/xpilot.man	Sun May 16 18:52:23 1999
--- ./doc/man/xpilot.man	Fri Oct 30 14:37:09 1998
***************
*** 4,10 ****
  .\"
  .TH XPILOT  "Requires UDP/IP and The X Window System"
  .ds )H GNU Public License 2.0 applies
! .ds ]W XPilot 4.U.4alpha2: May 16th, 1999
  .if n .ad l	\" If nroff formatter, adjust left margin only
  .if t .ad b	\" If troff formatter, adjust both margins
  
--- 4,10 ----
  .\"
  .TH XPILOT  "Requires UDP/IP and The X Window System"
  .ds )H GNU Public License 2.0 applies
! .ds ]W XPilot 4.1.0: Oct 30th, 1998
  .if n .ad l	\" If nroff formatter, adjust left margin only
  .if t .ad b	\" If troff formatter, adjust both margins
  
***************
*** 1402,1408 ****
  .TP
  \(bu Which Xresources you're using.
  .TP
! \(bu The full version of XPilot, i.e., 4.U.4alpha2
  .TP
  \(bu What the bug looks like (symptoms)
  .TP
--- 1402,1408 ----
  .TP
  \(bu Which Xresources you're using.
  .TP
! \(bu The full version of XPilot, i.e., 4.1.0
  .TP
  \(bu What the bug looks like (symptoms)
  .TP
***************
*** 1428,1437 ****
  .SH FILES
  .PD 0
  .TP 40
! .B /usr/X386/lib/X11/motd
  Message of the day.
  .TP
! .B /usr/X386/lib/X11/sounds
  File containing the sound to sound-file mapping.
  .PD
  
--- 1428,1437 ----
  .SH FILES
  .PD 0
  .TP 40
! .B /usr/X11R6/lib/X11/motd
  Message of the day.
  .TP
! .B /usr/X11R6/lib/X11/sounds
  File containing the sound to sound-file mapping.
  .PD
  
diff -c -r ../xpilot-a/doc/man/xpilots.man ./doc/man/xpilots.man
*** ../xpilot-a/doc/man/xpilots.man	Sun May 16 18:52:23 1999
--- ./doc/man/xpilots.man	Fri Oct 30 14:37:09 1998
***************
*** 4,10 ****
  .\"
  .TH XPILOTS  "Requires UDP/IP and The X Window System"
  .ds )H GNU Public License 2.0 applies
! .ds ]W XPilot 4.U.4alpha2: May 16th, 1999
  .if n .ad l	\" If nroff formatter, adjust left margin only
  .if t .ad b	\" If troff formatter, adjust both margins
  
--- 4,10 ----
  .\"
  .TH XPILOTS  "Requires UDP/IP and The X Window System"
  .ds )H GNU Public License 2.0 applies
! .ds ]W XPilot 4.1.0: Oct 30th, 1998
  .if n .ad l	\" If nroff formatter, adjust left margin only
  .if t .ad b	\" If troff formatter, adjust both margins
  
***************
*** 136,142 ****
  .B /*.map
  Miscellaneous maps.
  .TP 40
! .B /usr/X386/lib/X11/log
  Log file.
  .PD
  
--- 136,142 ----
  .B /*.map
  Miscellaneous maps.
  .TP 40
! .B /usr/X11R6/lib/X11/log
  Log file.
  .PD
  
Only in ../xpilot-a/lib: Makefile
Only in ../xpilot-a/lib: Makefile.bak
Only in ../xpilot-a/lib/maps: Makefile
Only in ../xpilot-a/lib/maps: Makefile.bak
Only in ../xpilot-a/lib/textures: Makefile
Only in ../xpilot-a/lib/textures: Makefile.bak
Only in ../xpilot-a/src: Makefile
Only in ../xpilot-a/src: Makefile.bak
Only in ../xpilot-a/src/client: Makefile
Only in ../xpilot-a/src/client: Makefile.bak
Only in ../xpilot-a/src/client: about.o
Only in ../xpilot-a/src/client: caudio.o
diff -c -r ../xpilot-a/src/client/client.c ./src/client/client.c
*** ../xpilot-a/src/client/client.c	Tue Mar 30 23:53:39 1999
--- ./src/client/client.c	Wed Sep 16 21:35:40 1998
***************
*** 56,63 ****
  
  #define MAX_CHECKPOINT	26
  
- char *fast_msgs[N_MSGS];
- 
  int			scoresChanged = 0;
  int			RadarHeight = 0;
  
--- 56,61 ----
***************
*** 1065,1071 ****
      other->war_id = -1;
      other->name_width = 0;
      strncpy(other->name, player_name, sizeof(other->name));
-     sprintf(other->id_string,"%d ",id);
      other->name[sizeof(other->name) - 1] = '\0';
      strncpy(other->real, real_name, sizeof(other->real));
      other->real[sizeof(other->real) - 1] = '\0';
--- 1063,1068 ----
Only in ../xpilot-a/src/client: client.c.orig
diff -c -r ../xpilot-a/src/client/client.h ./src/client/client.h
*** ../xpilot-a/src/client/client.h	Tue Mar 30 23:52:07 1999
--- ./src/client/client.h	Wed Sep 16 21:35:40 1998
***************
*** 108,114 ****
      char	name[MAX_CHARS];
      char	real[MAX_CHARS];
      char	host[MAX_CHARS];
-     char        id_string[5];
  } other_t;
  
  typedef struct {
--- 108,113 ----
***************
*** 252,259 ****
  extern char 	audioServer[MAX_CHARS];	/* audio server */
  extern int 	maxVolume;		/* maximum volume (in percent) */
  #endif /* SOUND */
- 
- extern int	snoopEyesId;		/* client's view of game */
  
  int Fuel_by_pos(int x, int y);
  int Target_alive(int x, int y, int *damage);
--- 251,256 ----
Only in ../xpilot-a/src/client: client.h.orig
Only in ../xpilot-a/src/client: client.o
diff -c -r ../xpilot-a/src/client/colors.c ./src/client/colors.c
*** ../xpilot-a/src/client/colors.c	Sat May 22 21:20:07 1999
--- ./src/client/colors.c	Fri Oct  2 21:39:21 1998
***************
*** 502,519 ****
       * planes at once.
       */
      for (p=0; p<2; p++) {
- 	int num=0;
- 
  	dpl_1[p] = dpl_2[p] = 0;
  
  	for (i=0; i<32; i++) {
  	    if (!((1<<i)&dbuf_state->masks[p])) {
! 	        num++;
! 		if (num==1 || num==3 ) {
! 		    dpl_1[p] |= 1<<i;   /* planes with moving radar objects */
  		}
  		else {
! 		    dpl_2[p] |= 1<<i;   /* constant map part of radar */
  		}
  	    }
  	}
--- 502,516 ----
       * planes at once.
       */
      for (p=0; p<2; p++) {
  	dpl_1[p] = dpl_2[p] = 0;
  
  	for (i=0; i<32; i++) {
  	    if (!((1<<i)&dbuf_state->masks[p])) {
! 		if (dpl_1[p]) {
! 		    dpl_2[p] |= 1<<i;
  		}
  		else {
! 		    dpl_1[p] |= 1<<i;
  		}
  	    }
  	}
Only in ../xpilot-a/src/client: colors.o
Only in ../xpilot-a/src/client: configure.o
Only in ../xpilot-a/src/client: dbuff.o
diff -c -r ../xpilot-a/src/client/default.c ./src/client/default.c
*** ../xpilot-a/src/client/default.c	Tue Mar 30 23:19:55 1999
--- ./src/client/default.c	Tue Oct  6 17:52:19 1998
***************
*** 71,80 ****
  
  char default_version[] = VERSION;
  
- extern char *fast_msgs[];
- char fast_temp_buf[7];   /* can handle up to 999 fast msgs */
- char *fast_temp_buf_big;
- 
  #ifndef	lint
  static char sourceid[] =
      "@(#)$Id: default.c,v 4.7 1998/10/06 14:52:19 bert Exp $";
--- 71,76 ----
***************
*** 1662,1947 ****
  	"Specifies the device name of the frame buffer.\n"
      },
  #endif    
!     {
! 	"keySendMsg1",
! 	NULL,
! 	"F1",
! 	KEY_MSG_1,
! 	"Sends the talkmessage stored in msg1.\n"
!     },
!     {
! 	"msg1",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 1.\n"
!     },
!     {
! 	"keySendMsg2",
! 	NULL,
! 	"F2",
! 	KEY_MSG_2,
! 	"Sends the talkmessage stored in msg2.\n"
!     },
!     {
! 	"msg2",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 2.\n"
!     },
!     {
! 	"keySendMsg3",
! 	NULL,
! 	"F3",
! 	KEY_MSG_3,
! 	"Sends the talkmessage stored in msg3.\n"
!     },
!     {
! 	"msg3",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 3.\n"
!     },
!     {
! 	"keySendMsg4",
! 	NULL,
! 	"F4",
! 	KEY_MSG_4,
! 	"Sends the talkmessage stored in msg4.\n"
!     },
!     {
! 	"msg4",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 4.\n"
!     },
!     {
! 	"keySendMsg5",
! 	NULL,
! 	"F5",
! 	KEY_MSG_5,
! 	"Sends the talkmessage stored in msg5.\n"
!     },
!     {
! 	"msg5",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 5.\n"
!     },
!     {
! 	"keySendMsg6",
! 	NULL,
! 	"F6",
! 	KEY_MSG_6,
! 	"Sends the talkmessage stored in msg6.\n"
!     },
!     {
! 	"msg6",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 6.\n"
!     },
!     {
! 	"keySendMsg7",
! 	NULL,
! 	"F7",
! 	KEY_MSG_7,
! 	"Sends the talkmessage stored in msg7.\n"
!     },
!     {
! 	"msg7",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 7.\n"
!     },
!     {
! 	"keySendMsg8",
! 	NULL,
! 	"F8",
! 	KEY_MSG_8,
! 	"Sends the talkmessage stored in msg8.\n"
!     },
!     {
! 	"msg8",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 8.\n"
!     },
!     {
! 	"keySendMsg9",
! 	NULL,
! 	"F9",
! 	KEY_MSG_9,
! 	"Sends the talkmessage stored in msg9.\n"
!     },
!     {
! 	"msg9",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 9.\n"
!     },
!     {
! 	"keySendMsg10",
! 	NULL,
! 	"F10",
! 	KEY_MSG_10,
! 	"Sends the talkmessage stored in msg10.\n"
!     },
!     {
! 	"msg10",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 10.\n"
!     },
!     {
! 	"keySendMsg11",
! 	NULL,
! 	"F11",
! 	KEY_MSG_11,
! 	"Sends the talkmessage stored in msg11.\n"
!     },
!     {
! 	"msg11",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 11.\n"
!     },
!     {
! 	"keySendMsg12",
! 	NULL,
! 	"F12",
! 	KEY_MSG_12,
! 	"Sends the talkmessage stored in msg12.\n"
!     },
!     {
! 	"msg12",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 12.\n"
!     },
!     {
! 	"keySendMsg13",
! 	NULL,
! 	"",
! 	KEY_MSG_13,
! 	"Sends the talkmessage stored in msg13.\n"
!     },
!     {
! 	"msg13",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 13.\n"
!     },
!     {
! 	"keySendMsg14",
! 	NULL,
! 	"",
! 	KEY_MSG_14,
! 	"Sends the talkmessage stored in msg14.\n"
!     },
!     {
! 	"msg14",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 14.\n"
!     },
!     {
! 	"keySendMsg15",
! 	NULL,
! 	"",
! 	KEY_MSG_15,
! 	"Sends the talkmessage stored in msg15.\n"
!     },
!     {
! 	"msg15",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 15.\n"
!     },
!     {
! 	"keySendMsg16",
! 	NULL,
! 	"",
! 	KEY_MSG_16,
! 	"Sends the talkmessage stored in msg16.\n"
!     },
!     {
! 	"msg16",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 16.\n"
!     },
!     {
! 	"keySendMsg17",
! 	NULL,
! 	"",
! 	KEY_MSG_17,
! 	"Sends the talkmessage stored in msg17.\n"
!     },
!     {
! 	"msg17",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 17.\n"
!     },
!     {
! 	"keySendMsg18",
! 	NULL,
! 	"",
! 	KEY_MSG_18,
! 	"Sends the talkmessage stored in msg18.\n"
!     },
!     {
! 	"msg18",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 18.\n"
!     },
!     {
! 	"keySendMsg19",
! 	NULL,
! 	"",
! 	KEY_MSG_19,
! 	"Sends the talkmessage stored in msg19.\n"
!     },
!     {
! 	"msg19",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 19.\n"
!     },
!     {
! 	"keySendMsg20",
! 	NULL,
! 	"",
! 	KEY_MSG_20,
! 	"Sends the talkmessage stored in msg20.\n"
!     },
!     {
! 	"msg20",
! 	NULL,
! 	"",
! 	KEY_DUMMY,
! 	"Talkmessage 20.\n"
!     },
  };
  
  
--- 1658,1664 ----
  	"Specifies the device name of the frame buffer.\n"
      },
  #endif    
! 
  };
  
  
***************
*** 2553,2572 ****
  
  
  #endif	/* _WINDOWS */
- 
-     if ((fast_temp_buf_big = (char *)malloc(FAST_MSG_SIZE)) != NULL)
-     {
-         for (i = 0; i < N_MSGS; ++i)
-         {
-             sprintf (fast_temp_buf, "msg%d", i + 1);
-             Get_resource(rDB, fast_temp_buf, fast_temp_buf_big, FAST_MSG_SIZE);
-             fast_msgs[i] = strdup (fast_temp_buf_big);
-         }
-         free (fast_temp_buf_big);
-     }
-     else
-       for (i = 0; i < N_MSGS; ++i)
-         fast_msgs[i] = NULL;
  
      Get_bool_resource(rDB, "ignoreWindowManager", &ignoreWindowManager);
  
--- 2270,2275 ----
Only in ../xpilot-a/src/client: default.c.orig
Only in ../xpilot-a/src/client: default.o
Only in ../xpilot-a/src/client: join.o
diff -c -r ../xpilot-a/src/client/netclient.c ./src/client/netclient.c
*** ../xpilot-a/src/client/netclient.c	Sun May 16 18:17:23 1999
--- ./src/client/netclient.c	Sun Aug 30 19:36:50 1998
***************
*** 1486,1493 ****
      if (debris_colors > num_spark_colors) {
  	debris_colors = num_spark_colors;
      }
!     if (view_width != (int)(draw_width*scaleFactor) ||
! 	view_height != (int)(draw_height*scaleFactor)) {
  	Send_display();
      }
      Game_over_action(stat);
--- 1486,1492 ----
      if (debris_colors > num_spark_colors) {
  	debris_colors = num_spark_colors;
      }
!     if (view_width != draw_width || view_height != draw_height) {
  	Send_display();
      }
      Game_over_action(stat);
***************
*** 2409,2744 ****
      return 0;
  }
  
- #define TEAM_PLAY               (1<<8)  /* defined in rules.h */
- #define LIMITED_LIVES           (1<<3)  /* defined in rules.h */
- #define MSG_PARSED_FIELD_LEN      20
- 
- /* Returns a pointer to the first character after the fields */
- char *Fields_info (char *buf, int *n_fields)
- {
-     int  end_found = 0, level = 0;
-     
-     *n_fields = 0;
-     while (!end_found)
-     {
- 	switch (*buf)
- 	{
- 	case START_DELIMITER:
- 	    if (level++ == 0)
- 		(*n_fields)++;
- 	    break;
- 	case MIDDLE_DELIMITER:
- 	    if (level == 1)
- 		(*n_fields)++;
- 	    break;
- 	case END_DELIMITER:
- 	    level--;
- 	    if (level == 0)
- 		end_found = 1;
- 	    else if (level < 0)
- 		return NULL;
- 	    break;
- 	case '\0':
- 	    return NULL;
- 	    break;
- 	default:
- 	    break;
- 	}
- 	buf++;
-     }
-     return buf;
- }
- 
- /* Returns a string pointer to the wanted_field 
-  * This pointer must be freed after using it
-  */
- char *Field_get (char *buf, int wanted_field)
- {
-     int  finished = 0, level = 0, field = 0, len;
-     char *field_ptr, *start_ptr = NULL, *end_ptr = NULL;
-     
-     while (!finished)
-     {
- 	switch (*buf)
- 	{
- 	case START_DELIMITER:
- 	    if (level == 0)
- 	    {
- 		field++;
- 		if (field == wanted_field)
- 		    start_ptr = buf + 1;
- 	    }
- 	    level++;
- 	    break;
- 	case MIDDLE_DELIMITER:
- 	    if (level == 1)
- 	    {
- 		field++;
- 		if (field == wanted_field)
- 		    start_ptr = buf + 1;
- 		else if (field == wanted_field + 1)
- 		{
- 		    end_ptr = buf;
- 		    finished = 1;
- 		}
- 	    }
- 	    break;
- 	case END_DELIMITER:
- 	    level--;
- 	    if (level == 0)
- 	    {
- 		if (field == wanted_field)
- 		    end_ptr = buf;
- 		finished = 1;
- 	    }
- 	    else if (level < 0)
- 		return NULL;
- 	    break;
- 	case '\0':
- 	    return NULL;
- 	    break;
- 	default:
- 	    break;
- 	}
- 	buf++;
- 	
-     }
-     len = end_ptr - start_ptr;
-     field_ptr = (char *) malloc (len + 1);
-     strncpy (field_ptr, start_ptr, len);
-     field_ptr[len] = '\0';
-     return field_ptr;
- }
- 
- int Net_talk_parsed(char *str)
- {
-     /* Comment: sizeof talk_str === MAX_CHARS */
-     if (str == NULL)
- 	return 1;
-     
-     if (Parse (talk_str, str, 0L, MAX_CHARS) > 0)
-     {
- 	talk_pending = ++talk_sequence_num;
- 	talk_last_send = last_loops - TALK_RETRY;
-     }
-     return 0;
- }
- 
- int Parse(char *outbuf, char *inbuf, long pos, long max)
- {
-     FILE *fp;
-     char c;
-     long fsize;
-     int i, n_fields;
-     char *tmpptr, *tmpptr1, *tmpptr2, *tmpptr3, *nextpos, *filename;
-     other_t *player=NULL;
- 
-     
-     while ((c = *inbuf++) != '\0')
-     {
- 	if (pos >= max - 2)
- 	{
- 	    if (outbuf == talk_str) /* parsing to the talk buffer */
- 	    {
- 		outbuf[pos] = '\0';
- 		talk_pending = ++talk_sequence_num;
- 		if (Packet_printf(&wbuf, "%c%ld%s", PKT_TALK,
- 				  talk_pending, outbuf) == -1)
- 		    return -1;
- 		pos = 0;
- 	    }
- 	    else
- 		goto done;
- 	}
- 	if (player != NULL)
- 	{
- 	    switch (c)
- 	    {
- 	    case 'l':
- 		if (BIT(Setup->mode, LIMITED_LIVES))
- 		    outbuf[pos++] = player->life + '0';
- 		break;
- 	    case 'n':
- 		tmpptr = player->name;
- 		for (i = 0; tmpptr[i] != '\0' && pos < max - 2; ++i)
- 		    outbuf[pos++] = tmpptr[i];
- 		break;
- 	    case 's':
- 		if (pos < max - 1 - 6) /* short - "-16535" max no of chars */
- 		    pos += sprintf (outbuf+pos, "%d", player->score);
- 		break;
- 	    case 't':
- 		if (BIT(Setup->mode, TEAM_PLAY))
- 		    outbuf[pos++] = player->team + '0';
- 		break;
- 	    default:
- 		break;
- 	    }
- 	    player = NULL;
- 	}
- 	else
- 	{
- 	    switch (c)
- 	    {
- 	    case SPECIAL_TALK_CHAR:
- 		if ((c = *inbuf++) == '\0')
- 		    goto done;
- 		switch (c) {
- 		case '=':  /* String comparison */
- 		    nextpos = Fields_info (inbuf, &n_fields);
- 		    if (n_fields < 3 || n_fields > 4 || nextpos == NULL)
- 			break;
- 		    /* parse field 1 */
- 		    if ((tmpptr = Field_get (inbuf, 1)) == NULL)
- 		    {
- 			printf ("Field_get (1) error!...\n");
- 			break;
- 		    }
- 		    tmpptr1 = (char *)malloc (MSG_PARSED_FIELD_LEN);
- 		    Parse (tmpptr1, tmpptr, 0, MSG_PARSED_FIELD_LEN);
- 		    free (tmpptr);
- 		    /* parse field 2 */
- 		    if ((tmpptr = Field_get (inbuf, 2)) == NULL)
- 		    {
- 			printf ("Field_get (2) error!...\n");
- 			break;
- 		    }
- 		    tmpptr2 = (char *)malloc (MSG_PARSED_FIELD_LEN);
- 		    Parse (tmpptr2, tmpptr, 0, MSG_PARSED_FIELD_LEN);
- 		    free (tmpptr);
- 		    if (!strcmp(tmpptr1, tmpptr2))
- 		    {
- 			/* True */
-                         if ((tmpptr3 = Field_get (inbuf, 3)) == NULL)
- 			{
- 			    printf ("Field_get (3) error!...\n");
- 			    free (tmpptr1);
- 			    free (tmpptr2);
- 			    break;
- 			}
- 			pos = Parse (outbuf, tmpptr3, pos, max);
- 		    }
- 		    else if (n_fields == 4)
- 		    {
- 			/* False */
- 			if ((tmpptr3 = Field_get (inbuf, 4)) == NULL)
- 			{
- 			    printf ("Field_get (4) error!...\n");
- 			    free (tmpptr1);
- 			    free (tmpptr2);
- 			    break;
- 			}
- 			pos = Parse (outbuf, tmpptr3, pos, max);
- 		    }
- 		    inbuf = nextpos;
- 		    free (tmpptr);
- 		    free (tmpptr1);
- 		    free (tmpptr2);
- 		    free (tmpptr3);
- 		    break;
- 		case 'f':
- 		    nextpos = Fields_info (inbuf, &n_fields);
- 		    if (n_fields != 1 || nextpos == NULL)
- 			break;
- 		    if ((tmpptr = Field_get (inbuf, 1)) == NULL)
- 		    {
- 			printf ("Field_get error!...\n");
- 			break;
- 		    }
- 		    inbuf = nextpos;
- 		    filename = (char *)malloc (MSG_FNLEN);
- 		    Parse (filename, tmpptr, 0, MSG_FNLEN);
- 		    free (tmpptr);
- 		    if ((fp = fopen (filename, "r")) == NULL)
- 		    {
- 			printf ("Couldn't open file %s\n", tmpptr);
- 			free (filename);
- 			break;
- 		    }
- 		    free (filename);
- 		    
- 		    /* Get filesize */
- 		    fseek (fp, 0L, SEEK_END);
- 		    fsize = ftell (fp);
- 		    rewind (fp);
- 		    
- 		    if ((tmpptr = (char *)malloc(fsize+1)) == NULL)
- 		    {
- 			fclose (fp);
- 			break;
- 		    }
- 		    fread (tmpptr, 1, fsize, fp);
- 		    tmpptr[fsize] = '\0';
- 		    fclose (fp);
- 		    pos = Parse (outbuf, tmpptr, pos, max);
- 		    free (tmpptr);
- 		    break;
- 		case 'h':
- 		    tmpptr = getenv ("HOME");
- 		    while (*tmpptr != '\0' && pos < max - 2)
- 		      outbuf[pos++] = *tmpptr++;
- 		    break;
- 		case 'r':
- 		    nextpos = Fields_info (inbuf, &n_fields);
- 		    if (n_fields <= 0 || nextpos == NULL)
- 		      break;
- 		    if ((tmpptr = Field_get (inbuf, rand() % n_fields + 1))
- 			== NULL)
- 		    {
- 			printf ("Field_get error (random) \n");
- 			break;
- 		    }
- 		    inbuf = nextpos;
- 		    pos = Parse (outbuf, tmpptr, pos, max);
- 		    free (tmpptr); 
- 		    break;
- 		case 'n':
- 		    outbuf[pos] = '\0';
- 		    talk_pending = ++talk_sequence_num;
- 		    if (Packet_printf(&wbuf, "%c%ld%s", PKT_TALK,
- 				      talk_pending, outbuf) == -1)
- 		      return -1;
- 		    pos = 0;
- 		    break;
- 		case 'l':
-                     if ( Other_by_id(snoopEyesId) == self 
- 			    || Other_by_id(snoopEyesId) == NULL ){
-                         if ((player = Other_by_id(lock_id)) == NULL) {
-                           pos = 0;
-                           goto done;
-                         }
-                     } else {
-                         if ((player = Other_by_id(snoopEyesId)) == NULL) {
-                           pos = 0;
-                           goto done;
-                         }
- 		    }
-                     break;
- 		case 's':
- 		    player = self;
- 		    break;
- 		case 't':
- 		    if (BIT(Setup->mode, TEAM_PLAY))
- 		      outbuf[pos++] = self->team + '0';
- 		    break;
- 			case SPECIAL_TALK_CHAR:
- 		    outbuf[pos++] = c;
- 		    break;
- 			default:
- 		    break;
- 		}
- 	    case '\n':
- 		break;
- 	    default:
- 		outbuf[pos++] = c;
- 		break;
- 	    }
- 	}
-     }
- done:
-     outbuf[pos] = '\0';
-     return pos;
- }
  
  int Send_talk(void)
  {
--- 2408,2413 ----
***************
*** 2764,2769 ****
--- 2433,2440 ----
  		      draw_width, draw_height, num_spark_colors, spark_rand) == -1) {
  #else
  		      (int)(draw_width*scaleFactor), (int)(draw_height*scaleFactor), num_spark_colors, spark_rand) == -1) {
+ 	draw_width  = (int)(draw_width*scaleFactor);
+ 	draw_height = (int)(draw_height*scaleFactor);
  #endif
  	return -1;
      }
Only in ../xpilot-a/src/client: netclient.c.orig
diff -c -r ../xpilot-a/src/client/netclient.h ./src/client/netclient.h
*** ../xpilot-a/src/client/netclient.h	Tue Mar 30 23:19:55 1999
--- ./src/client/netclient.h	Thu Apr 16 20:39:29 1998
***************
*** 113,119 ****
  int Send_audio_request(int onoff);
  int Send_fps_request(int fps);
  int Receive_loseitem(void);
- int Net_talk_parsed(char *str);
- int Parse(char *outbuf, char *inbuf, long pos, long max);
  
  #endif
--- 113,117 ----
Only in ../xpilot-a/src/client: netclient.h.orig
Only in ../xpilot-a/src/client: netclient.o
Only in ../xpilot-a/src/client: paint.o
Only in ../xpilot-a/src/client: paintdata.o
diff -c -r ../xpilot-a/src/client/painthud.c ./src/client/painthud.c
*** ../xpilot-a/src/client/painthud.c	Wed Mar 31 00:05:14 1999
--- ./src/client/painthud.c	Wed Sep 16 21:35:41 1998
***************
*** 59,66 ****
  
  #define FIND_NAME_WIDTH(other)						\
      if ((other)->name_width == 0) {					\
! 	(other)->name_len = strlen((other)->id_string);			\
! 	(other)->name_width = 2 + XTextWidth(gameFont, (other)->id_string,\
  					 (other)->name_len);		\
      }
  
--- 59,66 ----
  
  #define FIND_NAME_WIDTH(other)						\
      if ((other)->name_width == 0) {					\
! 	(other)->name_len = strlen((other)->name);			\
! 	(other)->name_width = 2 + XTextWidth(gameFont, (other)->name,	\
  					 (other)->name_len);		\
      }
  
***************
*** 255,261 ****
  		WINSCALE(hud_pos_x) - target->name_width / 2,
  		WINSCALE(hud_pos_y - HUD_SIZE+HUD_OFFSET - BORDER )
  			- gameFont->descent ,
! 		target->id_string, target->name_len);
      Erase_rectangle(WINSCALE(hud_pos_x) - target->name_width / 2 - 1,
  		    WINSCALE(hud_pos_y - HUD_SIZE+HUD_OFFSET - BORDER )
  			- gameFont->descent - gameFont->ascent ,
--- 255,261 ----
  		WINSCALE(hud_pos_x) - target->name_width / 2,
  		WINSCALE(hud_pos_y - HUD_SIZE+HUD_OFFSET - BORDER )
  			- gameFont->descent ,
! 		target->name, target->name_len);
      Erase_rectangle(WINSCALE(hud_pos_x) - target->name_width / 2 - 1,
  		    WINSCALE(hud_pos_y - HUD_SIZE+HUD_OFFSET - BORDER )
  			- gameFont->descent - gameFont->ascent ,
Only in ../xpilot-a/src/client: painthud.o
diff -c -r ../xpilot-a/src/client/paintmap.c ./src/client/paintmap.c
*** ../xpilot-a/src/client/paintmap.c	Wed Mar 31 00:11:56 1999
--- ./src/client/paintmap.c	Sun Aug 30 18:18:55 1998
***************
*** 57,64 ****
  
  #define FIND_NAME_WIDTH(other)						\
      if ((other)->name_width == 0) {					\
! 	(other)->name_len = strlen((other)->id_string);			\
! 	(other)->name_width = 2 + XTextWidth(gameFont, (other)->id_string,\
  					 (other)->name_len);		\
      }
  
--- 57,64 ----
  
  #define FIND_NAME_WIDTH(other)						\
      if ((other)->name_width == 0) {					\
! 	(other)->name_len = strlen((other)->name);			\
! 	(other)->name_width = 2 + XTextWidth(gameFont, (other)->name,	\
  					 (other)->name_len);		\
      }
  
Only in ../xpilot-a/src/client: paintmap.o
diff -c -r ../xpilot-a/src/client/paintobjects.c ./src/client/paintobjects.c
*** ../xpilot-a/src/client/paintobjects.c	Wed Mar 31 00:08:24 1999
--- ./src/client/paintobjects.c	Wed Sep 16 21:35:41 1998
***************
*** 86,93 ****
  
  #define FIND_NAME_WIDTH(other)						\
      if ((other)->name_width == 0) {					\
! 	(other)->name_len = strlen((other)->id_string);			\
! 	(other)->name_width = 2 + XTextWidth(gameFont, (other)->id_string,\
  					 (other)->name_len);		\
      }
  
--- 86,93 ----
  
  #define FIND_NAME_WIDTH(other)						\
      if ((other)->name_width == 0) {					\
! 	(other)->name_len = strlen((other)->name);			\
! 	(other)->name_width = 2 + XTextWidth(gameFont, (other)->name,	\
  					 (other)->name_len);		\
      }
  
***************
*** 651,657 ****
      }
  
      if (num_ship > 0) {
- 	snoopEyesId = -1;
  	for (i = 0; i < num_ship; i++) {
  	    x = ship_ptr[i].x;
  	    y = ship_ptr[i].y;
--- 651,656 ----
***************
*** 667,680 ****
  	    }
  	    points[cnt++] = points[0];
  
-             /*
-              * ship in the center? (svenska-hack)
-              */
- 	    if ( abs(X(x)-view_width/2) <=1 && abs(Y(y)-view_height/2) <=1
- 	&& Other_by_id(ship_ptr[i].id) != NULL ){
- 		  snoopEyesId = ship_ptr[i].id;
- 	    }
- 
  	    /*
  	     * Determine if the name of the player should be drawn below
  	     * his/her ship.
--- 666,671 ----
***************
*** 688,694 ****
  		rd.drawString(dpy, p_draw, gc,
  			    WINSCALE(X(x - other->name_width / 2)),
  			    WINSCALE(Y(y - gameFont->ascent - 15)),
! 			    other->id_string, other->name_len);
  		Erase_rectangle(WINSCALE(X(x - other->name_width / 2)) - 1,
  				WINSCALE(Y(y - gameFont->ascent - 15))
  				 - gameFont->ascent, other->name_width + 4,
--- 679,685 ----
  		rd.drawString(dpy, p_draw, gc,
  			    WINSCALE(X(x - other->name_width / 2)),
  			    WINSCALE(Y(y - gameFont->ascent - 15)),
! 			    other->name, other->name_len);
  		Erase_rectangle(WINSCALE(X(x - other->name_width / 2)) - 1,
  				WINSCALE(Y(y - gameFont->ascent - 15))
  				 - gameFont->ascent, other->name_width + 4,
***************
*** 801,807 ****
  #endif
  			XChangeGC(dpy, gc, mask, &gcv);
  		    }
- 
  #if !defined(_WINDOWS) || defined(PENS_OF_PLENTY)
  		    SET_FG(colors[ship_color].pixel);
  #else
--- 792,797 ----
***************
*** 844,849 ****
--- 834,840 ----
  				scolor = ecolor = ship_color;
  			    }
  			}
+ 
  			if (ecolor != -1) {		/* outer shield */
  				SET_FG(colors[ecolor].pixel);
  			    rd.drawArc(dpy, p_draw, gc, 
Only in ../xpilot-a/src/client: paintobjects.c.orig
Only in ../xpilot-a/src/client: paintobjects.o
diff -c -r ../xpilot-a/src/client/paintradar.c ./src/client/paintradar.c
*** ../xpilot-a/src/client/paintradar.c	Sat May 22 21:21:51 1999
--- ./src/client/paintradar.c	Wed Sep 23 22:42:43 1998
***************
*** 145,158 ****
      }
      for (i = 0; i<num_radar; i++) {
  	int s;
! 
! 	s = radar_ptr[i].size;
! 	if (s >= 0x80) {   /* from the same team */
! 	    XSetForeground(dpy, radarGC, colors[4].pixel);
!  	    s-=0x80;
! 	}
! 	if (s == 0)
! 	  s = 1;
  	x = (int)(radar_ptr[i].x * xf + 0.5) - s / 2;
  	y = RadarHeight - (int)(radar_ptr[i].y * yf + 0.5) - 1 - s / 2;
  	(*radarPlayerRectFN)(dpy, p_radar, radarGC, x, y, s, s);
--- 145,152 ----
      }
      for (i = 0; i<num_radar; i++) {
  	int s;
! 	if ((s = radar_ptr[i].size) <= 0)
! 	    s = 1;
  	x = (int)(radar_ptr[i].x * xf + 0.5) - s / 2;
  	y = RadarHeight - (int)(radar_ptr[i].y * yf + 0.5) - 1 - s / 2;
  	(*radarPlayerRectFN)(dpy, p_radar, radarGC, x, y, s, s);
***************
*** 174,180 ****
  		}
  	    }
  	}
- 	XSetForeground(dpy, radarGC, colors[WHITE].pixel);
      }
      if (num_radar) {
  	RELEASE(radar_ptr, num_radar, max_radar);
--- 168,173 ----
Only in ../xpilot-a/src/client: paintradar.o
Only in ../xpilot-a/src/client: query.o
Only in ../xpilot-a/src/client: record.o
Only in ../xpilot-a/src/client: syslimit.o
Only in ../xpilot-a/src/client: talk.o
Only in ../xpilot-a/src/client: texture.o
Only in ../xpilot-a/src/client: usleep.o
Only in ../xpilot-a/src/client: widget.o
diff -c -r ../xpilot-a/src/client/xevent.c ./src/client/xevent.c
*** ../xpilot-a/src/client/xevent.c	Tue Mar 30 23:19:55 1999
--- ./src/client/xevent.c	Tue Oct  6 17:52:19 1998
***************
*** 57,64 ****
  
  char xevent_version[] = VERSION;
  
- extern char *fast_msgs[];
- 
  extern setup_t		*Setup;
  
  static BITV_DECL(keyv, NUM_KEYS);
--- 57,62 ----
***************
*** 285,293 ****
  
  static bool Key_press(keys_t key)
  {
-    if (key >= KEY_MSG_1 && key < KEY_MSG_1 + N_MSGS)
- 	Net_talk_parsed (fast_msgs[key - KEY_MSG_1]);
- 
      switch (key) {
      case KEY_ID_MODE:
  	showRealName = showRealName ? false : true;
--- 283,288 ----
Only in ../xpilot-a/src/client: xevent.c.orig
Only in ../xpilot-a/src/client: xevent.o
Only in ../xpilot-a/src/client: xinit.o
Only in ../xpilot-a/src/client: xpilot
diff -c -r ../xpilot-a/src/client/xpilot.c ./src/client/xpilot.c
*** ../xpilot-a/src/client/xpilot.c	Tue Mar 30 23:19:55 1999
--- ./src/client/xpilot.c	Thu Apr 16 20:39:56 1998
***************
*** 96,103 ****
  char			**Argv;
  int			Argc;
  
- int			snoopEyesId = -1;
- 
  static void Check_client_versions(void);
  
  
--- 96,101 ----
Only in ../xpilot-a/src/client: xpilot.c.orig
Only in ../xpilot-a/src/client: xpilot.o
Only in ../xpilot-a/src/client: xpmread.o
Only in ../xpilot-a/src/common: Makefile
Only in ../xpilot-a/src/common: Makefile.bak
Only in ../xpilot-a/src/common/NT: Makefile
Only in ../xpilot-a/src/common/NT: Makefile.bak
Only in ../xpilot-a/src/common/NT/bindist: Makefile
Only in ../xpilot-a/src/common/NT/bindist: Makefile.bak
diff -c -r ../xpilot-a/src/common/NT/bindist/README.txt ./src/common/NT/bindist/README.txt
*** ../xpilot-a/src/common/NT/bindist/README.txt	Sun May 16 18:52:39 1999
--- ./src/common/NT/bindist/README.txt	Fri Oct 30 14:37:13 1998
***************
*** 1,6 ****
  $Id: README.txt.msub,v 1.1 1998/04/17 04:19:48 dick Exp $
  
! This is the README for XPilot.exe and XPilots.exe  4.U.4alpha2-NT13.
  
  Copyright © 1991-1998 by Bjørn Stabell, Ken Ronny Schouten, Bert Gijsbers & Dick Balaska.
  
--- 1,6 ----
  $Id: README.txt.msub,v 1.1 1998/04/17 04:19:48 dick Exp $
  
! This is the README for XPilot.exe and XPilots.exe  4.1.0-NT13.
  
  Copyright © 1991-1998 by Bjørn Stabell, Ken Ronny Schouten, Bert Gijsbers & Dick Balaska.
  
diff -c -r ../xpilot-a/src/common/NT/bindist/READMEbin.txt ./src/common/NT/bindist/READMEbin.txt
*** ../xpilot-a/src/common/NT/bindist/READMEbin.txt	Sun May 16 18:52:39 1999
--- ./src/common/NT/bindist/READMEbin.txt	Fri Oct 30 14:37:13 1998
***************
*** 1,5 ****
  This is the README for XPilot.exe Release 13 .
! XPilot.exe is based on 4.U.4alpha2 .
  
  Copyright © 1991-1998 by Bjørn Stabell, Ken Ronny Schouten, Bert Gijsbers & Dick Balaska.
  
--- 1,5 ----
  This is the README for XPilot.exe Release 13 .
! XPilot.exe is based on 4.1.0 .
  
  Copyright © 1991-1998 by Bjørn Stabell, Ken Ronny Schouten, Bert Gijsbers & Dick Balaska.
  
diff -c -r ../xpilot-a/src/common/NT/bindist/ServerMOTD.txt ./src/common/NT/bindist/ServerMOTD.txt
*** ../xpilot-a/src/common/NT/bindist/ServerMOTD.txt	Sun May 16 18:52:39 1999
--- ./src/common/NT/bindist/ServerMOTD.txt	Fri Oct 30 14:37:13 1998
***************
*** 1 ****
! This server is running XPilot-server 4.U.4alpha2-NT13
--- 1 ----
! This server is running XPilot-server 4.1.0-NT13
Only in ../xpilot-a/src/common: checknames.o
Only in ../xpilot-a/src/common: cmw.o
diff -c -r ../xpilot-a/src/common/const.h ./src/common/const.h
*** ../xpilot-a/src/common/const.h	Tue Mar 30 23:20:09 1999
--- ./src/common/const.h	Sat Aug 29 22:49:53 1998
***************
*** 405,416 ****
  extern char* strdup(const char*);
  #endif
  
- #define N_MSGS 20
- #define FAST_MSG_SIZE 400
- #define MSG_FNLEN         100
- #define START_DELIMITER   '['
- #define END_DELIMITER     ']'
- #define MIDDLE_DELIMITER  '|'
- #define SPECIAL_TALK_CHAR '#'
- 
  #endif
--- 405,408 ----
Only in ../xpilot-a/src/common: const.h.orig
Only in ../xpilot-a/src/common: error.o
diff -c -r ../xpilot-a/src/common/keys.h ./src/common/keys.h
*** ../xpilot-a/src/common/keys.h	Tue Mar 30 23:20:19 1999
--- ./src/common/keys.h	Thu Apr 16 20:40:42 1998
***************
*** 116,142 ****
       * retaining compatibility.  Change this at the next major cleanup.
       */
      ,
-     KEY_MSG_1,
-     KEY_MSG_2,
-     KEY_MSG_3,
-     KEY_MSG_4,
-     KEY_MSG_5,
-     KEY_MSG_6,
-     KEY_MSG_7,
-     KEY_MSG_8,
-     KEY_MSG_9,
-     KEY_MSG_10,
-     KEY_MSG_11,
-     KEY_MSG_12,
-     KEY_MSG_13,
-     KEY_MSG_14,
-     KEY_MSG_15,
-     KEY_MSG_16,
-     KEY_MSG_17,
-     KEY_MSG_18,
-     KEY_MSG_19,
-     KEY_MSG_20,
- 
      KEY_ID_MODE,
      KEY_TOGGLE_OWNED_ITEMS,
      KEY_TOGGLE_MESSAGES,
--- 116,121 ----
Only in ../xpilot-a/src/common: keys.h.orig
Only in ../xpilot-a/src/common: libxpcommon.a
Only in ../xpilot-a/src/common: math.o
Only in ../xpilot-a/src/common: net.o
diff -c -r ../xpilot-a/src/common/pack.h ./src/common/pack.h
*** ../xpilot-a/src/common/pack.h	Sun May 16 18:09:15 1999
--- ./src/common/pack.h	Sun Aug 30 18:40:54 1998
***************
*** 90,96 ****
   * 3.8.0.0: new items (deflector, hyperjump, phasing), keyboardsize and rounddelay.
   * 4.1.0.0: new item (mirror).
   */
! #define	MAGIC		0x4101F4ED
  
  #define MAGIC2VERSION(M)	(((M) >> 16) & 0xFFFF)
  #define VERSION2MAGIC(V)	((((V) & 0xFFFF) << 16) | (MAGIC & 0xFFFF))
--- 90,96 ----
   * 3.8.0.0: new items (deflector, hyperjump, phasing), keyboardsize and rounddelay.
   * 4.1.0.0: new item (mirror).
   */
! #define	MAGIC		0x4100F4ED
  
  #define MAGIC2VERSION(M)	(((M) >> 16) & 0xFFFF)
  #define VERSION2MAGIC(V)	((((V) & 0xFFFF) << 16) | (MAGIC & 0xFFFF))
Only in ../xpilot-a/src/common: portability.o
Only in ../xpilot-a/src/common: shipshape.o
Only in ../xpilot-a/src/common: socklib.o
Only in ../xpilot-a/src/common: strcasecmp.o
Only in ../xpilot-a/src/common: strdup.o
diff -c -r ../xpilot-a/src/common/version.h ./src/common/version.h
*** ../xpilot-a/src/common/version.h	Sun May 16 18:51:58 1999
--- ./src/common/version.h	Fri Oct 30 14:36:46 1998
***************
*** 28,42 ****
  #if defined(__hpux)
  #   pragma COPYRIGHT_DATE	"1991-1998"
  #   pragma COPYRIGHT		"Bjørn Stabell, Ken Ronny Schouten, Bert Gijsbers & Dick Balaska"
! #   pragma VERSIONID		"XPilot 4.U.4alpha2"
  #endif
  
! #define VERSION			"4.U.4alpha2"
  #ifdef	_WINDOWS
! #define	TITLE			"4.U.4alpha2-NT13"
  #define	VERSION_WINDOWS	"13"
  #else
! #define TITLE			"XPilot 4.U.4alpha2"
  #endif
  #define AUTHORS			"Bjørn Stabell, Ken Ronny Schouten, Bert Gijsbers & Dick Balaska"
  #define COPYRIGHT		"Copyright © 1991-1998 by Bjørn Stabell, Ken Ronny Schouten, Bert Gijsbers & Dick Balaska"
--- 28,42 ----
  #if defined(__hpux)
  #   pragma COPYRIGHT_DATE	"1991-1998"
  #   pragma COPYRIGHT		"Bjørn Stabell, Ken Ronny Schouten, Bert Gijsbers & Dick Balaska"
! #   pragma VERSIONID		"XPilot 4.1.0"
  #endif
  
! #define VERSION			"4.1.0"
  #ifdef	_WINDOWS
! #define	TITLE			"4.1.0-NT13"
  #define	VERSION_WINDOWS	"13"
  #else
! #define TITLE			"XPilot 4.1.0"
  #endif
  #define AUTHORS			"Bjørn Stabell, Ken Ronny Schouten, Bert Gijsbers & Dick Balaska"
  #define COPYRIGHT		"Copyright © 1991-1998 by Bjørn Stabell, Ken Ronny Schouten, Bert Gijsbers & Dick Balaska"
Only in ../xpilot-a/src/mapedit: Makefile
Only in ../xpilot-a/src/mapedit: Makefile.bak
Only in ../xpilot-a/src/mapedit: T_Form.o
Only in ../xpilot-a/src/mapedit: T_Handler.o
Only in ../xpilot-a/src/mapedit: T_Popup.o
Only in ../xpilot-a/src/mapedit: T_Toolkit.o
Only in ../xpilot-a/src/mapedit: events.o
Only in ../xpilot-a/src/mapedit: expose.o
Only in ../xpilot-a/src/mapedit: file.o
Only in ../xpilot-a/src/mapedit: forms.o
Only in ../xpilot-a/src/mapedit: grow.o
Only in ../xpilot-a/src/mapedit: help.o
Only in ../xpilot-a/src/mapedit: main.o
Only in ../xpilot-a/src/mapedit: round.o
Only in ../xpilot-a/src/mapedit: tools.o
Only in ../xpilot-a/src/mapedit: xp-mapedit
Only in ../xpilot-a/src/replay: Makefile
Only in ../xpilot-a/src/replay: Makefile.bak
Only in ../xpilot-a/src/replay: buttons.o
Only in ../xpilot-a/src/replay: xp-replay
diff -c -r ../xpilot-a/src/replay/xp-replay.c ./src/replay/xp-replay.c
*** ../xpilot-a/src/replay/xp-replay.c	Sun May 16 01:07:40 1999
--- ./src/replay/xp-replay.c	Sat Apr 18 15:53:08 1998
***************
*** 88,94 ****
  #include "items/itemTractorBeam.xbm"
  #include "items/itemAutopilot.xbm"
  #include "items/itemEmergencyShield.xbm"
- #include "items/itemMirror.xbm"
  
  #include "tools/eject.xbm"
  #include "tools/fastf.xbm"
--- 88,93 ----
***************
*** 1387,1394 ****
      itemEmergencyShield_bits,
      itemDeflector_bits,
      itemHyperJump_bits,
!     itemPhasingDevice_bits,
!     itemMirror_bits
  };
  
  static XFontStruct *loadQueryFont(const char *fontName, GC gc)
--- 1386,1392 ----
      itemEmergencyShield_bits,
      itemDeflector_bits,
      itemHyperJump_bits,
!     itemPhasingDevice_bits
  };
  
  static XFontStruct *loadQueryFont(const char *fontName, GC gc)
Only in ../xpilot-a/src/replay: xp-replay.o
Only in ../xpilot-a/src/server: Makefile
Only in ../xpilot-a/src/server: Makefile.bak
diff -c -r ../xpilot-a/src/server/cannon.c ./src/server/cannon.c
*** ../xpilot-a/src/server/cannon.c	Fri Feb 19 22:54:17 1999
--- ./src/server/cannon.c	Sat Sep  5 05:44:51 1998
***************
*** 136,142 ****
  		obj->acc.x = 0;
  		obj->acc.y = 0;
  		obj->mass = 10;
! 		obj->life = (1500 + (rand() & 511))*FPSMultiplier;
  		obj->count = amount;
  		obj->pl_range = ITEM_SIZE / 2;
  		obj->pl_radius = ITEM_SIZE / 2;
--- 136,142 ----
  		obj->acc.x = 0;
  		obj->acc.y = 0;
  		obj->mass = 10;
! 		obj->life = 1500 + (rand() & 511);
  		obj->count = amount;
  		obj->pl_range = ITEM_SIZE / 2;
  		obj->pl_radius = ITEM_SIZE / 2;
***************
*** 458,464 ****
  	/* smarter cannons use tractors more often and also push/pull longer */
  	c->tractor_is_pressor = (rand() % (cannonSmartness + 1) == 0);
  	c->tractor_target = pl->id;
! 	c->tractor_count = (11 + rand() % ((3 * cannonSmartness) + 1))*FPSMultiplier;
  	IFSOUND(sound = -1;)
  	break;
      case CW_TRANSPORTER:
--- 458,464 ----
  	/* smarter cannons use tractors more often and also push/pull longer */
  	c->tractor_is_pressor = (rand() % (cannonSmartness + 1) == 0);
  	c->tractor_target = pl->id;
! 	c->tractor_count = 11 + rand() % ((3 * cannonSmartness) + 1);
  	IFSOUND(sound = -1;)
  	break;
      case CW_TRANSPORTER:
***************
*** 492,498 ****
  		/* dir */	dir - 4 * (4 - cannonSmartness),
  				dir + 4 * (4 - cannonSmartness),
  		/* speed */	0.1, speed * 4,
! 		/* life */	3*FPSMultiplier, 20*FPSMultiplier);
  	    c->item[ITEM_EMERGENCY_THRUST]--;
  	} else {
  	    Make_debris(
--- 492,498 ----
  		/* dir */	dir - 4 * (4 - cannonSmartness),
  				dir + 4 * (4 - cannonSmartness),
  		/* speed */	0.1, speed * 4,
! 		/* life */	3, 20);
  	    c->item[ITEM_EMERGENCY_THRUST]--;
  	} else {
  	    Make_debris(
***************
*** 509,515 ****
  		/* dir */	dir - 3 * (4 - cannonSmartness),
  				dir + 3 * (4 - cannonSmartness),
  		/* speed */	0.1, speed * 2,
! 		/* life */	3*FPSMultiplier, 20*FPSMultiplier);
  	}
  	c->item[ITEM_FUEL]--;
  	IFSOUND(sound = THRUST_SOUND;)
--- 509,515 ----
  		/* dir */	dir - 3 * (4 - cannonSmartness),
  				dir + 3 * (4 - cannonSmartness),
  		/* speed */	0.1, speed * 2,
! 		/* life */	3, 20);
  	}
  	c->item[ITEM_FUEL]--;
  	IFSOUND(sound = THRUST_SOUND;)
Only in ../xpilot-a/src/server: cannon.o
diff -c -r ../xpilot-a/src/server/cmdline.c ./src/server/cmdline.c
*** ../xpilot-a/src/server/cmdline.c	Wed May 12 17:02:58 1999
--- ./src/server/cmdline.c	Tue Sep  1 21:08:40 1998
***************
*** 232,245 ****
  
  bool		pLockServer;		/* Is server swappable out of memory?  */
  
- int             FPSMultiplier;          /* slow everything by this factor */
- bool            useWreckage;            /* create wreckage or not? */
- bool            ignore20MaxFPS;         /* ignore client maxFPS request if it is 20 */
- int             timerResolution;        /* OS timer resolution (times/s) */
- char            *password;              /* password for operator status */
- int             numberOfRounds;         /* how many rounds to play */
- int             playerLimit;            /* allow less players than bases */
- 
  const char default_map[] = DEFAULT_MAP;
  
  
--- 232,237 ----
***************
*** 2280,2348 ****
  	tuner_plock,
  	"Whether the server is prevented from being swapped out of memory.\n"
      },
-     {
-         "FPSMultiplier",
- 	"FPSMultiplier",
- 	"1",
- 	&FPSMultiplier,
- 	valInt,
- 	tuner_none,
- 	"Everything is slowed by this factor. Allows using higher FPS\n"               "without making the game too fast.\n"
-     },
-     {
-         "wreckage",
- 	"wreckage",
- 	"true",
- 	&useWreckage,
- 	valBool,
- 	tuner_dummy,
- 	"Do destroyed ships leave wreckage?\n"
-     },
-     {   "ignore20MaxFPS",
- 	"ignore20MaxFPS",
- 	"true",
- 	&ignore20MaxFPS,
- 	valBool,
- 	tuner_dummy,
- 	"Ignore client maxFPS request if it is 20 (the default setting).\n"
-     },
-     {
-         "timerResolution",
- 	"timerResolution",
- 	"0",
- 	&timerResolution,
- 	valInt,
- 	tuner_none,
- 	"If set to nonzero, xpilots will requests signals from the OS at\n"
- 	"1/timerResolution second intervals. Server will then compute a new\n"
- 	"frame FPS times out of every timerResolution signals.\n"
-     },
-     {
-         "password",
- 	"password",
- 	NULL,
- 	&password,
- 	valString,
- 	tuner_dummy,
- 	"The password needed to get operator privileges.\n"
-     },
-     {   "numberOfRounds",
- 	"numRounds",
- 	"0",
- 	&numberOfRounds,
- 	valInt,
- 	tuner_dummy,
- 	"The number of rounds to play. If 0, unlimited.\n"
-     },
-     {
-         "playerLimit",
- 	"playerLimit",
- 	"0",
- 	&playerLimit,
- 	valInt,
- 	tuner_dummy,
- 	"Allow only (number of bases)-playerLimit players to enter.\n"
-     }
  };
  
  
--- 2272,2277 ----
***************
*** 2601,2608 ****
      for (j = 0; j < NELEM(options); j++)
  	addOption(options[j].name, options[j].defaultValue, 0, &options[j]);
      parseOptions();
-     fireRepeatRate *= FPSMultiplier; /* might not want to do this */
-     ShotsLife *= FPSMultiplier;
      Grok_map();
  }
  
--- 2530,2535 ----
Only in ../xpilot-a/src/server: cmdline.o
diff -c -r ../xpilot-a/src/server/collision.c ./src/server/collision.c
*** ../xpilot-a/src/server/collision.c	Tue Apr 13 21:30:32 1999
--- ./src/server/collision.c	Fri Oct 30 12:49:29 1998
***************
*** 655,662 ****
  		       not the team the ball belongs to. the latter is
  		       found through the ball's treasure */
  		    ball->team = pl->team;
- 		    if (ball->owner == -1)
- 		      ball->life=LONG_MAX;  /* for frame counter */
  		    ball->owner = pl->id;
  		    ball->length = distance;
  		    SET_BIT(ball->status, GRAVITY);
--- 655,660 ----
***************
*** 673,685 ****
  	     * We want a separate list of balls to avoid searching
  	     * the object list for balls.
  	     */
- 
- 	    int mindist=BALL_STRING_LENGTH,dist;
  	    for (j = 0; j < NumObjs; j++) {
  		if (BIT(Obj[j]->type, OBJ_BALL) && Obj[j]->id == -1) {
! 		    if ((dist=Wrap_length(pl->pos.x - Obj[j]->pos.x,
! 				    pl->pos.y - Obj[j]->pos.y))
! 			  < mindist) {
  			object *ball = Obj[j];
  			int bteam = -1;
  
--- 671,681 ----
  	     * We want a separate list of balls to avoid searching
  	     * the object list for balls.
  	     */
  	    for (j = 0; j < NumObjs; j++) {
  		if (BIT(Obj[j]->type, OBJ_BALL) && Obj[j]->id == -1) {
! 		    if (Wrap_length(pl->pos.x - Obj[j]->pos.x,
! 				    pl->pos.y - Obj[j]->pos.y)
! 			  < BALL_STRING_LENGTH) {
  			object *ball = Obj[j];
  			int bteam = -1;
  
***************
*** 687,704 ****
  			    bteam = World.treasures[ball->treasure].team;
  
  			/*
! 			 * The treasure's team cannot connect before
! 			 * somebody else has owned the ball.
! 			 * This was done to stop team members
  			 * taking and hiding with the ball... this was
  			 * considered bad gamesmanship.
  			 */
  			if (ball->owner != -1
  			    || (   pl->team != TEAM_NOT_SET
! 				   && pl->team != bteam)) {
  			    pl->ball = Obj[j];
! 			    mindist=dist;
! 			}
  		    }
  		}
  	    }
--- 683,700 ----
  			    bteam = World.treasures[ball->treasure].team;
  
  			/*
! 			 * If the treasure's team cannot connect before
! 			 * other non-team members wait until somebody has
! 			 * else has owned the ball before allowing a
! 			 * connection.  This was done to stop team members
  			 * taking and hiding with the ball... this was
  			 * considered bad gamesmanship.
  			 */
  			if (ball->owner != -1
  			    || (   pl->team != TEAM_NOT_SET
! 				&& pl->team != bteam))
  			    pl->ball = Obj[j];
! 			break;
  		    }
  		}
  	    }
***************
*** 1476,1483 ****
  		obj = Obj[objnum];
  	    }
  
! 	    pulse->pos.x += tcos(pulse->dir) * PULSE_SPEED/FPSMultiplier;
! 	    pulse->pos.y += tsin(pulse->dir) * PULSE_SPEED/FPSMultiplier;
  	    if (BIT(World.rules->mode, WRAP_PLAY)) {
  		if (pulse->pos.x < 0) {
  		    pulse->pos.x += World.width;
--- 1472,1479 ----
  		obj = Obj[objnum];
  	    }
  
! 	    pulse->pos.x += tcos(pulse->dir) * PULSE_SPEED;
! 	    pulse->pos.y += tsin(pulse->dir) * PULSE_SPEED;
  	    if (BIT(World.rules->mode, WRAP_PLAY)) {
  		if (pulse->pos.x < 0) {
  		    pulse->pos.x += World.width;
***************
*** 1588,1601 ****
  	    Object_position_init_pixels(obj, x1, y1);
  
  	    for (i = hits = 0; i <= max; i += PULSE_SAMPLE_DISTANCE) {
  		x = x1 + (i * dx) / max;
  		y = y1 + (i * dy) / max;
! 		obj->vel.x = (x - CLICK_TO_FLOAT(obj->pos.cx))*FPSMultiplier;
! 		obj->vel.y = (y - CLICK_TO_FLOAT(obj->pos.cy))*FPSMultiplier;
! 		/* changed from = x - obj->pos.x to make lasers disappear
! 		   less frequently when wrapping. There's still a small
! 		   chance of it happening though. Didn't bother to really
! 		   fix the code to completely prevent that. */
  		Move_object(objnum);
  		if (obj->life == 0) {
  		    break;
--- 1584,1594 ----
  	    Object_position_init_pixels(obj, x1, y1);
  
  	    for (i = hits = 0; i <= max; i += PULSE_SAMPLE_DISTANCE) {
+ 
  		x = x1 + (i * dx) / max;
  		y = y1 + (i * dy) / max;
! 		obj->vel.x = x - obj->pos.x;
! 		obj->vel.y = y - obj->pos.y;
  		Move_object(objnum);
  		if (obj->life == 0) {
  		    break;
Only in ../xpilot-a/src/server: collision.o
diff -c -r ../xpilot-a/src/server/contact.c ./src/server/contact.c
*** ../xpilot-a/src/server/contact.c	Wed May 12 17:05:39 1999
--- ./src/server/contact.c	Sat Aug 29 22:49:54 1998
***************
*** 736,742 ****
      /*
       * Is the game full?
       */
!     if (NumPlayers - NumPseudoPlayers + login_in_progress + NumQueuedPlayers >= World.NumBases - playerLimit) {
  	if (NumQueuedPlayers > 0) {
  	    return E_GAME_FULL;
  	}
--- 736,742 ----
      /*
       * Is the game full?
       */
!     if (NumPlayers - NumPseudoPlayers + login_in_progress + NumQueuedPlayers >= World.NumBases) {
  	if (NumQueuedPlayers > 0) {
  	    return E_GAME_FULL;
  	}
***************
*** 745,751 ****
  		return E_GAME_FULL;
  	    }
  	}
! 	if (NumPlayers - NumPseudoPlayers + login_in_progress + NumQueuedPlayers >= World.NumBases - playerLimit) {
  	    return E_GAME_FULL;
  	}
      }
--- 745,751 ----
  		return E_GAME_FULL;
  	    }
  	}
! 	if (NumPlayers - NumPseudoPlayers + login_in_progress + NumQueuedPlayers >= World.NumBases) {
  	    return E_GAME_FULL;
  	}
      }
***************
*** 825,831 ****
      long			last_ack_recv;
  };
  
! struct queued_player	*qp_list;
  
  static void Queue_remove(struct queued_player *qp, struct queued_player *prev)
  {
--- 825,831 ----
      long			last_ack_recv;
  };
  
! static struct queued_player	*qp_list;
  
  static void Queue_remove(struct queued_player *qp, struct queued_player *prev)
  {
***************
*** 902,912 ****
  	if (last_unqueued_loops + 2 + (FPS >> 2) < main_loops) {
  
  	    /* is there a homebase available? */
! 	    if (NumPlayers - NumPseudoPlayers + login_in_progress < World.NumBases - playerLimit
  		|| (Kick_robot_players(TEAM_NOT_SET)
! 		    && NumPlayers - NumPseudoPlayers + login_in_progress < World.NumBases - playerLimit)
  		|| (Kick_paused_players(TEAM_NOT_SET)
! 		    && NumPlayers - NumPseudoPlayers + login_in_progress < World.NumBases - playerLimit)) {
  
  		/* find a team for this fellow. */
  		if (BIT(World.rules->mode, TEAM_PLAY)) {
--- 902,912 ----
  	if (last_unqueued_loops + 2 + (FPS >> 2) < main_loops) {
  
  	    /* is there a homebase available? */
! 	    if (NumPlayers - NumPseudoPlayers + login_in_progress < World.NumBases
  		|| (Kick_robot_players(TEAM_NOT_SET)
! 		    && NumPlayers - NumPseudoPlayers + login_in_progress < World.NumBases)
  		|| (Kick_paused_players(TEAM_NOT_SET)
! 		    && NumPlayers - NumPseudoPlayers + login_in_progress < World.NumBases)) {
  
  		/* find a team for this fellow. */
  		if (BIT(World.rules->mode, TEAM_PLAY)) {
Only in ../xpilot-a/src/server: contact.o
diff -c -r ../xpilot-a/src/server/event.c ./src/server/event.c
*** ../xpilot-a/src/server/event.c	Sun May 16 03:44:49 1999
--- ./src/server/event.c	Fri Oct  2 21:39:26 1998
***************
*** 192,199 ****
      for (i = 0; i < NumPlayers; i++) {
  	if (i == lock
  	    || (BIT(Players[i]->status, PLAYING|PAUSE|GAME_OVER) != PLAYING)
! 	    || !Player_lock_allowed(ind, i)
! 	    || TEAM(ind,i)) {
  	    continue;
  	}
  	l = Wrap_length(Players[i]->pos.x - pl->pos.x,
--- 192,198 ----
      for (i = 0; i < NumPlayers; i++) {
  	if (i == lock
  	    || (BIT(Players[i]->status, PLAYING|PAUSE|GAME_OVER) != PLAYING)
! 	    || !Player_lock_allowed(ind, i)) {
  	    continue;
  	}
  	l = Wrap_length(Players[i]->pos.x - pl->pos.x,
***************
*** 220,226 ****
      int			i;
  
      if (onoff != 0 && !BIT(pl->status, PAUSE)) { /* Turn pause mode on */
-         Swappers[pl->team]=-1;
  	pl->count = 10*FPS;
  	pl->updateVisibility = 1;
  	CLR_BIT(pl->status, SELF_DESTRUCT|PLAYING);
--- 219,224 ----
***************
*** 297,304 ****
  	}
  	pressed = BITV_ISSET(pl->last_keyv, key) != 0;
  	BITV_TOGGLE(pl->prev_keyv, key);
! 	if (key != KEY_SHIELD)               /* Client might automatically */
! 	  pl->frame_last_busy = frame_loops; /* keep shields up */
  
  	/*
  	 * Allow these functions before a round has started.
--- 295,301 ----
  	}
  	pressed = BITV_ISSET(pl->last_keyv, key) != 0;
  	BITV_TOGGLE(pl->prev_keyv, key);
! 	pl->frame_last_busy = frame_loops;
  
  	/*
  	 * Allow these functions before a round has started.
***************
*** 481,487 ****
  		    if (i == j)
  			break;
  		} while (i == ind
! 			 || BIT(Players[i]->status, GAME_OVER|PAUSE)
  			 || !Player_lock_allowed(ind, i));
  		if (i == ind) {
  		    CLR_BIT(pl->lock.tagged, LOCK_PLAYER);
--- 478,484 ----
  		    if (i == j)
  			break;
  		} while (i == ind
! 			 || BIT(Players[i]->status, GAME_OVER)
  			 || !Player_lock_allowed(ind, i));
  		if (i == ind) {
  		    CLR_BIT(pl->lock.tagged, LOCK_PLAYER);
***************
*** 718,725 ****
  			*l = pl->lock.pl_id;
  		    }
  		} else {
! 		    if ((*l!=NOT_CONNECTED)
! 			    && Player_lock_allowed(ind, GetInd[*l])) {
  			pl->lock.pl_id = *l;
  			SET_BIT(pl->lock.tagged, LOCK_PLAYER);
  		    }
--- 715,721 ----
  			*l = pl->lock.pl_id;
  		    }
  		} else {
! 		    if (Player_lock_allowed(ind, *l)) {
  			pl->lock.pl_id = *l;
  			SET_BIT(pl->lock.tagged, LOCK_PLAYER);
  		    }
***************
*** 770,776 ****
  	    case KEY_SELF_DESTRUCT:
  		TOGGLE_BIT(pl->status, SELF_DESTRUCT);
  		if (BIT(pl->status, SELF_DESTRUCT))
! 		    pl->count = 150*FPSMultiplier;
  		break;
  
  	    case KEY_PAUSE:
--- 766,772 ----
  	    case KEY_SELF_DESTRUCT:
  		TOGGLE_BIT(pl->status, SELF_DESTRUCT);
  		if (BIT(pl->status, SELF_DESTRUCT))
! 		    pl->count = 150;
  		break;
  
  	    case KEY_PAUSE:
***************
*** 907,915 ****
  		    || BIT(pl->used, OBJ_AUTOPILOT))
  		    break;
  		pl->power *= 1.10;
- #if 1
- 		Set_player_message(pl,"KEY_INCREASE_POWER [*BUGHUNT NOTICE*]");
- #endif
  		pl->power = MIN(pl->power, MAX_PLAYER_POWER);
  		break;
  
--- 903,908 ----
***************
*** 918,926 ****
  		    || BIT(pl->used, OBJ_AUTOPILOT))
  		    break;
  		pl->power *= 0.90;
- #if 1
- 		Set_player_message(pl,"KEY_DECREASE_POWER [*BUGHUNT NOTICE*]");
- #endif
  		pl->power = MAX(pl->power, MIN_PLAYER_POWER);
  		break;
  
--- 911,916 ----
***************
*** 930,938 ****
  		    break;
  		if (pl->turnacc == 0.0)
  		    pl->turnspeed *= 1.05;
- #if 1
- 		Set_player_message(pl,"KEY_INCREASE_TURNSPEED [*BUGHUNT NOTICE*]");
- #endif
  		pl->turnspeed = MIN(pl->turnspeed, MAX_PLAYER_TURNSPEED);
  		break;
  
--- 920,925 ----
***************
*** 942,950 ****
  		    break;
  		if (pl->turnacc == 0.0)
  		    pl->turnspeed *= 0.95;
- #if 1
- 		Set_player_message(pl,"KEY_DECREASE_TURNSPEED [*BUGHUNT NOTICE(]");
- #endif
  		pl->turnspeed = MAX(pl->turnspeed, MIN_PLAYER_TURNSPEED);
  		break;
  
--- 929,934 ----
Only in ../xpilot-a/src/server: event.o
diff -c -r ../xpilot-a/src/server/frame.c ./src/server/frame.c
*** ../xpilot-a/src/server/frame.c	Sun May 16 19:22:44 1999
--- ./src/server/frame.c	Sat Sep  5 05:44:52 1998
***************
*** 341,347 ****
  			pl->emergency_shield_left,
  			pl->emergency_shield_max);
      if (BIT(pl->status, SELF_DESTRUCT) && pl->count > 0) {
! 	Send_destruct(conn, pl->count/FPSMultiplier);
      }
      if (BIT(pl->used, OBJ_PHASING_DEVICE))
  	Send_phasingtime(conn,
--- 341,347 ----
  			pl->emergency_shield_left,
  			pl->emergency_shield_max);
      if (BIT(pl->status, SELF_DESTRUCT) && pl->count > 0) {
! 	Send_destruct(conn, pl->count);
      }
      if (BIT(pl->used, OBJ_PHASING_DEVICE))
  	Send_phasingtime(conn,
***************
*** 462,476 ****
  	    if (debris_colors >= 3) {
  		if (debris_colors > 4) {
  		    if (color == BLUE) {
! 			color = (shot->life/FPSMultiplier >> 1);
  		    } else {
! 			color = (shot->life/FPSMultiplier >> 2);
  		    }
  		} else {
  		    if (color == BLUE) {
! 			color = (shot->life/FPSMultiplier >> 2);
  		    } else {
! 			color = (shot->life/FPSMultiplier >> 3);
  		    }
  		}
  		if (color >= debris_colors) {
--- 462,476 ----
  	    if (debris_colors >= 3) {
  		if (debris_colors > 4) {
  		    if (color == BLUE) {
! 			color = (shot->life >> 1);
  		    } else {
! 			color = (shot->life >> 2);
  		    }
  		} else {
  		    if (color == BLUE) {
! 			color = (shot->life >> 2);
  		    } else {
! 			color = (shot->life >> 3);
  		    }
  		}
  		if (color >= debris_colors) {
***************
*** 819,825 ****
  		&& frame_loops % 5 >= 3) {
  		continue;
  	    }
! 	    Send_radar(conn, (int)x, (int)y, TEAM(i,ind) ? 3+0x80:3);
  	}
      }
  }
--- 819,825 ----
  		&& frame_loops % 5 >= 3) {
  		continue;
  	    }
! 	    Send_radar(conn, (int)x, (int)y, 3);
  	}
      }
  }
Only in ../xpilot-a/src/server: frame.o
diff -c -r ../xpilot-a/src/server/global.h ./src/server/global.h
*** ../xpilot-a/src/server/global.h	Wed May 12 16:56:58 1999
--- ./src/server/global.h	Tue Sep  1 21:08:43 1998
***************
*** 51,57 ****
   */
  #ifdef SERVER
  #define FPS			framesPerSecond
- extern int              Swappers[MAX_TEAMS];   /* person swapping to a team */
  extern player		**Players;
  extern object		*Obj[];
  extern pulse_t		*Pulses[];
--- 51,56 ----
***************
*** 59,65 ****
  extern trans_t		*Transporters[];
  extern long		frame_loops;
  extern int		NumPlayers;
- extern int              NumOperators;
  extern int		NumPseudoPlayers;
  extern int		NumQueuedPlayers;
  extern int		NumObjs;
--- 58,63 ----
***************
*** 245,257 ****
  extern int		maxRoundTime;
  extern int		roundtime;
  
- extern int              FPSMultiplier;
- extern bool             useWreckage;
- extern bool             ignore20MaxFPS;
- extern int              timerResolution;
- extern char             *password;
- extern int              numberOfRounds;
- extern int              playerLimit;
  #endif
  
  #endif /* GLOBAL_H */
--- 243,248 ----
Only in ../xpilot-a/src/server: id.o
Only in ../xpilot-a/src/server: map.o
Only in ../xpilot-a/src/server: metaserver.o
diff -c -r ../xpilot-a/src/server/netserver.c ./src/server/netserver.c
*** ../xpilot-a/src/server/netserver.c	Sun May 23 15:40:21 1999
--- ./src/server/netserver.c	Sun Aug 30 18:40:50 1998
***************
*** 1776,1784 ****
  {
      connection_t	*connp = &Conn[ind];
  
!     if (connp->version < 0x4101 && size >= 0x80)
!       size-=0x80;      /* friends and enemies look the same to old clients */
!       return Packet_printf(&connp->w, "%c%hd%hd%c", PKT_RADAR, x, y, size);
  }
  
  int Send_damaged(int ind, int damaged)
--- 1776,1782 ----
  {
      connection_t	*connp = &Conn[ind];
  
!     return Packet_printf(&connp->w, "%c%hd%hd%c", PKT_RADAR, x, y, size);
  }
  
  int Send_damaged(int ind, int damaged)
***************
*** 2010,2018 ****
      }
      power = (DFLOAT) tmp / 256.0F;
      pl = Players[GetInd[connp->id]];
- #if 1
-     Set_player_message(pl,"RECEIVED PACKET TO SET POWER (OR SOMETHING) [*BUGHUNT NOTICE*]");
- #endif
      switch (ch) {
      case PKT_POWER:
  	pl->power = power;
--- 2008,2013 ----
***************
*** 2395,2435 ****
      return 1;
  }
  
- static int Ind_by_name(char *name)
- {
-   int i,j,len;
- 
-   if (!name)
-     return -1;
- 
-   if (isdigit(*name)) {     /* Id given directly */
-     i=atoi(name);
-     if (i>0 && i<=NUM_IDS && (j=GetInd[i]) >= 0 && j<NumPlayers
- 	&& Players[j]->id==i)
-       return j;
-     else
-       return -1;
-   }
- 
-   /* first look for an exact match on player nickname. */
-   for (i = 0; i < NumPlayers; i++) {
-     if (strcasecmp(Players[i]->name, name) == 0) {
-       return i;
-     }
-   }
- 
- 
-   /* now look for a partial match on both nick and realname. */
-   len=strlen(name);
-   for (j = -1, i = 0; i < NumPlayers; i++) {
-     if (strncasecmp(Players[i]->name, name, len) == 0
- 	|| strncasecmp(Players[i]->realname, name, len) == 0)
-       j = (j == -1) ? i : -2;
-   }
-   
-   return j;
- }
- 
  /*
   * If a message contains a colon then everything before that colon is
   * either a unique player name prefix, or a team number with players.
--- 2390,2395 ----
***************
*** 2491,2497 ****
  	}
      }
      else {						/* Player message */
!         sent=Ind_by_name(str);
  	switch (sent) {
  	case -2:
  	    sprintf(msg, "Message not sent, %s matches more than one player!",
--- 2451,2472 ----
  	}
      }
      else {						/* Player message */
! 	sent = -1;
! 	/* first look for an exact match on player nickname. */
! 	for (i = 0; i < NumPlayers; i++) {
! 	    if (strcasecmp(Players[i]->name, str) == 0) {
! 		sent = i;
! 		break;
! 	    }
! 	}
! 	if (sent == -1) {
! 	    /* now look for a partial match on both nick and realname. */
! 	    for (sent = -1, i = 0; i < NumPlayers; i++) {
! 		if (strncasecmp(Players[i]->name, str, len) == 0
! 		    || strncasecmp(Players[i]->realname, str, len) == 0)
! 		    sent = (sent == -1) ? i : -2;
! 	    }
! 	}
  	switch (sent) {
  	case -2:
  	    sprintf(msg, "Message not sent, %s matches more than one player!",
***************
*** 2514,2998 ****
      }
  }
  
- int Swappers[MAX_TEAMS]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; /* fix this */
- 
- static void Send_all_info(player *pl)
- {
-   int i;
- 
-   for (i=0;i<NumPlayers;i++)
-     if (Players[i]->conn != NOT_CONNECTED) {
-       Send_player(Players[i]->conn,pl->id);
-       Send_score(Players[i]->conn,pl->id,pl->score,pl->life,
- 		 pl->mychar);
-       Send_base(Players[i]->conn,pl->id,pl->home_base);
-     }
- }
- 
- static void Swap_team(int ind, char *args)
- {
-   int      i,team;
-   player   *pl=Players[ind];
-   char      msg[MSG_LEN*2];
- 
-   for (i=0;i<MAX_TEAMS;i++)   /* can't queue to two teams at once */
-     if (Swappers[i]==pl->id)
-       Swappers[i]=-1;
- 
-   if (!args)
-     sprintf(msg,"Not swapping to any team.");
-   else {
-     team=atoi(args);
-     if (pl->team >= MAX_TEAMS)
-       sprintf(msg,"You do not currently have a team. Swapping doesn't work.");
-     else if (team<0 || team>=MAX_TEAMS || World.teams[team].NumBases == 0)
-       sprintf(msg,"There are no bases for team %d on this map.",team);
-     else if (reserveRobotTeam && team==robotTeam)
-       sprintf(msg,"You cannot join the robot team on this server.");
-     else if (team ==  pl->team)
-       sprintf(msg,"You already are on team %d.",team);
-     else if (World.teams[team].NumBases - World.teams[team].NumMembers > 0) {
-       sprintf(msg,"%s has swapped to team %d.",pl->name,team);
-       Set_message(msg);
-       if (BIT(pl->have, OBJ_BALL))
- 	Detach_ball(ind, -1);
-       World.teams[pl->team].NumMembers--;
-       pl->team=team;
-       World.teams[pl->team].NumMembers++;
-       if (BIT(pl->mode, LIMITED_LIVES))
- 	for (i = 0; i < NumPlayers; i++)
- 	  if (!TEAM(ind, i) && !BIT(Players[i]->status,PAUSE)) {
- 	    if (pl->mychar == ' ')
- 	      pl->mychar	= 'W';
- 	    pl->prev_life = pl->life = 0;
- 	    SET_BIT(pl->status, GAME_OVER|PLAYING);
- 	    CLR_BIT(pl->status, SELF_DESTRUCT);
- 	    pl->count=-1;
- 	    break;
- 	  }
-       Pick_startpos(GetInd[pl->id]);
-       Send_all_info(pl);
-       return;
-     } else {
-       i=Swappers[pl->team];
-       while (i != -1)
- 	if ( (i=Players[GetInd[i]]->team) != team)
- 	  i=Swappers[i];
- 	else {
- 	  int xbase=pl->home_base, xteam=pl->team,xbase2,xteam2;
- 	  player *pl2=pl;
- 
- 	  do {
- 	    pl2=Players[GetInd[Swappers[xteam]]];
- 	    Swappers[xteam]=-1;
- 	    xbase2=pl2->home_base;
- 	    xteam2=pl2->team;
- 	    if (BIT(pl2->have, OBJ_BALL))
- 	      Detach_ball(GetInd[pl2->id], -1);
- 	    pl2->team=xteam;
- 	    pl2->home_base=xbase;
- 	    if (pl2->mychar == ' ')
- 	      pl2->mychar	= 'W';
- 	    pl2->prev_life = pl2->life = 0;
- 	    SET_BIT(pl2->status, GAME_OVER|PLAYING);
- 	    CLR_BIT(pl2->status, SELF_DESTRUCT);
- 	    pl2->count=-1;
- 	    Go_home(GetInd[pl2->id]);
- 	    Send_all_info(pl2); 
- 	    /* This can send a huge amount of data if several players swap.
- 	       Unfortunately all player data, even shipshape, has to be
- 	       resent to change the team of a player. This should probably
- 	       be changed somehow to prevent disturbing other players. */
- 	    xbase=xbase2;
- 	    xteam=xteam2;
- 	  } while (xteam != team);
- 	  if (BIT(pl->have, OBJ_BALL))
- 	    Detach_ball(ind, -1);
- 	  pl->team=team;
- 	  pl->home_base=xbase;
- 	  if (pl->mychar == ' ')
- 	    pl->mychar = 'W';
- 	  pl->prev_life = pl->life = 0;
- 	  SET_BIT(pl->status, GAME_OVER|PLAYING);
- 	  CLR_BIT(pl->status, SELF_DESTRUCT);
- 	  pl->count=-1;
- 	  Go_home(ind);
- 	  Send_all_info(pl);
- 	  sprintf(msg,"Some players swapped teams.");
- 	  Set_message(msg);
- 	  return;
- 	}
-       
-       for (i = NumPlayers - 1; i >= 0; i--)
- 	if (Players[i]->conn != NOT_CONNECTED 
- 	    && BIT(Players[i]->status, PAUSE)
- 	    && (Players[i]->team == team)) {
- 	  sprintf(msg,"%s has swapped with paused %s.",pl->name,
- 		  Players[i]->name);
- 	  Set_message(msg);
- 	  if (BIT(pl->have, OBJ_BALL))
- 	    Detach_ball(GetInd[pl->id], -1);
- 	  Players[i]->team=pl->team;
- 	  pl->team=team;
- 	  team=Players[i]->home_base;
- 	  Players[i]->home_base=pl->home_base;
- 	  Go_home(i);
- 	  pl->home_base=team;
- 	  Send_all_info(Players[i]);
- 	  if (BIT(pl->mode, LIMITED_LIVES))
- 	    for (i = 0; i < NumPlayers; i++)
- 	      if (!TEAM(ind, i) && !BIT(Players[i]->status,PAUSE)) {
- 		if (pl->mychar == ' ')
- 		  pl->mychar	= 'W';
- 		pl->prev_life = pl->life = 0;
- 		SET_BIT(pl->status, GAME_OVER|PLAYING);
- 		CLR_BIT(pl->status, SELF_DESTRUCT);
- 		pl->count=-1;
- 		Go_home(ind);
- 		break;
- 	      }
- 	  Send_all_info(pl);
- 	  return;
- 	}
-       sprintf(msg,"You are queued for swap to team %d.",team);
-       Swappers[team]=pl->id;
-     }
-   }
-   sprintf(msg+strlen(msg)," [*Server reply*]");
-   Set_player_message(pl,msg);
-   return;
- }
- 
- extern int game_lock;
- 
- extern void Reset_all_players(void);
- 
- extern int roundCounter;
- 
- struct queued_player {
-     struct queued_player	*next;
-     char			real_name[MAX_CHARS];
-     char			nick_name[MAX_CHARS];
-     char			disp_name[MAX_CHARS];
-     char			host_name[MAX_CHARS];
-     char			host_addr[24];
-     int				port;
-     int				team;
-     unsigned			version;
-     int				login_port;
-     long			last_ack_sent;
-     long			last_ack_recv;
- };
- 
- extern struct queued_player *qp_list;
- 
- enum Command {
-   KICK_CMD, VERSION_CMD, HELP_CMD, RESET_CMD, TEAM_CMD,
-   PASSWORD_CMD, LOCK_CMD, SET_CMD, PAUSE_CMD, SHOW_CMD, 
-   ADVANCE_CMD, NO_CMD
- };
- 
- typedef struct {
-   const char *name;
-   const char *help;
-   int operOnly;
-   enum Command number;
- } commandInfo;
- 
- static commandInfo commands[] = {
-   {
-     "help",
-     "Without arguments, prints command list. /help <command> gives more info.",
-     0,
-     HELP_CMD
-   },
-   {
-     "team",
-     "/team <team number> swaps you to given team. "
-                  "Can be used with full teams too.",
-     0,
-     TEAM_CMD
-   },
-   {
-     "version",
-     "Print server version.",
-     0,
-     VERSION_CMD
-   },
-   {
-     "lock",
-     "Just /lock tells lock status. /lock 1 locks, /lock 0 unlocks. (operator)",
-     0,      /* checked in the function */
-     LOCK_CMD
-   },
-   {
-     "password",
-     "/password <string>. If string matches -password option, "
-                                       "gives operator status.",
-     0,
-     PASSWORD_CMD
-   },
-   {
-     "pause",
-     "/pause <player name or ID number>. Pauses player. (operator)",
-     1,
-     PAUSE_CMD
-   },
-   {
-     "reset",
-     "Just /reset starts a new round."
-         "/reset all  also sets scores to 0. (operator)",
-     1,
-     RESET_CMD
-   },
-   {
-     "set",
-     "/set <option> <value> sets a server option. (operator)",
-     1,
-     SET_CMD
-   },
-   {
-     "kick",
-     "/kick <player name or ID number>. Remove a player from game. (operator)",
-     1,
-     KICK_CMD
-   },
-   {
-     "show",
-     "/show queue. Show the names of players waiting to enter.",
-     0,
-     SHOW_CMD
-   },
-   {
-     "advance",
-     "/advance <name of player in the queue>. "
-          "Move the player to the front of the queue. (operator)",
-     1,
-     ADVANCE_CMD
-   }
- };
- 
- static void Handle_command(int ind, char *cmd)   /* no leading / */
- {
-     connection_t	*connp = &Conn[ind];
-     int                 plind  = GetInd[connp->id];
-     player		*pl = Players[plind];
-     int			i;
-     char		*args, msg[MSG_LEN * 2];
- 
-     if (args=strchr(cmd,' '))
-       *args++=0;               /* separate arguments from command */
- 
-     for (i=0; i<NELEM(commands); i++)
-       if (!strcasecmp(cmd,commands[i].name))
- 	break;
-     if (i==NELEM(commands)) {
-       i=NO_CMD;
-       sprintf(msg,"Unknown command %s",cmd);
-     }
-     else if (!pl->isoperator && commands[i].operOnly) {
-       i=NO_CMD;
-       sprintf(msg,"You need operator status to use this command.");
-     }
-     else
-     i=commands[i].number;
- 
-     switch(i) {
-     case NO_CMD:
-       break;
- 
-     case ADVANCE_CMD:
-       if (!args)
- 	sprintf(msg, "You must give a player name as an argument.");
-       else {
- 	struct queued_player *last=qp_list, *p;
- 
- 	if (!last || !(p=last->next)) {
- 	  sprintf(msg, "There are less than 2 players in the queue.");
- 	  break;
- 	}
- 	if (!strcasecmp(last->nick_name, args)) {
- 	  sprintf(msg, "Already first.");
- 	  break;
- 	}
- 	while (1)
- 	  if (strcasecmp(p->nick_name, args)) {
- 	    last=p;
- 	    p=p->next;
- 	    if (!p) {
- 	      sprintf(msg, "No player named %s in the queue.",args);
- 	      break;
- 	    }
- 	  } else {
- 	    last->next=p->next;
- 	    p->next=qp_list;
- 	    qp_list=p;
- 	    sprintf(msg, "Done.");
- 	    break;
- 	  }
-       }
-       break;
- 	
-     case SHOW_CMD:
-       if (!args)
- 	sprintf(msg,"Show what?");
-       else if (!strcasecmp(args,"queue")) {
- 	int len=0, i, count;
- 	struct queued_player *p=qp_list;
- 
- 	if (!p) {
- 	  sprintf(msg, "The queue is empty.");
- 	  break;
- 	}
- 	sprintf(msg, "Queue: ");
- 	len=strlen(msg);
- 	count=1;
- 	do {
- 	  sprintf(msg+len, "%d. %s  ", count++, p->nick_name);
- 	  len+=strlen(msg+len);
- 	  p=p->next;
- 	} while (p && len < MSG_LEN - 25);
- 	*(msg+len-2)=0;                  /* -2 to strip spaces */
-       } else
- 	sprintf(msg,"Unrecognized argument to /show.");
-       break;
- 
-     case TEAM_CMD:
-       Swap_team(plind,args);
-       return;
- 
-     case KICK_CMD:
-       if ( (i=Ind_by_name(args)) >= 0) {
- 	sprintf(msg,"%s kicked %s out! [*Server notice*]",
- 		pl->name, Players[i]->name);
- 	Set_message(msg);
- 	if (Players[i]->conn == NOT_CONNECTED)
- 	  Delete_player(i);
- 	else
- 	  Destroy_connection(Players[i]->conn, "kicked out");
- 	return;
-       }
-       else if (i==-1)
- 	sprintf(msg,"Name does not match any player.");
-       else if (i==-2)
- 	sprintf(msg,"Name matches several players.");
-       else
- 	sprintf(msg,"Error.");
-       break;
- 
-     case VERSION_CMD:
-       sprintf(msg,"Xpilot 4.1.0 + patch 4.U.4alpha2");
-       break;
- 
-     case HELP_CMD:
-       if (!args)
- 	sprintf(msg,"Commands: help team version lock password pause "\
- 		"reset set kick show");
-       else {
- 	for (i=0;i<NELEM(commands);i++)
- 	  if (!strcasecmp(args,commands[i].name))
- 	    break;
- 	if (i==NELEM(commands))
- 	  sprintf(msg,"No help for nonexistent command '%s'.",args);
- 	else 
- 	  sprintf(msg,"%s",commands[i].help);
-       }
-       break;
- 
-     case RESET_CMD:
-       if (args && !strcasecmp(args,"all")) {
- 	for (i=NumPlayers-1;i>=0;i--)
- 	  Players[i]->score=0;
- 	Reset_all_players();
- 	roundCounter = 1;
- 	if (gameDuration == -1)
- 	  gameDuration = 0;
- 	sprintf(msg," < Total reset by %s! >",pl->name);
- 	Set_message(msg);
- 	return;
-       }
-       else {
- 	Reset_all_players();
- 	sprintf(msg," < Round reset by %s! >",pl->name);
- 	Set_message(msg);
- 	if (gameDuration == -1)
- 	  gameDuration = 0;
- 	if (roundCounter == numberOfRounds+1)
- 	  numberOfRounds=0;
- 	return;
-       }
- 
-     case PASSWORD_CMD:
-       if (!password || !args || strcmp(args,password))
- 	sprintf(msg,"Wrong.");
-       else {
- 	if (!pl->isoperator)
- 	  NumOperators++;
- 	pl->isoperator=1;
- 	sprintf(msg,"You got operator status.");
-       }
-       break;
- 
-     case LOCK_CMD:
-       if (!args)
- 	sprintf(msg,"The game is currently %s.",game_lock?"locked":"unlocked");
-       else if (!pl->isoperator)
- 	sprintf(msg,"You need operator status for this.");
-       else if (atoi(args)) {
- 	sprintf(msg," < The game has been locked by %s! >",pl->name);
- 	Set_message(msg);
- 	game_lock=1;
- 	return;
-       }
-       else {
- 	sprintf(msg," < The game has been unlocked by %s! >",pl->name);
- 	Set_message(msg);
- 	game_lock=0;
- 	return;
-       }
-       break;
- 
-     case SET_CMD:
-       if (!args || !(args=strtok(args," ")) || !(cmd=strtok(NULL," ")) )
- 	sprintf(msg,"Usage: /set option value.");
-       else if ((i=Tune_option(args,cmd)) == 1) {
- 	if (!strcasecmp(args,"password"))
- 	  sprintf(msg,"Operation successful.");
- 	else {
- 	  sprintf(msg," < Option %s set to %s by %s. >",
- 		  args,cmd,pl->name);
- 	  Set_message(msg);
- 	  return;
- 	}
-       }
-       else if (i==0)
- 	sprintf(msg,"Invalid value.");
-       else if (i==-1)
- 	sprintf(msg,"This option cannot be changed at runtime.");
-       else if (i==-2)
- 	sprintf(msg,"No option named \"%s\".",args);
-       else
- 	sprintf(msg,"Error.");
-       break;
- 
-     case PAUSE_CMD:
-       if ((i=Ind_by_name(args))>=0 && Players[i]->conn != NOT_CONNECTED) {
- 	if (BIT(Players[i]->status, PLAYING|PAUSE|GAME_OVER|KILLED) == PLAYING)
- 	  Kill_player(i);
- 	Pause_player(i,1);
- 	sprintf(msg,"%s was paused by %s.",Players[i]->name,pl->name);
- 	Set_message(msg);
- 	return;
-       }
-       sprintf(msg,"Invalid player id.");
-       break;
-     }
- 
-     sprintf(msg+strlen(msg)," [*Server reply*]");
-     Set_player_message(pl,msg);
-     return;
- }
- 
  static int Receive_talk(int ind)
  {
      connection_t	*connp = &Conn[ind];
--- 2489,2494 ----
***************
*** 3015,3024 ****
  	    return n;
  	}
  	connp->talk_sequence_num = seq;
! 	if (*str=='/')
! 	  Handle_command(ind,str+1);
! 	else
! 	  Handle_talk (ind, str);
      }
      return 1;
  }
--- 2511,2517 ----
  	    return n;
  	}
  	connp->talk_sequence_num = seq;
! 	Handle_talk (ind, str);
      }
      return 1;
  }
***************
*** 3353,3359 ****
      }
      pl = Players[GetInd[connp->id]];
      if (BIT(pl->used, OBJ_AUTOPILOT))
! 	Autopilot(GetInd[connp->id], 0);
      turnspeed = movement * pl->turnspeed / MAX_PLAYER_TURNSPEED;
      if (turnspeed < 0) {
  	turndir = -1.0;
--- 2846,2852 ----
      }
      pl = Players[GetInd[connp->id]];
      if (BIT(pl->used, OBJ_AUTOPILOT))
! 	Autopilot(ind, 0);
      turnspeed = movement * pl->turnspeed / MAX_PLAYER_TURNSPEED;
      if (turnspeed < 0) {
  	turndir = -1.0;
***************
*** 3362,3381 ****
      else {
  	turndir = 1.0;
      }
! 
!     if (pl->turnresistance)
!       LIMIT(turnspeed, MIN_PLAYER_TURNSPEED, MAX_PLAYER_TURNSPEED);
!       /* This is just stupid - minimum amount of turning if you want to
! 	 turn at all??? And the only effect of that maximum is making
! 	 finding the correct settings harder for new mouse players,
! 	 because the limit is checked BEFORE multiplying by turnres!
! 	 Kept here to avoid changing the feeling for old players who
! 	 are already used to this odd behavior. New players should set
! 	 turnresistance to 0.
!       */
!     else
!       LIMIT(turnspeed,0,5*RES);
! 
      pl->turnvel -= turndir * turnspeed;
  
      return 1;
--- 2855,2861 ----
      else {
  	turndir = 1.0;
      }
!     LIMIT(turnspeed, MIN_PLAYER_TURNSPEED, MAX_PLAYER_TURNSPEED);
      pl->turnvel -= turndir * turnspeed;
  
      return 1;
***************
*** 3399,3407 ****
  	pl = Players[GetInd[connp->id]];
  	pl->player_fps = fps;
  	if (fps > FPS) pl->player_fps = FPS;
! 	if (fps < (FPS / 2)) pl->player_fps = (FPS+1) / 2;
  	if (fps == 0) pl->player_fps = FPS;
- 	if ((fps == 20) && ignore20MaxFPS) pl->player_fps = FPS;
  	n = FPS - pl->player_fps;
  	if (n <= 0) {
  	    pl->player_count = 0;
--- 2879,2886 ----
  	pl = Players[GetInd[connp->id]];
  	pl->player_fps = fps;
  	if (fps > FPS) pl->player_fps = FPS;
! 	if (fps < (FPS / 2)) pl->player_fps = FPS / 2;
  	if (fps == 0) pl->player_fps = FPS;
  	n = FPS - pl->player_fps;
  	if (n <= 0) {
  	    pl->player_count = 0;
Only in ../xpilot-a/src/server: netserver.o
diff -c -r ../xpilot-a/src/server/object.h ./src/server/object.h
*** ../xpilot-a/src/server/object.h	Mon Feb 15 17:41:00 1999
--- ./src/server/object.h	Sat Aug 29 22:49:55 1998
***************
*** 420,427 ****
  
      int		isowner;		/* If player started this server. */
  
-     int         isoperator;             /* Player has operator privileges */
- 
  #ifdef __cplusplus
  		player() {}
  #endif
--- 420,425 ----
Only in ../xpilot-a/src/server: objpos.o
Only in ../xpilot-a/src/server: option.o
diff -c -r ../xpilot-a/src/server/play.c ./src/server/play.c
*** ../xpilot-a/src/server/play.c	Fri Mar 19 16:10:15 1999
--- ./src/server/play.c	Fri Oct  2 21:39:27 1998
***************
*** 94,102 ****
  		    ? MAX_AFTERBURNER
  		    : pl->item[ITEM_AFTERBURNER]);
      alt_sparks = afterburners
! 		    ? AFTER_BURN_SPARKS(tot_sparks-1, afterburners)/FPSMultiplier + 1
  		    : 0;
-     tot_sparks/=FPSMultiplier;
  
      Make_debris(
  	/* pos.x, pos.y   */ x, y,
--- 94,101 ----
  		    ? MAX_AFTERBURNER
  		    : pl->item[ITEM_AFTERBURNER]);
      alt_sparks = afterburners
! 		    ? AFTER_BURN_SPARKS(tot_sparks-1, afterburners) + 1
  		    : 0;
  
      Make_debris(
  	/* pos.x, pos.y   */ x, y,
***************
*** 111,117 ****
  	/* min,max debris */ tot_sparks-alt_sparks, tot_sparks-alt_sparks,
  	/* min,max dir    */ min_dir, max_dir,
  	/* min,max speed  */ 1.0, max_speed,
! 	/* min,max life   */ 3*FPSMultiplier, max_life*FPSMultiplier
  	);
  
      Make_debris(
--- 110,116 ----
  	/* min,max debris */ tot_sparks-alt_sparks, tot_sparks-alt_sparks,
  	/* min,max dir    */ min_dir, max_dir,
  	/* min,max speed  */ 1.0, max_speed,
! 	/* min,max life   */ 3, max_life
  	);
  
      Make_debris(
***************
*** 127,133 ****
  	/* min,max debris */ alt_sparks, alt_sparks,
  	/* min,max dir    */ min_dir, max_dir,
  	/* min,max speed  */ 1.0, max_speed,
! 	/* min,max life   */ 3*FPSMultiplier, max_life*FPSMultiplier
  	);
  }
  
--- 126,132 ----
  	/* min,max debris */ alt_sparks, alt_sparks,
  	/* min,max dir    */ min_dir, max_dir,
  	/* min,max speed  */ 1.0, max_speed,
! 	/* min,max life   */ 3, max_life
  	);
  }
  
***************
*** 538,544 ****
      obj->acc.x =
      obj->acc.y = 0.0;
      obj->mass = 10.0;
!     obj->life = (1500 + (rand()&511))*FPSMultiplier;
      obj->count = num_per_pack;
      obj->pl_range = ITEM_SIZE/2;
      obj->pl_radius = ITEM_SIZE/2;
--- 537,543 ----
      obj->acc.x =
      obj->acc.y = 0.0;
      obj->mass = 10.0;
!     obj->life = 1500 + (rand()&511);
      obj->count = num_per_pack;
      obj->pl_range = ITEM_SIZE/2;
      obj->pl_radius = ITEM_SIZE/2;
***************
*** 669,675 ****
  	return;
      }
      percent = TRACTOR_PERCENT(pl->lock.distance, maxdist);
!     cost = (long)TRACTOR_COST(percent)/FPSMultiplier;
      if (pl->fuel.sum < -cost) {
  	CLR_BIT(pl->used, OBJ_TRACTOR_BEAM);
  	return;
--- 668,674 ----
  	return;
      }
      percent = TRACTOR_PERCENT(pl->lock.distance, maxdist);
!     cost = (long)TRACTOR_COST(percent);
      if (pl->fuel.sum < -cost) {
  	CLR_BIT(pl->used, OBJ_TRACTOR_BEAM);
  	return;
***************
*** 694,700 ****
      if (dist > maxdist)
  	return;
      percent = TRACTOR_PERCENT(dist, maxdist);
!     cost = (long)TRACTOR_COST(percent)/FPSMultiplier;
      force = TRACTOR_FORCE(pressor, percent, maxforce);
      
      sound_play_sensors(x, y,
--- 693,699 ----
      if (dist > maxdist)
  	return;
      percent = TRACTOR_PERCENT(dist, maxdist);
!     cost = (long)TRACTOR_COST(percent);
      force = TRACTOR_FORCE(pressor, percent, maxforce);
      
      sound_play_sensors(x, y,
***************
*** 706,719 ****
      theta = (int)Wrap_findDir(x - victim->pos.x, y - victim->pos.y);
  
      if (pl) {
! 	pl->vel.x += tcos(theta) * (force / pl->mass)/FPSMultiplier;
! 	pl->vel.y += tsin(theta) * (force / pl->mass)/FPSMultiplier;
  	Record_shove(pl, victim, frame_loops);
  	Record_shove(victim, pl, frame_loops);
      }
!     victim->vel.x -= tcos(theta) * (force / victim->mass)/FPSMultiplier;
!     victim->vel.y -= tsin(theta) * (force / victim->mass)/FPSMultiplier;
  }
  void Place_mine(int ind)
  {
      player *pl = Players[ind];
--- 705,719 ----
      theta = (int)Wrap_findDir(x - victim->pos.x, y - victim->pos.y);
  
      if (pl) {
! 	pl->vel.x += tcos(theta) * (force / pl->mass);
! 	pl->vel.y += tsin(theta) * (force / pl->mass);
  	Record_shove(pl, victim, frame_loops);
  	Record_shove(victim, pl, frame_loops);
      }
!     victim->vel.x -= tcos(theta) * (force / victim->mass);
!     victim->vel.y -= tsin(theta) * (force / victim->mass);
  }
+ 
  void Place_mine(int ind)
  {
      player *pl = Players[ind];
***************
*** 879,885 ****
  	     * This causes the added initial velocity to reduce to
  	     * zero over the MINI_MINE_SPREAD_TIME.
  	     */
! 	    mine->spread_left = MINI_MINE_SPREAD_TIME*FPSMultiplier;
  	    mine->acc.x = -mv.x / (MINI_MINE_SPREAD_TIME+1);
  	    mine->acc.y = -mv.y / (MINI_MINE_SPREAD_TIME+1);
  	} else {
--- 879,885 ----
  	     * This causes the added initial velocity to reduce to
  	     * zero over the MINI_MINE_SPREAD_TIME.
  	     */
! 	    mine->spread_left = MINI_MINE_SPREAD_TIME;
  	    mine->acc.x = -mv.x / (MINI_MINE_SPREAD_TIME+1);
  	    mine->acc.y = -mv.y / (MINI_MINE_SPREAD_TIME+1);
  	} else {
***************
*** 1019,1036 ****
  	    }
  	}
      }
- 
-     sound_play_all(DESTROY_BALL_SOUND);
-     sprintf(msg, " < %s's (%d) team has destroyed team %d treasure >",
- 	    pl->name, pl->team, td->team);
-     Set_message(msg);
- 
      if (!somebody_flag) {
  	SCORE(ind, Rate(pl->score, CANNON_SCORE)/2,
  	      tt->pos.x, tt->pos.y, "Treasure:");
  	return 0;
      }
  
      td->destroyed++;
      World.teams[td->team].TreasuresLeft--;
      World.teams[tt->team].TreasuresDestroyed++;
--- 1019,1035 ----
  	    }
  	}
      }
      if (!somebody_flag) {
  	SCORE(ind, Rate(pl->score, CANNON_SCORE)/2,
  	      tt->pos.x, tt->pos.y, "Treasure:");
  	return 0;
      }
  
+     sound_play_all(DESTROY_BALL_SOUND);
+     sprintf(msg, " < %s's (%d) team has destroyed team %d treasure >",
+ 	    pl->name, pl->team, td->team);
+     Set_message(msg);
+ 
      td->destroyed++;
      World.teams[td->team].TreasuresLeft--;
      World.teams[tt->team].TreasuresDestroyed++;
***************
*** 1887,1899 ****
  		    /* min,max debris */ 75, 150,
  		    /* min,max dir    */ 0, RES-1,
  		    /* min,max speed  */ 20, 95,
! 		    /* min,max life   */ 10*FPSMultiplier, 2*(FPS+15)
  		    );
  	    } else {
  		Make_debris(
  		    shot->prevpos.x, shot->prevpos.y, shot->vel.x, shot->vel.y,
  		    shot->id, shot->team, OBJ_DEBRIS, DEBRIS_MASS, GRAVITY,
! 		    RED, 8, 10, 20, 0, RES-1, 10, 50, 10*FPSMultiplier, 2*(FPS+15));
  	    }
  
  	}
--- 1886,1898 ----
  		    /* min,max debris */ 75, 150,
  		    /* min,max dir    */ 0, RES-1,
  		    /* min,max speed  */ 20, 95,
! 		    /* min,max life   */ 10, 2*(FPS+15)
  		    );
  	    } else {
  		Make_debris(
  		    shot->prevpos.x, shot->prevpos.y, shot->vel.x, shot->vel.y,
  		    shot->id, shot->team, OBJ_DEBRIS, DEBRIS_MASS, GRAVITY,
! 		    RED, 8, 10, 20, 0, RES-1, 10, 50, 10, 2*(FPS+15));
  	    }
  
  	}
***************
*** 2006,2013 ****
  	    /* min,max speed  */ 20 * speed_modv,
  				 (intensity >> 2) * speed_modv,
  #endif
! 	    /* min,max life   */ (int)(8 * life_modv)*FPSMultiplier,
! 				 (int)((intensity >> 1) * life_modv)*FPSMultiplier
  	    );
  	break;
  
--- 2005,2012 ----
  	    /* min,max speed  */ 20 * speed_modv,
  				 (intensity >> 2) * speed_modv,
  #endif
! 	    /* min,max life   */ (int)(8 * life_modv),
! 				 (int)((intensity >> 1) * life_modv)
  	    );
  	break;
  
***************
*** 2103,2110 ****
  	if (pl->fuel.sum <= -ED_LASER) {
  	    CLR_BIT(pl->used, OBJ_LASER);
  	} else {
! 	    x = pl->pos.x + pl->ship->m_gun[pl->dir].x + pl->vel.x/FPSMultiplier;
! 	    y = pl->pos.y + pl->ship->m_gun[pl->dir].y + pl->vel.y/FPSMultiplier;
  	    x = WRAP_XPIXEL(x);
  	    y = WRAP_YPIXEL(y);
  	    if (x >= 0 && x < World.width && y >= 0 && y < World.height) {
--- 2102,2109 ----
  	if (pl->fuel.sum <= -ED_LASER) {
  	    CLR_BIT(pl->used, OBJ_LASER);
  	} else {
! 	    x = pl->pos.x + pl->ship->m_gun[pl->dir].x + pl->vel.x;
! 	    y = pl->pos.y + pl->ship->m_gun[pl->dir].y + pl->vel.y;
  	    x = WRAP_XPIXEL(x);
  	    y = WRAP_YPIXEL(y);
  	    if (x >= 0 && x < World.width && y >= 0 && y < World.height) {
***************
*** 2134,2144 ****
      pulse->team = team;
      pulse->dir = dir;
      pulse->len = PULSE_LENGTH;
!     pulse->life = (life-1)*FPSMultiplier+1; 
      pulse->mods = mods;
      pulse->refl = false;
!     pulse->pos.x = x - PULSE_SPEED * tcos(dir)/FPSMultiplier;
!     pulse->pos.y = y - PULSE_SPEED * tsin(dir)/FPSMultiplier;
      NumPulses++;
      if (pl)
  	pl->num_pulses++;
--- 2133,2143 ----
      pulse->team = team;
      pulse->dir = dir;
      pulse->len = PULSE_LENGTH;
!     pulse->life = life;
      pulse->mods = mods;
      pulse->refl = false;
!     pulse->pos.x = x - PULSE_SPEED * tcos(dir);
!     pulse->pos.y = y - PULSE_SPEED * tsin(dir);
      NumPulses++;
      if (pl)
  	pl->num_pulses++;
***************
*** 2153,2163 ****
      int		i;
      long	dist, dx, dy;
  
!     if (pl->fuel.sum < -ED_DEFLECTOR/FPSMultiplier) {
  	CLR_BIT(pl->used, OBJ_DEFLECTOR);
  	return;
      }
!     Add_fuel(&(pl->fuel), (long)ED_DEFLECTOR/FPSMultiplier);
  
      for (i = 0; i < NumObjs; i++) {
  	obj = Obj[i];
--- 2152,2162 ----
      int		i;
      long	dist, dx, dy;
  
!     if (pl->fuel.sum < -ED_DEFLECTOR) {
  	CLR_BIT(pl->used, OBJ_DEFLECTOR);
  	return;
      }
!     Add_fuel(&(pl->fuel), (long)ED_DEFLECTOR);
  
      for (i = 0; i < NumObjs; i++) {
  	obj = Obj[i];
***************
*** 2208,2215 ****
  				/ (RES * 0.25);
  		DFLOAT dv = force / ABS(obj->mass);
  
! 		obj->vel.x += tcos(dir) * dv/FPSMultiplier;
! 		obj->vel.y += tsin(dir) * dv/FPSMultiplier;
  	    }
  	}
      }
--- 2207,2214 ----
  				/ (RES * 0.25);
  		DFLOAT dv = force / ABS(obj->mass);
  
! 		obj->vel.x += tcos(dir) * dv;
! 		obj->vel.y += tsin(dir) * dv;
  	    }
  	}
      }
***************
*** 2602,2608 ****
  	     */
  	    SET_BIT(shot->status, CONFUSED);
  	    shot->ecm_range = range;
! 	    shot->count = CONFUSED_TIME*FPSMultiplier;
  	    if (pl
  		&& BIT(pl->lock.tagged, LOCK_PLAYER)
  		&& (pl->lock.distance <= pl->sensor_range
--- 2601,2607 ----
  	     */
  	    SET_BIT(shot->status, CONFUSED);
  	    shot->ecm_range = range;
! 	    shot->count = CONFUSED_TIME;
  	    if (pl
  		&& BIT(pl->lock.tagged, LOCK_PLAYER)
  		&& (pl->lock.distance <= pl->sensor_range
***************
*** 2753,2759 ****
  
  	    if (!IS_ROBOT_PTR(p) || !ecmsReprogramRobots || !pl) {
  		/* player is blinded by light flashes. */
! 		long duration = (int)(damage * pow(0.75, p->item[ITEM_SENSOR]))*FPSMultiplier;
  		p->damaged += duration;
  		if (pl)
  		    Record_shove(p, pl, frame_loops + duration);
--- 2752,2758 ----
  
  	    if (!IS_ROBOT_PTR(p) || !ecmsReprogramRobots || !pl) {
  		/* player is blinded by light flashes. */
! 		long duration = (int)(damage * pow(0.75, p->item[ITEM_SENSOR]));
  		p->damaged += duration;
  		if (pl)
  		    Record_shove(p, pl, frame_loops + duration);
***************
*** 2923,2935 ****
  
      /* compute accelleration for player, assume t = 1 */
      accell = (force + pl_damping + ball_damping) / pl->mass;
!     pl->vel.x += D.x * accell/FPSMultiplier;
!     pl->vel.y += D.y * accell/FPSMultiplier;
  
      /* compute accelleration for ball, assume t = 1 */
      accell = (force + ball_damping + pl_damping) / ball->mass;
!     ball->vel.x += -D.x * accell/FPSMultiplier;
!     ball->vel.y += -D.y * accell/FPSMultiplier;
  
  #endif	/* ORIGINAL_BALL */
  }
--- 2922,2934 ----
  
      /* compute accelleration for player, assume t = 1 */
      accell = (force + pl_damping + ball_damping) / pl->mass;
!     pl->vel.x += D.x * accell;
!     pl->vel.y += D.y * accell;
  
      /* compute accelleration for ball, assume t = 1 */
      accell = (force + ball_damping + pl_damping) / ball->mass;
!     ball->vel.x += -D.x * accell;
!     ball->vel.y += -D.y * accell;
  
  #endif	/* ORIGINAL_BALL */
  }
***************
*** 2957,2964 ****
  	    shot->acc.x = 0;
  	    shot->acc.y = 0;
  	}
! 	shot->vel.x += acc * tcos(shot->dir)/FPSMultiplier;
! 	shot->vel.y += acc * tsin(shot->dir)/FPSMultiplier;
  	return;
      }
  
--- 2956,2963 ----
  	    shot->acc.x = 0;
  	    shot->acc.y = 0;
  	}
! 	shot->vel.x += acc * tcos(shot->dir);
! 	shot->vel.y += acc * tsin(shot->dir);
  	return;
      }
  
***************
*** 2976,2982 ****
  	} else {
  	    /* No player. Number of moves so that new target is searched */
  	    pl = 0;
! 	    shot->count = (HEAT_WIDE_TIMEOUT + HEAT_WIDE_ERROR)*FPSMultiplier;
  	}
  	if (pl && BIT(pl->status, THRUSTING)) {
  	    /*
--- 2975,2981 ----
  	} else {
  	    /* No player. Number of moves so that new target is searched */
  	    pl = 0;
! 	    shot->count = HEAT_WIDE_TIMEOUT + HEAT_WIDE_ERROR;
  	}
  	if (pl && BIT(pl->status, THRUSTING)) {
  	    /*
***************
*** 2984,3007 ****
  	     * set number to moves to correct error value
  	     */
  	    if (range < HEAT_CLOSE_RANGE) {
! 		shot->count = HEAT_CLOSE_ERROR*FPSMultiplier;
  	    } else if (range < HEAT_MID_RANGE) {
! 		shot->count = HEAT_MID_ERROR*FPSMultiplier;
  	    } else {
! 		shot->count = HEAT_WIDE_ERROR*FPSMultiplier;
  	    }
  	} else {
  	    shot->count++;
  	    /* Look for new target */
  	    if ((range < HEAT_CLOSE_RANGE
! 		 && shot->count/FPSMultiplier > HEAT_CLOSE_TIMEOUT + HEAT_CLOSE_ERROR)
  		|| (range < HEAT_MID_RANGE
! 		    && shot->count/FPSMultiplier > HEAT_MID_TIMEOUT + HEAT_MID_ERROR)
! 		|| shot->count/FPSMultiplier > HEAT_WIDE_TIMEOUT + HEAT_WIDE_ERROR) {
  		DFLOAT l;
  		int i;
  
! 		range = HEAT_RANGE * (shot->count/FPSMultiplier/HEAT_CLOSE_TIMEOUT);
  		for (i=0; i<NumPlayers; i++) {
  		    player *p = Players[i];
  
--- 2983,3006 ----
  	     * set number to moves to correct error value
  	     */
  	    if (range < HEAT_CLOSE_RANGE) {
! 		shot->count = HEAT_CLOSE_ERROR;
  	    } else if (range < HEAT_MID_RANGE) {
! 		shot->count = HEAT_MID_ERROR;
  	    } else {
! 		shot->count = HEAT_WIDE_ERROR;
  	    }
  	} else {
  	    shot->count++;
  	    /* Look for new target */
  	    if ((range < HEAT_CLOSE_RANGE
! 		 && shot->count > HEAT_CLOSE_TIMEOUT + HEAT_CLOSE_ERROR)
  		|| (range < HEAT_MID_RANGE
! 		    && shot->count > HEAT_MID_TIMEOUT + HEAT_MID_ERROR)
! 		|| shot->count > HEAT_WIDE_TIMEOUT + HEAT_WIDE_ERROR) {
  		DFLOAT l;
  		int i;
  
! 		range = HEAT_RANGE * (shot->count/HEAT_CLOSE_TIMEOUT);
  		for (i=0; i<NumPlayers; i++) {
  		    player *p = Players[i];
  
***************
*** 3027,3033 ****
  			    l < HEAT_CLOSE_RANGE ?
  				HEAT_CLOSE_ERROR : l < HEAT_MID_RANGE ?
  				    HEAT_MID_ERROR : HEAT_WIDE_ERROR;
- 			shot->count *= FPSMultiplier;
  			pl = p;
  		    }
  		}
--- 3026,3031 ----
***************
*** 3039,3052 ****
  	 * Heat seekers cannot fly exactly, if target is far away or thrust
  	 * isn't active.  So simulate the error:
  	 */
! 	x_dif = (rand()&3) * shot->count/FPSMultiplier;
! 	y_dif = (rand()&3) * shot->count/FPSMultiplier;
  
      } else {
  
  	if (BIT(shot->status, CONFUSED)
! 	    && (!(frame_loops % (CONFUSED_UPDATE_GRANULARITY*FPSMultiplier))
! 		|| shot->count == CONFUSED_TIME*FPSMultiplier)) {
  
  	    if (shot->count) {
  		shot->info = Players[rand() % NumPlayers]->id;
--- 3037,3050 ----
  	 * Heat seekers cannot fly exactly, if target is far away or thrust
  	 * isn't active.  So simulate the error:
  	 */
! 	x_dif = (rand()&3) * shot->count;
! 	y_dif = (rand()&3) * shot->count;
  
      } else {
  
  	if (BIT(shot->status, CONFUSED)
! 	    && (!(frame_loops % CONFUSED_UPDATE_GRANULARITY)
! 		|| shot->count == CONFUSED_TIME)) {
  
  	    if (shot->count) {
  		shot->info = Players[rand() % NumPlayers]->id;
***************
*** 3123,3129 ****
  	    case CANNON:
  		if (range > (SMART_SHOT_LOOK_AH-i)*(BLOCK_SZ/BLOCK_PARTS)) {
  		    if (shot_speed > SMART_SHOT_MIN_SPEED)
! 			shot_speed -= acc * (SMART_SHOT_DECFACT+1)/FPSMultiplier;
  		}
  		foundw = 1;
  	    }
--- 3121,3127 ----
  	    case CANNON:
  		if (range > (SMART_SHOT_LOOK_AH-i)*(BLOCK_SZ/BLOCK_PARTS)) {
  		    if (shot_speed > SMART_SHOT_MIN_SPEED)
! 			shot_speed -= acc * (SMART_SHOT_DECFACT+1);
  		}
  		foundw = 1;
  	    }
***************
*** 3182,3188 ****
  	    if (!foundw && range > (SHOT_LOOK_AH-i) * BLOCK_SZ) {
  		if (shot_speed
  		    > (SMART_SHOT_MIN_SPEED + SMART_SHOT_MAX_SPEED)/2)
! 		    shot_speed -= (SMART_SHOT_DECC+SMART_SHOT_ACC)/FPSMultiplier;
  	    }
  #endif
  	}
--- 3180,3186 ----
  	    if (!foundw && range > (SHOT_LOOK_AH-i) * BLOCK_SZ) {
  		if (shot_speed
  		    > (SMART_SHOT_MIN_SPEED + SMART_SHOT_MAX_SPEED)/2)
! 		    shot_speed -= SMART_SHOT_DECC+SMART_SHOT_ACC;
  	    }
  #endif
  	}
***************
*** 3198,3211 ****
      angle = angle - shot->dir - RES/2;
  
      if (angle < 0)
! 	shot->dir += (u_byte)(((-angle < shot->turnspeed/FPSMultiplier) ? -angle : shot->turnspeed/FPSMultiplier));
      else
! 	shot->dir -= (u_byte)(((angle < shot->turnspeed/FPSMultiplier) ? angle : shot->turnspeed/FPSMultiplier));
  
      shot->dir = MOD2(shot->dir, RES); /* NOTE!!!! */
  
      if (shot_speed < shot->max_speed)
! 	shot_speed += acc/FPSMultiplier;
  
      /*  shot->velocity = MIN(shot->velocity, shot->max_speed);  */
  
--- 3196,3209 ----
      angle = angle - shot->dir - RES/2;
  
      if (angle < 0)
! 	shot->dir += (u_byte)(((-angle < shot->turnspeed) ? -angle : shot->turnspeed));
      else
! 	shot->dir -= (u_byte)(((angle < shot->turnspeed) ? angle : shot->turnspeed));
  
      shot->dir = MOD2(shot->dir, RES); /* NOTE!!!! */
  
      if (shot_speed < shot->max_speed)
! 	shot_speed += acc;
  
      /*  shot->velocity = MIN(shot->velocity, shot->max_speed);  */
  
***************
*** 3288,3301 ****
  	    if (!fuel) {
  		if (t
  		    && t != ft->current
! 		    && *f >= low_level + REFUEL_RATE/FPSMultiplier
! 		    && *(f-1) <= TANK_CAP(t-1) - REFUEL_RATE/FPSMultiplier) {
  
! 		    *f -= REFUEL_RATE/FPSMultiplier;
! 		    fuel = REFUEL_RATE/FPSMultiplier;
  		} else if (t && *f < low_level) {
! 		    *f += REFUEL_RATE/FPSMultiplier;
! 		    fuel = -REFUEL_RATE/FPSMultiplier;
  		}
  	    }
  	    if (fuel && t == 0) {
--- 3286,3299 ----
  	    if (!fuel) {
  		if (t
  		    && t != ft->current
! 		    && *f >= low_level + REFUEL_RATE
! 		    && *(f-1) <= TANK_CAP(t-1) - REFUEL_RATE) {
  
! 		    *f -= REFUEL_RATE;
! 		    fuel = REFUEL_RATE;
  		} else if (t && *f < low_level) {
! 		    *f += REFUEL_RATE;
! 		    fuel = -REFUEL_RATE;
  		}
  	    }
  	    if (fuel && t == 0) {
***************
*** 3522,3531 ****
  	    max_life = ShotsLife;
  	}
      }
!     if (min_speed * max_life / FPSMultiplier > World.hypotenuse)
! 	min_speed = World.hypotenuse * FPSMultiplier / max_life;
!     if (max_speed * min_life / FPSMultiplier > World.hypotenuse)
! 	max_speed = World.hypotenuse *FPSMultiplier / min_life;
      if (max_speed < min_speed)
  	max_speed = min_speed;
  
--- 3520,3529 ----
  	    max_life = ShotsLife;
  	}
      }
!     if (min_speed * max_life > World.hypotenuse)
! 	min_speed = World.hypotenuse / max_life;
!     if (max_speed * min_life > World.hypotenuse)
! 	max_speed = World.hypotenuse / min_life;
      if (max_speed < min_speed)
  	max_speed = min_speed;
  
***************
*** 3562,3569 ****
  	debris->mass = mass;
  	debris->type = type;
  	life = (int)(min_life + rfrac() * (max_life - min_life) + 1);
! 	if (life * speed / FPSMultiplier > World.hypotenuse) {
! 	    life = (long)(World.hypotenuse * FPSMultiplier / speed);
  	}
  	debris->life = life;
  	debris->fuselife = life;
--- 3560,3567 ----
  	debris->mass = mass;
  	debris->type = type;
  	life = (int)(min_life + rfrac() * (max_life - min_life) + 1);
! 	if (life * speed > World.hypotenuse) {
! 	    life = (long)(World.hypotenuse / speed);
  	}
  	debris->life = life;
  	debris->fuselife = life;
***************
*** 3595,3602 ****
      modifiers		mods;
      DFLOAT		mass, sum_mass = 0.0;
  
-     if (!useWreckage)
-       return;
      if (BIT(World.rules->mode, WRAP_PLAY)) {
  	if (x < 0) x += World.width;
  	else if (x >= World.width) x -= World.width;
--- 3593,3598 ----
***************
*** 3718,3724 ****
  	/* min,max debris */ min_debris, max_debris,
  	/* min,max dir    */ 0, RES-1,
  	/* min,max speed  */ 20.0, 20 + (((int)(pl->mass))>>1),
! 	/* min,max life   */ 5*FPSMultiplier, (int)(5 + (pl->mass * 1.5))*FPSMultiplier
  	);
  
      if ( !BIT(pl->status, KILLED) )
--- 3714,3720 ----
  	/* min,max debris */ min_debris, max_debris,
  	/* min,max dir    */ 0, RES-1,
  	/* min,max speed  */ 20.0, 20 + (((int)(pl->mass))>>1),
! 	/* min,max life   */ 5, (int)(5 + (pl->mass * 1.5))
  	);
  
      if ( !BIT(pl->status, KILLED) )
***************
*** 3735,3741 ****
  	/* max wreckage     */ 10,
  	/* min,max dir      */ 0, RES-1,
  	/* min,max speed    */ 10.0, 10 + (((int)(pl->mass))>>1),
! 	/* min,max life     */ 5*FPSMultiplier, (int)(5 + (pl->mass * 1.5))*FPSMultiplier
  	);
  
  }
--- 3731,3737 ----
  	/* max wreckage     */ 10,
  	/* min,max dir      */ 0, RES-1,
  	/* min,max speed    */ 10.0, 10 + (((int)(pl->mass))>>1),
! 	/* min,max life     */ 5, (int)(5 + (pl->mass * 1.5))
  	);
  
  }
Only in ../xpilot-a/src/server: play.o
diff -c -r ../xpilot-a/src/server/player.c ./src/server/player.c
*** ../xpilot-a/src/server/player.c	Wed Mar 10 00:37:22 1999
--- ./src/server/player.c	Wed Sep 23 22:42:49 1998
***************
*** 490,497 ****
  
      pl->isowner = 0;
  
-     pl->isoperator = 0;
- 
      return pl->id;
  }
  
--- 490,495 ----
***************
*** 585,591 ****
  }
  
  
! void Reset_all_players(void)
  {
      player		*pl;
      int			i, j;
--- 583,589 ----
  }
  
  
! static void Reset_all_players(void)
  {
      player		*pl;
      int			i, j;
***************
*** 876,898 ****
  	  "[Winner]");
  }
  
- extern int roundCounter;
- 
- static void Count_rounds(void)
- {
-   char msg[100];
- 
-   if (!numberOfRounds)
-     return;
- 
-   sprintf(msg," < Round %d out of %d completed. >",roundCounter,numberOfRounds);
-   Set_message(msg);
-   if (roundCounter==numberOfRounds)
-     Game_Over();
-   roundCounter++;
-   return;
- }
- 
  void Team_game_over(int winning_team, const char *reason)
  {
      int			i, j;
--- 874,879 ----
***************
*** 958,965 ****
  
      Reset_all_players();
  
-     Count_rounds();
- 
      free(best_players);
  }
  
--- 939,944 ----
***************
*** 1031,1038 ****
  
      Reset_all_players();
  
-     Count_rounds();
- 
      free(best_players);
  }
  
--- 1010,1015 ----
***************
*** 1158,1165 ****
  		    "ashamed of yourselves.");
      }
  
-     Count_rounds();
- 
      Reset_all_players();
  }
  
--- 1135,1140 ----
***************
*** 1602,1609 ****
      }
  }
  
- extern int game_lock;
- 
  void Delete_player(int ind)
  {
      player		*pl = Players[ind];
--- 1577,1582 ----
***************
*** 1614,1631 ****
      if (IS_ROBOT_PTR(pl)) {
  	Robot_destroy(ind);
      }
- 
-     if (pl->isoperator)
-       if (!--NumOperators && game_lock) {
- 	game_lock=0;
- 	Set_message(" < Game has been unlocked as the last operator left! >");
-       }
- 
-     /* Won't be swapping anywhere */
-     for (i=MAX_TEAMS-1;i>=0;i--)
-       if (Swappers[i]==id)
- 	Swappers[i]=-1;
-     Swappers[pl->team]=-1;  /* change this behavior later (pause too) */
  
      /* Delete remaining shots */
      for (i = NumObjs - 1; i >= 0; i--) {
--- 1587,1592 ----
Only in ../xpilot-a/src/server: player.o
Only in ../xpilot-a/src/server: robot.o
Only in ../xpilot-a/src/server: robotdef.o
Only in ../xpilot-a/src/server: rules.o
Only in ../xpilot-a/src/server: saudio.o
diff -c -r ../xpilot-a/src/server/sched.c ./src/server/sched.c
*** ../xpilot-a/src/server/sched.c	Tue Jan 26 18:45:29 1999
--- ./src/server/sched.c	Wed Apr 22 16:56:43 1998
***************
*** 126,133 ****
   */
  static void catch_timer(int signum)
  {
-     static unsigned int count;
- 
  #ifdef OS2DEBUG
      static int counter = 0;
  
--- 126,131 ----
***************
*** 139,150 ****
  	fflush( stdout );
      }
  #endif
! 
!     count+=FPS;
!     if (count>=timerResolution) {
!       count-=timerResolution;
!       timer_ticks++;
!     }
  }
  
  #ifdef _OS2_
--- 137,143 ----
  	fflush( stdout );
      }
  #endif
!     timer_ticks++;
  }
  
  #ifdef _OS2_
Only in ../xpilot-a/src/server: sched.o
diff -c -r ../xpilot-a/src/server/server.c ./src/server/server.c
*** ../xpilot-a/src/server/server.c	Wed Mar 10 00:27:07 1999
--- ./src/server/server.c	Sat Aug 29 22:49:57 1998
***************
*** 82,88 ****
   * Global variables
   */
  int			NumPlayers = 0;
- int                     NumOperators = 0;
  int			NumObjs = 0;
  int			NumPulses = 0;
  int			NumEcms = 0;
--- 82,87 ----
***************
*** 98,104 ****
  char			ShutdownReason[MAX_CHARS];
  int 			framesPerSecond = 18;
  long			main_loops = 0;		/* needed in events.c */
- int                     roundCounter = 1;
  
  static int		serverSocket;
  #ifdef LOG
--- 97,102 ----
***************
*** 207,215 ****
  
  #ifdef	_WINDOWS
      /* Windows returns here, we let the worker thread call sched() */
!     install_timer_tick(ServerThreadTimerProc, timerResolution?timerResolution:FPS);
  #else
!     install_timer_tick(Main_loop, timerResolution?timerResolution:FPS);
  
      sched();
      xpprintf("sched returned!?");
--- 205,213 ----
  
  #ifdef	_WINDOWS
      /* Windows returns here, we let the worker thread call sched() */
!     install_timer_tick(ServerThreadTimerProc, FPS);
  #else
!     install_timer_tick(Main_loop, FPS);
  
      sched();
      xpprintf("sched returned!?");
***************
*** 621,627 ****
  void Game_Over(void)
  {
      long		maxsc, minsc;
!     int			i, win, lose;
      char		msg[128];
  
      Set_message("Game over...");
--- 619,625 ----
  void Game_Over(void)
  {
      long		maxsc, minsc;
!     int			i, win, loose;
      char		msg[128];
  
      Set_message("Game over...");
***************
*** 635,641 ****
  	int teamscore[MAX_TEAMS];
  	maxsc = -32767;
  	minsc = 32767;
! 	win = lose = -1;
  
  	for (i=0; i < MAX_TEAMS; i++) {
  	    teamscore[i] = 1234567; /* These teams are not used... */
--- 633,639 ----
  	int teamscore[MAX_TEAMS];
  	maxsc = -32767;
  	minsc = 32767;
! 	win = loose = -1;
  
  	for (i=0; i < MAX_TEAMS; i++) {
  	    teamscore[i] = 1234567; /* These teams are not used... */
***************
*** 659,665 ****
  		}
  		if (teamscore[i] < minsc) {
  		    minsc = teamscore[i];
! 		    lose = i;
  		}
  	    }
  	}
--- 657,663 ----
  		}
  		if (teamscore[i] < minsc) {
  		    minsc = teamscore[i];
! 		    loose = i;
  		}
  	    }
  	}
***************
*** 670,677 ****
  	    xpprintf("%s\n", msg);
  	}
  
! 	if (lose != -1 && lose != win) {
! 	    sprintf(msg,"Worst team (%ld Pts): Team %d", minsc, lose);
  	    Set_message(msg);
  	    xpprintf("%s\n", msg);
  	}
--- 668,675 ----
  	    xpprintf("%s\n", msg);
  	}
  
! 	if (loose != -1 && loose != win) {
! 	    sprintf(msg,"Worst team (%ld Pts): Team %d", minsc, loose);
  	    Set_message(msg);
  	    xpprintf("%s\n", msg);
  	}
***************
*** 679,685 ****
  
      maxsc = -32767;
      minsc = 32767;
!     win = lose = -1;
  
      for (i = 0; i < NumPlayers; i++) {
  	SET_BIT(Players[i]->status, GAME_OVER);
--- 677,683 ----
  
      maxsc = -32767;
      minsc = 32767;
!     win = loose = -1;
  
      for (i = 0; i < NumPlayers; i++) {
  	SET_BIT(Players[i]->status, GAME_OVER);
***************
*** 690,696 ****
  	    }
  	    if (Players[i]->score < minsc) {
  		minsc = Players[i]->score;
! 		lose = i;
  	    }
  	}
      }
--- 688,694 ----
  	    }
  	    if (Players[i]->score < minsc) {
  		minsc = Players[i]->score;
! 		loose = i;
  	    }
  	}
      }
***************
*** 699,706 ****
  	Set_message(msg);
  	xpprintf("%s\n", msg);
      }
!     if (lose != -1 && lose != win) {
! 	sprintf(msg,"Worst human player: %s", Players[lose]->name);
  	Set_message(msg);
  	xpprintf("%s\n", msg);
      }
--- 697,704 ----
  	Set_message(msg);
  	xpprintf("%s\n", msg);
      }
!     if (loose != -1 && loose != win) {
! 	sprintf(msg,"Worst human player: %s", Players[loose]->name);
  	Set_message(msg);
  	xpprintf("%s\n", msg);
      }
Only in ../xpilot-a/src/server: server.o
diff -c -r ../xpilot-a/src/server/update.c ./src/server/update.c
*** ../xpilot-a/src/server/update.c	Thu Apr 22 19:00:51 1999
--- ./src/server/update.c	Sat Aug 29 22:49:57 1998
***************
*** 56,68 ****
  
  #define update_object_speed(o_)						\
      if (BIT((o_)->status, GRAVITY)) {					\
! 	(o_)->vel.x += ((o_)->acc.x					\
! 	   + World.gravity[(o_)->pos.bx][(o_)->pos.by].x)/FPSMultiplier;\
! 	(o_)->vel.y += ((o_)->acc.y					\
! 	   + World.gravity[(o_)->pos.bx][(o_)->pos.by].y)/FPSMultiplier;\
      } else {								\
! 	(o_)->vel.x += (o_)->acc.x/FPSMultiplier;			\
!         (o_)->vel.y += (o_)->acc.y/FPSMultiplier;	        	\
      }
  
  int	rdelay = 0;		/* delay until start of next round */
--- 56,68 ----
  
  #define update_object_speed(o_)						\
      if (BIT((o_)->status, GRAVITY)) {					\
! 	(o_)->vel.x += (o_)->acc.x					\
! 		    + World.gravity[(o_)->pos.bx][(o_)->pos.by].x;	\
! 	(o_)->vel.y += (o_)->acc.y					\
! 		    + World.gravity[(o_)->pos.bx][(o_)->pos.by].y;	\
      } else {								\
! 	(o_)->vel.x += (o_)->acc.x;					\
! 	(o_)->vel.y += (o_)->acc.y;					\
      }
  
  int	rdelay = 0;		/* delay until start of next round */
***************
*** 224,233 ****
  	sound_play_sensors(pl->pos.x, pl->pos.y, AUTOPILOT_ON_SOUND);
      } else {
  	pl->power = pl->auto_power_s;
- #if 1
- 	if (pl->power < 55)
- 	  Set_player_message(pl,"WARNING!!!! AUTOPILOT RESTORING LESS THAN FULL POWER!!! [* BUGHUNT NOTICE *]");
- #endif
  	pl->turnacc = pl->auto_turnacc_s;
  	pl->turnspeed = pl->auto_turnspeed_s;
  	pl->turnresistance = pl->auto_turnresistance_s;
--- 224,229 ----
***************
*** 445,452 ****
       * Let the fuel stations regenerate some fuel.
       */
      if (NumPlayers > 0) {
! 	int fuel = (int)(NumPlayers * STATION_REGENERATION)/FPSMultiplier;
! 	int frames_per_update = MAX_STATION_FUEL * FPSMultiplier / (fuel * BLOCK_SZ);
  	for (i=0; i<World.NumFuels; i++) {
  	    if (World.fuel[i].fuel == MAX_STATION_FUEL) {
  		continue;
--- 441,448 ----
       * Let the fuel stations regenerate some fuel.
       */
      if (NumPlayers > 0) {
! 	int fuel = (int)(NumPlayers * STATION_REGENERATION);
! 	int frames_per_update = MAX_STATION_FUEL / (fuel * BLOCK_SZ);
  	for (i=0; i<World.NumFuels; i++) {
  	    if (World.fuel[i].fuel == MAX_STATION_FUEL) {
  		continue;
***************
*** 472,477 ****
--- 468,476 ----
      for (i=0; i<NumObjs; i++) {
  	obj = Obj[i];
  
+ 	update_object_speed(obj);
+ 	Move_object(i);
+ 
  	if (BIT(obj->type, OBJ_MINE))
  	    Move_mine(i);
  
***************
*** 488,495 ****
  		(obj->rotation + (int) (obj->turnspeed * RES)) % RES;
  	}
  
- 	update_object_speed(obj);
- 	Move_object(i);
      }
  
      /*
--- 487,492 ----
***************
*** 539,545 ****
  	    weapon = Cannon_select_weapon(i);
  	    Cannon_aim(i, weapon, &target, &dir);
  	    if (target != -1) {
! 		if (rand() % (16*FPSMultiplier) == 0)
  		    Cannon_fire(i, weapon, target, dir);
  	    } else if (cannonsUseItems
  		       && itemProbMult > 0
--- 536,542 ----
  	    weapon = Cannon_select_weapon(i);
  	    Cannon_aim(i, weapon, &target, &dir);
  	    if (target != -1) {
! 		if (rand() % 16 == 0)
  		    Cannon_fire(i, weapon, target, dir);
  	    } else if (cannonsUseItems
  		       && itemProbMult > 0
***************
*** 765,772 ****
  	 * Compute turn
  	 */
  	pl->turnvel	+= pl->turnacc;
! 	if (pl->turnresistance)     /* use old mouse control */
! 	    pl->turnvel	*= pl->turnresistance;
  
  #ifdef TURN_FUEL
  	tf = pl->oldturnvel - pl->turnvel;
--- 762,768 ----
  	 * Compute turn
  	 */
  	pl->turnvel	+= pl->turnacc;
! 	pl->turnvel	*= pl->turnresistance;
  
  #ifdef TURN_FUEL
  	tf = pl->oldturnvel - pl->turnvel;
***************
*** 784,798 ****
  
  	pl->float_dir	+= pl->turnvel;
  
! 	
! 	while (pl->float_dir < 0)
  	    pl->float_dir += RES;
! 	while (pl->float_dir >= RES)
  	    pl->float_dir -= RES;
  
- 	if (!pl->turnresistance)
- 	    pl->turnvel=0;
- 
  	Turn_player(i);
  
  
--- 780,790 ----
  
  	pl->float_dir	+= pl->turnvel;
  
! 	if (pl->float_dir < 0)
  	    pl->float_dir += RES;
! 	if (pl->float_dir >= RES)
  	    pl->float_dir -= RES;
  
  	Turn_player(i);
  
  
***************
*** 800,809 ****
  	 * Compute energy drainage
  	 */
  	if (BIT(pl->used, OBJ_SHIELD))
! 	    Add_fuel(&(pl->fuel), (long)ED_SHIELD/FPSMultiplier);
  
  	if (BIT(pl->used, OBJ_CLOAKING_DEVICE))
! 	    Add_fuel(&(pl->fuel), (long)ED_CLOAKING_DEVICE/FPSMultiplier);
  
  #define UPDATE_RATE 100
  
--- 792,801 ----
  	 * Compute energy drainage
  	 */
  	if (BIT(pl->used, OBJ_SHIELD))
! 	    Add_fuel(&(pl->fuel), (long)ED_SHIELD);
  
  	if (BIT(pl->used, OBJ_CLOAKING_DEVICE))
! 	    Add_fuel(&(pl->fuel), (long)ED_CLOAKING_DEVICE);
  
  #define UPDATE_RATE 100
  
***************
*** 815,821 ****
  		pl->visibility[j].canSee = 1;
  	    else if (pl->updateVisibility
  		     || Players[j]->updateVisibility
! 		     || rand() % (UPDATE_RATE*FPSMultiplier)
  		     < ABS(frame_loops - pl->visibility[j].lastChange)) {
  
  		pl->visibility[j].lastChange = frame_loops;
--- 807,813 ----
  		pl->visibility[j].canSee = 1;
  	    else if (pl->updateVisibility
  		     || Players[j]->updateVisibility
! 		     || rand() % UPDATE_RATE
  		     < ABS(frame_loops - pl->visibility[j].lastChange)) {
  
  		pl->visibility[j].lastChange = frame_loops;
***************
*** 841,851 ****
  		int ct = pl->fuel.current;
  
  		do {
! 		    if (World.fuel[pl->fs].fuel > REFUEL_RATE/FPSMultiplier) {
! 			World.fuel[pl->fs].fuel -= REFUEL_RATE/FPSMultiplier;
  			World.fuel[pl->fs].conn_mask = 0;
  			World.fuel[pl->fs].last_change = frame_loops;
! 			Add_fuel(&(pl->fuel), REFUEL_RATE/FPSMultiplier);
  		    } else {
  			Add_fuel(&(pl->fuel), World.fuel[pl->fs].fuel);
  			World.fuel[pl->fs].fuel = 0;
--- 833,843 ----
  		int ct = pl->fuel.current;
  
  		do {
! 		    if (World.fuel[pl->fs].fuel > REFUEL_RATE) {
! 			World.fuel[pl->fs].fuel -= REFUEL_RATE;
  			World.fuel[pl->fs].conn_mask = 0;
  			World.fuel[pl->fs].last_change = frame_loops;
! 			Add_fuel(&(pl->fuel), REFUEL_RATE);
  		    } else {
  			Add_fuel(&(pl->fuel), World.fuel[pl->fs].fuel);
  			World.fuel[pl->fs].fuel = 0;
***************
*** 878,888 ****
  		int ct = pl->fuel.current;
  
  		do {
! 		    if (pl->fuel.tank[pl->fuel.current] > REFUEL_RATE/FPSMultiplier) {
! 			targ->damage += TARGET_FUEL_REPAIR_PER_FRAME/FPSMultiplier;
  			targ->conn_mask = 0;
  			targ->last_change = frame_loops;
! 			Add_fuel(&(pl->fuel), -REFUEL_RATE/FPSMultiplier);
  			if (targ->damage > TARGET_DAMAGE) {
  			    targ->damage = TARGET_DAMAGE;
  			    break;
--- 870,880 ----
  		int ct = pl->fuel.current;
  
  		do {
! 		    if (pl->fuel.tank[pl->fuel.current] > REFUEL_RATE) {
! 			targ->damage += TARGET_FUEL_REPAIR_PER_FRAME;
  			targ->conn_mask = 0;
  			targ->last_change = frame_loops;
! 			Add_fuel(&(pl->fuel), -REFUEL_RATE);
  			if (targ->damage > TARGET_DAMAGE) {
  			    targ->damage = TARGET_DAMAGE;
  			    break;
***************
*** 923,929 ****
  	    }
  	    pl->acc.x = power * tcos(pl->dir) / inert;
  	    pl->acc.y = power * tsin(pl->dir) / inert;
! 	    Add_fuel(&(pl->fuel), (long)(-f * FUEL_SCALE_FACT)/FPSMultiplier); /* Decrement fuel */
  	} else {
  	    pl->acc.x = pl->acc.y = 0.0;
  	}
--- 915,921 ----
  	    }
  	    pl->acc.x = power * tcos(pl->dir) / inert;
  	    pl->acc.y = power * tsin(pl->dir) / inert;
! 	    Add_fuel(&(pl->fuel), (long)(-f * FUEL_SCALE_FACT)); /* Decrement fuel */
  	} else {
  	    pl->acc.x = pl->acc.y = 0.0;
  	}
Only in ../xpilot-a/src/server: update.o
diff -c -r ../xpilot-a/src/server/walls.c ./src/server/walls.c
*** ../xpilot-a/src/server/walls.c	Sun May 16 01:15:04 1999
--- ./src/server/walls.c	Sat Sep  5 05:44:52 1998
***************
*** 990,997 ****
  		    Set_message(msg);
  		    break;
  		}
  		if (mi->obj->owner == -1) {
- 		    mi->obj->life = 0;
  		    return;
  		}
  		if (World.treasures[ms->treasure].team ==
--- 990,997 ----
  		    Set_message(msg);
  		    break;
  		}
+ 		mi->obj->life = 0;
  		if (mi->obj->owner == -1) {
  		    return;
  		}
  		if (World.treasures[ms->treasure].team ==
***************
*** 1000,1013 ****
  		     * Ball has been brought back to home treasure.
  		     * The team should be punished.
  		     */
- 		    sprintf(msg," < The ball was loose for %d frames >",
- 			    LONG_MAX - mi->obj->life);
- 		    Set_message(msg);
  		    if (Punish_team(GetInd[mi->obj->owner],
  				    mi->obj->treasure, ms->treasure))
  			CLR_BIT(mi->obj->status, RECREATE);
  		}
- 		mi->obj->life = 0;
  		return;
  	    }
  	}
--- 1000,1009 ----
***************
*** 1532,1538 ****
      int			killer = -1;
      player		*pl = NULL;
  
!     cannon->dead_time = CANNON_DEAD_TIME*FPSMultiplier;
      cannon->conn_mask = 0;
      World.block[cannon->blk_pos.x][cannon->blk_pos.y] = SPACE;
      Cannon_throw_items(ms->cannon);
--- 1528,1534 ----
      int			killer = -1;
      player		*pl = NULL;
  
!     cannon->dead_time = CANNON_DEAD_TIME;
      cannon->conn_mask = 0;
      World.block[cannon->blk_pos.x][cannon->blk_pos.y] = SPACE;
      Cannon_throw_items(ms->cannon);
***************
*** 1551,1557 ****
  	/* min,max debris */ 20, 40,
  	/* min,max dir    */ (int)(cannon->dir - (RES * 0.2)), (int)(cannon->dir + (RES * 0.2)),
  	/* min,max speed  */ 20, 50,
! 	/* min,max life   */ 8*FPSMultiplier, 68*FPSMultiplier
  	);
      Make_wreckage(
  	/* pos.x, pos.y   */ x, y,
--- 1547,1553 ----
  	/* min,max debris */ 20, 40,
  	/* min,max dir    */ (int)(cannon->dir - (RES * 0.2)), (int)(cannon->dir + (RES * 0.2)),
  	/* min,max speed  */ 20, 50,
! 	/* min,max life   */ 8, 68
  	);
      Make_wreckage(
  	/* pos.x, pos.y   */ x, y,
***************
*** 1565,1571 ****
  	/* max wreckage   */ 10,
  	/* min,max dir    */ (int)(cannon->dir - (RES * 0.2)), (int)(cannon->dir + (RES * 0.2)),
  	/* min,max speed  */ 10, 25,
! 	/* min,max life   */ 8*FPSMultiplier, 68*FPSMultiplier
  	);
  
      if (!ms->mip->pl) {
--- 1561,1567 ----
  	/* max wreckage   */ 10,
  	/* min,max dir    */ (int)(cannon->dir - (RES * 0.2)), (int)(cannon->dir + (RES * 0.2)),
  	/* min,max speed  */ 10, 25,
! 	/* min,max life   */ 8, 68
  	);
  
      if (!ms->mip->pl) {
***************
*** 1694,1700 ****
  	/* min,max debris */ 75, 150,
  	/* min,max dir    */ 0, RES-1,
  	/* min,max speed  */ 20, 70,
! 	/* min,max life   */ 10*FPSMultiplier, 100*FPSMultiplier
  	);
  
      if (BIT(World.rules->mode, TEAM_PLAY)) {
--- 1690,1696 ----
  	/* min,max debris */ 75, 150,
  	/* min,max dir    */ 0, RES-1,
  	/* min,max speed  */ 20, 70,
! 	/* min,max life   */ 10, 100
  	);
  
      if (BIT(World.rules->mode, TEAM_PLAY)) {
***************
*** 1856,1864 ****
      dist = walldist[obj->pos.bx][obj->pos.by];
      if (dist > 2) {
  	int max = ((dist - 2) * BLOCK_SZ) >> 1;
! 	if (sqr(max*FPSMultiplier) >= sqr(obj->vel.x) + sqr(obj->vel.y)) {
! 	    DFLOAT x = obj->pos.cx + FLOAT_TO_CLICK(obj->vel.x/FPSMultiplier);
! 	    DFLOAT y = obj->pos.cy + FLOAT_TO_CLICK(obj->vel.y/FPSMultiplier);
  	    x = WRAP_XCLICK(x);
  	    y = WRAP_YCLICK(y);
  	    Object_position_set_clicks(obj, (int)(x), (int)(y));
--- 1852,1860 ----
      dist = walldist[obj->pos.bx][obj->pos.by];
      if (dist > 2) {
  	int max = ((dist - 2) * BLOCK_SZ) >> 1;
! 	if (sqr(max) >= sqr(obj->vel.x) + sqr(obj->vel.y)) {
! 	    DFLOAT x = obj->pos.cx + FLOAT_TO_CLICK(obj->vel.x);
! 	    DFLOAT y = obj->pos.cy + FLOAT_TO_CLICK(obj->vel.y);
  	    x = WRAP_XCLICK(x);
  	    y = WRAP_YCLICK(y);
  	    Object_position_set_clicks(obj, (int)(x), (int)(y));
***************
*** 1884,1891 ****
      ms.pos.x = obj->pos.cx;
      ms.pos.y = obj->pos.cy;
      ms.vel = obj->vel;
!     ms.todo.x = FLOAT_TO_CLICK(ms.vel.x/FPSMultiplier);
!     ms.todo.y = FLOAT_TO_CLICK(ms.vel.y/FPSMultiplier);
      ms.dir = obj->dir;
      ms.mip = &mi;
  
--- 1880,1887 ----
      ms.pos.x = obj->pos.cx;
      ms.pos.y = obj->pos.cy;
      ms.vel = obj->vel;
!     ms.todo.x = FLOAT_TO_CLICK(ms.vel.x);
!     ms.todo.y = FLOAT_TO_CLICK(ms.vel.y);
      ms.dir = obj->dir;
      ms.mip = &mi;
  
***************
*** 1897,1906 ****
  		break;
  	    }
  	    if (ms.bounce && ms.bounce != BounceEdge) {
! 	        if (obj->type != OBJ_BALL)
! 		  obj->life = (long)(obj->life * objectWallBounceLifeFactor);
  		if (obj->life <= 0) {
! 		  break;
  		}
  		/*
  		 * Any bouncing sparks are no longer owner immune to give
--- 1893,1901 ----
  		break;
  	    }
  	    if (ms.bounce && ms.bounce != BounceEdge) {
! 		obj->life = (long)(obj->life * objectWallBounceLifeFactor);
  		if (obj->life <= 0) {
! 		    break;
  		}
  		/*
  		 * Any bouncing sparks are no longer owner immune to give
***************
*** 2178,2186 ****
      dist = walldist[pl->pos.bx][pl->pos.by];
      if (dist > 3) {
  	int max = ((dist - 3) * BLOCK_SZ) >> 1;
! 	if (max*FPSMultiplier >= pl->velocity) {
! 	    pos.x = pl->pos.cx + FLOAT_TO_CLICK(pl->vel.x/FPSMultiplier);
! 	    pos.y = pl->pos.cy + FLOAT_TO_CLICK(pl->vel.y/FPSMultiplier);
  	    pos.x = WRAP_XCLICK(pos.x);
  	    pos.y = WRAP_YCLICK(pos.y);
  	    Player_position_set_clicks(pl, pos.x, pos.y);
--- 2173,2181 ----
      dist = walldist[pl->pos.bx][pl->pos.by];
      if (dist > 3) {
  	int max = ((dist - 3) * BLOCK_SZ) >> 1;
! 	if (max >= pl->velocity) {
! 	    pos.x = pl->pos.cx + FLOAT_TO_CLICK(pl->vel.x);
! 	    pos.y = pl->pos.cy + FLOAT_TO_CLICK(pl->vel.y);
  	    pos.x = WRAP_XCLICK(pos.x);
  	    pos.y = WRAP_YCLICK(pos.y);
  	    Player_position_set_clicks(pl, pos.x, pos.y);
***************
*** 2201,2208 ****
      mi.phased = BIT(pl->used, OBJ_PHASING_DEVICE);
  
      vel = pl->vel;
!     todo.x = FLOAT_TO_CLICK(vel.x/FPSMultiplier);
!     todo.y = FLOAT_TO_CLICK(vel.y/FPSMultiplier);
      for (i = 0; i < pl->ship->num_points; i++) {
  	DFLOAT x = pl->ship->pts[i][pl->dir].x;
  	DFLOAT y = pl->ship->pts[i][pl->dir].y;
--- 2196,2203 ----
      mi.phased = BIT(pl->used, OBJ_PHASING_DEVICE);
  
      vel = pl->vel;
!     todo.x = FLOAT_TO_CLICK(vel.x);
!     todo.y = FLOAT_TO_CLICK(vel.y);
      for (i = 0; i < pl->ship->num_points; i++) {
  	DFLOAT x = pl->ship->pts[i][pl->dir].x;
  	DFLOAT y = pl->ship->pts[i][pl->dir].y;
***************
*** 2414,2420 ****
  			/* min,max debris */ intensity>>1, intensity,
  			/* min,max dir    */ wall_dir - (RES/4), wall_dir + (RES/4),
  			/* min,max speed  */ 20, 20 + (intensity>>2),
! 			/* min,max life   */ 10*FPSMultiplier, (10 + (intensity>>1))*FPSMultiplier
  			);
  		    sound_play_sensors(pl->pos.x, pl->pos.y,
  				       PLAYER_BOUNCED_SOUND);
--- 2409,2415 ----
  			/* min,max debris */ intensity>>1, intensity,
  			/* min,max dir    */ wall_dir - (RES/4), wall_dir + (RES/4),
  			/* min,max speed  */ 20, 20 + (intensity>>2),
! 			/* min,max life   */ 10, 10 + (intensity>>1)
  			);
  		    sound_play_sensors(pl->pos.x, pl->pos.y,
  				       PLAYER_BOUNCED_SOUND);
Only in ../xpilot-a/src/server: walls.o
Only in ../xpilot-a/src/server: xpilots
Only in ../xpilot-a: teamcup.map
