diff -ur xpilot-4.1.0.orig/src/common/keys.h xpilot-4.1.0/src/common/keys.h
--- xpilot-4.1.0.orig/src/common/keys.h	Thu Apr 16 19:40:42 1998
+++ xpilot-4.1.0/src/common/keys.h	Sun Mar 21 16:59:02 1999
@@ -121,6 +121,10 @@
     KEY_TOGGLE_MESSAGES,
     KEY_POINTER_CONTROL,
     KEY_TOGGLE_RECORD,
+/* START e92_ogu shipshape */
+    KEY_TOGGLE_SHOW_SHIP_SHAPES,
+    KEY_TOGGLE_SHOW_MY_SHIP_SHAPE,
+/* END e92_ogu */
     NUM_CLIENT_KEYS	/* The number of keys really used by the client. */
 #endif
 } keys_t;
diff -ur xpilot-4.1.0.orig/src/client/client.h xpilot-4.1.0/src/client/client.h
--- xpilot-4.1.0.orig/src/client/client.h	Wed Sep 16 20:35:40 1998
+++ xpilot-4.1.0/src/client/client.h	Sun Mar 21 16:49:19 1999
@@ -72,6 +72,17 @@
 #define SHOW_TEXTURED_BALLS	(1L << 25)
 #define SHOW_REVERSE_SCROLL	(1L << 26)
 
+/* START e92_ogu shipshape */
+#define SHOW_SHIP_SHAPES	(1L << 28)
+#define SHOW_MY_SHIP_SHAPE	(1L << 29)
+/* END e92_ogu */
+/* START e94_msu ekthhacks */
+#define USE_EKTHHACKS		(1L << 30)
+/* END e94_msu */
+/* START e92_ogu targetcounter */
+#define SHOW_COUNTER		(1L << 31)
+/* END e92_ogu */
+
 #define PACKET_LOSS		0
 #define PACKET_DROP		1
 #define PACKET_DRAW		2
diff -ur xpilot-4.1.0.orig/src/client/configure.c xpilot-4.1.0/src/client/configure.c
--- xpilot-4.1.0.orig/src/client/configure.c	Wed Sep 16 20:35:40 1998
+++ xpilot-4.1.0/src/client/configure.c	Sun Mar 21 16:49:19 1999
@@ -149,6 +149,17 @@
 static int Config_create_maxVolume(int widget_desc, int *height);
 #endif
 static int Config_create_showShipName(int widget_desc, int *height);
+
+/* START e92_ogu shipshape */
+static int Config_create_showShipShapes(int widget_desc, int *height);
+/* END e92_ogu */
+/* START e94_msu ekthhacks */
+static int Config_create_eKthHacks(int widget_desc, int *height);
+/* END e94_msu */
+/* START e92_ogu targettimer */
+static int Config_create_targetTimer(int widget_desc, int *height);
+/* END e92_ogu */
+
 static int Config_create_showMineName(int widget_desc, int *height);
 static int Config_create_fuelMeter(int widget_desc, int *height);
 static int Config_create_powerMeter(int widget_desc, int *height);
@@ -275,6 +286,15 @@
     Config_create_maxVolume,
 #endif
     Config_create_showShipName,
+/* START e92_ogu shipshape */
+    Config_create_showShipShapes,
+/* END e92_ogu */
+/* START e94_msu ekthhacks */
+    Config_create_eKthHacks,
+/* END e94_msu */
+/* START e92_ogu targettimer */
+    Config_create_targetTimer,
+/* END e92_ogu */
     Config_create_showMineName,
     Config_create_fuelMeter,
     Config_create_powerMeter,
@@ -984,6 +1004,39 @@
 			      (void *) SHOW_SHIP_NAME);
 }
 
+/* START e92_ogu shipshape */
+static int Config_create_showShipShapes(int widget_desc, int *height)
+{
+    return Config_create_bool(widget_desc, height, "showShipShapes",
+			      BIT(instruments, SHOW_SHIP_SHAPES)
+				  ? true : false,
+			      Config_update_instruments,
+			      (void *) SHOW_SHIP_SHAPES);
+}
+/* END e92_ogu */
+
+/* START e94_msu ekthhacks */
+static int Config_create_eKthHacks(int widget_desc, int *height)
+{
+    return Config_create_bool(widget_desc, height, "eKthHacks",
+			      BIT(instruments, USE_EKTHHACKS)
+				  ? true : false,
+			      Config_update_instruments,
+			      (void *) USE_EKTHHACKS);
+}
+/* END e94_msu */
+
+/* START e92_ogu targettimer */
+static int Config_create_targetTimer(int widget_desc, int *height)
+{
+    return Config_create_bool(widget_desc, height, "targetTimer",
+			      BIT(instruments, SHOW_COUNTER)
+				  ? true : false,
+			      Config_update_instruments,
+			      (void *) SHOW_COUNTER);
+}
+/* END e92_ogu */
+
 static int Config_create_showMineName(int widget_desc, int *height)
 {
     return Config_create_bool(widget_desc, height, "showMineName",
@@ -1451,6 +1504,16 @@
     Config_save_float(fp, "fuelWarning", (DFLOAT)fuelLevel2);
     Config_save_float(fp, "fuelCritical", (DFLOAT)fuelLevel1);
     Config_save_bool(fp, "showShipName", BIT(instruments, SHOW_SHIP_NAME));
+/* START e92_ogu shipshape */
+    Config_save_bool(fp, "showShipShapes", BIT(instruments, SHOW_SHIP_SHAPES));
+    Config_save_bool(fp, "showMyShape", BIT(instruments, SHOW_MY_SHIP_SHAPE));
+/* END e92_ogu */
+/* START e94_msu eKthHacks */
+    Config_save_bool(fp, "eKthHacks", BIT(instruments, USE_EKTHHACKS));
+/* END e94_msu */
+/* START e92_ogu targettimer */
+    Config_save_bool(fp, "targetTimer", BIT(instruments, SHOW_COUNTER));
+/* END e92_ogu */
     Config_save_bool(fp, "showMineName", BIT(instruments, SHOW_MINE_NAME));
     Config_save_bool(fp, "showMessages", BIT(instruments, SHOW_MESSAGES));
     Config_save_int(fp, "maxMessages", maxMessages);
diff -ur xpilot-4.1.0.orig/src/client/default.c xpilot-4.1.0/src/client/default.c
--- xpilot-4.1.0.orig/src/client/default.c	Tue Oct  6 16:52:19 1998
+++ xpilot-4.1.0/src/client/default.c	Sun Mar 21 16:49:19 1999
@@ -157,6 +157,15 @@
 	KEY_DUMMY,
 	"Set the nickname.\n"
     },
+/* START e92_ogu fakename */
+    {
+	"Address",
+	NULL,
+	"",
+	KEY_DUMMY,
+	"Set Address.\n"
+    },
+/* END e92_ogu */
     {
 	"join",
 	"Yes",
@@ -1021,6 +1030,40 @@
 	KEY_DUMMY,
 	"Specify a XPM format pixmap file to load the ball texture from.\n"
     },
+/* START e92_ogu shipshape */
+    {
+	"showShipShapes",
+	NULL,
+	"Yes",
+	KEY_DUMMY,
+	"Show ship shapes?.\n"
+    },
+    {
+	"showMyShape",
+	NULL,
+	"Yes",
+	KEY_DUMMY,
+	"Show my ship shape?.\n"
+    },
+/* END e92_ogu */
+/* START e94_msu eKthHacks */
+    {
+	"eKthHacks",
+	NULL,
+	"No",
+	KEY_DUMMY,
+	"Enable misc hacks from e.kth.se.\n"
+    },
+/* END e94_msu */
+/* START e92_ogu targettimer */
+    {
+	"targetTimer",
+	NULL,
+	"No",
+	KEY_DUMMY,
+	"Timer.\n"
+    },
+/* END e92_ogu */
     {
 	"targetRadarColor",
 	NULL,
@@ -2143,6 +2186,9 @@
 #else
 	char		resValue[MAX(2*MSG_LEN, PATH_MAX + 1)];
 #endif
+/* START e92_ogu fakename */
+	char fakeName[MAX_NAME_LEN+1];
+/* END e92_ogu */
     XrmDatabase		argDB = 0, rDB = 0;
 
     extern void		Record_init(char *filename);
@@ -2273,6 +2319,13 @@
 
     Get_bool_resource(rDB, "ignoreWindowManager", &ignoreWindowManager);
 
+/* START e92_ogu fakename */
+    Get_resource(rDB, "Address", fakeName, MAX_NAME_LEN);
+    if (fakeName[0]) {
+	strcpy(realName, fakeName);
+	printf("You are now known as %s\n", realName);
+    }
+/* END e92_ogu */
     Get_resource(rDB, "name", nickName, MAX_NAME_LEN);
     if (!nickName[0]) {
 	strcpy(nickName, realName);
@@ -2437,6 +2490,16 @@
 
     instruments = 0;
     Get_bit_resource(rDB, "showShipName", &instruments, SHOW_SHIP_NAME);
+/* START e92_ogu shipshape */
+    Get_bit_resource(rDB, "showShipShapes", &instruments, SHOW_SHIP_SHAPES);
+    Get_bit_resource(rDB, "showMyShape", &instruments, SHOW_MY_SHIP_SHAPE);
+/* END e92_ogu */
+/* START e94_msu eKthHacks */
+    Get_bit_resource(rDB, "eKthHacks", &instruments, USE_EKTHHACKS);
+/* END e94_msu */
+/* START e92_ogu targettimer */
+    Get_bit_resource(rDB, "targetTimer", &instruments, SHOW_COUNTER);
+/* END e92_ogu */
     Get_bit_resource(rDB, "showMineName", &instruments, SHOW_MINE_NAME);
     Get_bit_resource(rDB, "showMessages", &instruments, SHOW_MESSAGES);
     Get_bit_resource(rDB, "showHUD", &instruments, SHOW_HUD_INSTRUMENTS);
diff -ur xpilot-4.1.0.orig/src/client/paint.c xpilot-4.1.0/src/client/paint.c
--- xpilot-4.1.0.orig/src/client/paint.c	Fri Sep  4 09:03:36 1998
+++ xpilot-4.1.0/src/client/paint.c	Sun Mar 21 16:49:19 1999
@@ -498,11 +498,25 @@
 	|| other->mychar == 'P'
 	|| other->mychar == 'W')
 	&& !mono) {
+/* START e94_msu eKthHacks */
+	if (BIT(instruments, USE_EKTHHACKS) && other->id == self->id)
+	    XSetForeground(dpy, scoreListGC, colors[5].pixel);
+	else
+/* END e94_msu */
 	XSetForeground(dpy, scoreListGC, colors[BLACK].pixel);
 	XDrawString(dpy, players, scoreListGC,
 		    BORDER, thisLine,
 		    label, strlen(label));
     } else {
+/* START e94_msu eKthHacks */
+	    if (!mono && BIT(instruments, USE_EKTHHACKS) && other->id == self->id)
+		    ShadowDrawString(dpy, players, scoreListGC,
+				     BORDER, thisLine,
+				     label,
+				     colors[7].pixel,
+				     colors[BLACK].pixel);
+	    else
+/* END e94_msu */
 	ShadowDrawString(dpy, players, scoreListGC,
 			 BORDER, thisLine,
 			 label,
diff -ur xpilot-4.1.0.orig/src/client/painthud.c xpilot-4.1.0/src/client/painthud.c
--- xpilot-4.1.0.orig/src/client/painthud.c	Wed Sep 16 20:35:41 1998
+++ xpilot-4.1.0/src/client/painthud.c	Sun Mar 21 16:49:19 1999
@@ -70,6 +70,17 @@
 extern int		score_object;
 extern XGCValues	gcv;
 
+/* START e92_ogu targettimer */
+int target_dead_time[4] = {-1, -1, -1, -1};
+/* END e92_ogu */
+/* START e94_msu eKthHacks (killratio) */
+static int kills = 0;
+static int first_time = 1;
+static int have_last_death = 0;
+static int my_deaths = 0;
+static int oldlives = -1;
+static int totalkills = 0, totaldeaths = 0;
+/* END e94_msu */
 int	hudColor;		/* Color index for HUD drawing */
 int	hudLockColor;		/* Color index for lock on HUD drawing */
 DFLOAT	charsPerTick = 0.0;	/* Output speed of messages */
@@ -339,6 +350,14 @@
 
     int modlen = 0;
 
+/* START e92_ogu targettimer */
+    int target_gone[4] = {0, 0, 0, 0};
+    static char target_left[4][12] = {"", "", "", ""};
+/* END e92_ogu */
+/* START e94_msu eKthHacks (killratio) */
+    int index, xi, yi, dead_time, damage;
+/* END e94_msu */
+
     /*
      * Show speed pointer
      */
@@ -527,6 +546,26 @@
     /* Update the lock display */
     Paint_lock(hud_pos_x, hud_pos_y);
 
+/* START e92_ogu targettimer */
+    if (BIT(instruments, SHOW_COUNTER)) {
+	    for (index=0; index<4; index++) {
+		    if (Target_by_index(index, &xi, &yi, &dead_time, &damage) != -1) {
+			    if (dead_time > 0) {
+				    target_gone[index] = 1;
+				    if (target_dead_time[index] == -1)
+					    target_dead_time[index] = dead_time;
+				    target_dead_time[index] =
+					    target_dead_time[index] - 1;
+				    if (target_dead_time[index]<5)
+					    target_dead_time[index] = -1;
+			    }
+			    else {
+				    target_dead_time[index] = -1;
+			    }
+		    }
+	    }
+    }
+/* END e92_ogu */    
     /* Draw last score on hud if it is an message attached to it */
     for (i=0, j=0; i < MAX_SCORE_OBJECTS; i++) {
 	score_object_t*	sobj
@@ -578,6 +617,33 @@
 			XTextWidth(gameFont, mods, modlen) + 1,
 		    gameFont->ascent + gameFont->descent);
 
+/* START e92_ogu targettimer */
+    if (BIT(instruments, SHOW_COUNTER)) {
+	    for (index=0; index<4; index++) {
+		    if (target_gone[index]) {
+			    if (target_dead_time[index] % 10 == 0) {
+				    sprintf(target_left[index], "%3d", target_dead_time[index] / 10);
+			    }
+			    XSetForeground(dpy, messageGC, colors[index+1].pixel);
+			    rd.drawString(dpy, p_draw, messageGC,
+					  hud_pos_x - XTextWidth(gameFont, target_left[index],
+								 sizeof(target_left[index])-1)/2,
+					  hud_pos_y - HUD_SIZE+HUD_OFFSET - BORDER
+					  - gameFont->descent * 2 - gameFont->ascent - 20 - 20*index,
+					  target_left[index], sizeof(target_left[index])-1);
+			    
+			    Erase_rectangle(hud_pos_x - XTextWidth(gameFont, target_left[index],
+								   sizeof(target_left[index])-1)/2,
+					    hud_pos_y - HUD_SIZE+HUD_OFFSET - BORDER
+					    - gameFont->descent * 2 - gameFont->ascent * 2,
+					    XTextWidth(gameFont, target_left[index],
+						       sizeof(target_left[index])-1) + 2,
+					    gameFont->ascent + gameFont->descent);
+		    }
+	    }
+    }
+    XSetForeground(dpy, gc, colors[BLUE].pixel);
+/* END e92_ogu */
     if (autopilotLight) {
 	int text_width = XTextWidth(gameFont, autopilot, sizeof(autopilot)-1);
 	rd.drawString(dpy, p_draw, gc,
@@ -710,6 +776,118 @@
     } else {
 	msg_set = GameMsg;
     }
+
+/* START e94_msu eKthHacks (killratio) */
+    if (BIT(instruments, USE_EKTHHACKS)) {
+	    char grunka[MAX_CHARS] = "";
+	    char slask[128] = "";
+	    char slask2[128] = "";
+	    char slask3[128] = "";
+	    char slask4[128] = "";
+	    char slask5[128] = "";
+	    char slask6[128] = "";
+	    char slask7[128] = "";
+	    char slask8[128] = "";
+
+	    strcpy(grunka, self->name);
+	    
+	    strcpy(slask2, " was killed ");
+	    strcpy(slask3, "from ");
+	    
+	    strcpy(slask4, "roasted alive by ");
+	    strcpy(slask5, " ran over");
+	    strcpy(slask6, "by ");
+	    strcpy(slask7, " blew up");
+	    strcpy(slask8, "'s tank ran over");
+	    
+	    strcat(slask3, grunka);
+	    strcat(slask4, grunka);
+	    
+	    strcpy(slask, grunka);
+	    strcat(slask, slask5);
+	    strcpy(slask5, slask);
+	    
+	    strcat(slask6, grunka);
+	    
+	    strcpy(slask, grunka);
+	    strcat(slask, slask7);
+	    strcpy(slask7, slask);
+	    
+	    strcpy(slask, grunka);
+	    strcat(slask, slask8);
+	    strcpy(slask8, slask);
+	    
+	    if (((strstr(message, slask2) != 0) &&
+		 (strstr(message, slask3) != 0) &&
+		 (strstr(message, "How strange") == 0))
+		|| (strstr(message, slask4) != 0)
+		|| (strstr(message, slask5) != 0)
+		|| ((strstr(message, slask2) != 0) &&
+		    (strstr(message, slask6) != 0) &&
+		    (strstr(message, "How strange") == 0))
+		|| (strstr(message, slask7) != 0)
+		|| (strstr(message, slask8) != 0)) {
+		    
+		    kills++;
+		    totalkills++;
+	    }
+	    
+#if 1
+	    strcpy(slask8, grunka);
+	    strcat(slask8, slask2);
+	    strcpy(slask7, grunka);
+	    strcat(slask7, " smashed");
+	    strcpy(slask6, grunka);
+	    strcat(slask6, " and");
+	    strcpy(slask4, "and ");
+	    strcat(slask5, grunka);
+	    strcpy(slask4, "ran over ");
+	    strcat(slask4, grunka);
+
+	    if (strstr(message, slask8) ||
+		strstr(message, slask7) ||
+		strstr(message, slask6) ||
+		strstr(message, slask5) ||
+		strstr(message, slask4)) {
+		    my_deaths++;
+		    totaldeaths++;
+	    }
+#else	    
+	    if ((first_time) && (self != NULL)) {
+		    oldlives = self->life;
+		    first_time = 0;
+		    printf("FIRST TIME\n");
+	    }
+	    if (self != NULL) {
+		    if (oldlives > self->life) {
+			    my_deaths++;
+			    totaldeaths++;
+			    printf("INCR - ");
+		    }
+		    oldlives = self->life;
+		    printf("SELF != NULL\n");
+	    } else {
+		    if (!have_last_death) {
+			    my_deaths++;
+			    totaldeaths++;
+			    have_last_death = 1;
+			    printf("!LAST_DEATH -");
+		    }
+		    printf("NULL == SELF\n");
+	    }
+#endif
+
+	    if (strstr(message, "Deadl")) {
+		    sprintf(slask, "Kill ratio - Round: %d/%d, Total: %d/%d", 
+			    kills, my_deaths, totalkills, totaldeaths);
+		    Add_message(slask);
+		    kills = 0;
+		    my_deaths = 0;
+		    first_time = 1;
+		    have_last_death = 0;
+	    }
+    }
+/* END e94_msu */
     tmp = msg_set[maxMessages - 1];
     for (i = maxMessages - 1; i > 0; i--) {
 	msg_set[i] = msg_set[i - 1];
diff -ur xpilot-4.1.0.orig/src/client/paintobjects.c xpilot-4.1.0/src/client/paintobjects.c
--- xpilot-4.1.0.orig/src/client/paintobjects.c	Wed Sep 16 20:35:41 1998
+++ xpilot-4.1.0/src/client/paintobjects.c	Sun Mar 21 16:49:19 1999
@@ -147,11 +147,41 @@
     points[2].x = x + SIZE;
     points[2].y = y - SIZE;
     points[3] = points[0];
+/* START e92_ogu itemcolors */
+    switch (type) {
+    case 1:
+    case 4:
+    case 9:
+    case 11:
+    case 15:
+	    SET_FG(colors[WHITE].pixel);
+	    break;
+    default:
+/* END e92_ogu */
     SET_FG(colors[BLUE].pixel);
+/* START e92_ogu itemcolors */
+	    break;
+    }
+/* END e92_ogu */
     rd.drawLines(dpy, d, mygc, points, 4, CoordModeOrigin);
 #endif
 
+/* START e92_ogu itemcolors */
+    switch (type) {
+    case 1:
+    case 4:
+    case 9:
+    case 11:
+    case 15:
+	    SET_FG(colors[WHITE].pixel);
+	    break;
+    default:
+/* END e92_ogu */
     SET_FG(colors[RED].pixel);
+/* START e92_ogu itemcolors */
+	    break;
+    }
+/* END e92_ogu */
 #if 0
     str[0] = itemtype_ptr[i].type + '0';
     str[1] = '\0';
@@ -660,6 +690,30 @@
 
 	    dir = ship_ptr[i].dir;
 	    ship = Ship_by_id(ship_ptr[i].id);
+/* START e92_ogu shipshapes */
+	    if ((!BIT(instruments, SHOW_SHIP_SHAPES)) &&
+		(self != NULL) &&
+		(self->id != ship_ptr[i].id)) {
+		    if (ship_ptr[i].shield) {
+			    ship = Default_ship();
+			    ship->shield_radius = 34;
+		    }
+		    else {
+			    ship = Default_ship();
+		    }
+	    }
+	    if ((!BIT(instruments, SHOW_MY_SHIP_SHAPE)) &&
+		(self != NULL) &&
+		(self->id == ship_ptr[i].id)) {
+		    if (ship_ptr[i].shield) {
+			    ship = Default_ship();
+			    ship->shield_radius = 34;
+		    }
+		    else {
+			    ship = Default_ship();
+		    }
+	    }
+/* END e92_ogu */
 	    for (cnt = 0; cnt < ship->num_points; cnt++) {
 		points[cnt].x = WINSCALE(X(x + ship->pts[cnt][dir].x));
 		points[cnt].y = WINSCALE(Y(y + ship->pts[cnt][dir].y));
diff -ur xpilot-4.1.0.orig/src/client/xevent.c xpilot-4.1.0/src/client/xevent.c
--- xpilot-4.1.0.orig/src/client/xevent.c	Tue Oct  6 16:52:19 1998
+++ xpilot-4.1.0/src/client/xevent.c	Sun Mar 21 16:49:19 1999
@@ -359,6 +359,14 @@
     case KEY_TOGGLE_RECORD:
 	Record_toggle();
 	return false;	/* server doesn't need to know */
+/* START e92_ogu shipshape */
+    case KEY_TOGGLE_SHOW_SHIP_SHAPES:
+	TOGGLE_BIT(instruments, SHOW_SHIP_SHAPES);
+	return false;	/* server doesn't need to know */
+    case KEY_TOGGLE_SHOW_MY_SHIP_SHAPE:
+	TOGGLE_BIT(instruments, SHOW_MY_SHIP_SHAPE);
+	return false;	/* server doesn't need to know */
+/* END e92_ogu */
     case KEY_SELECT_ITEM:
     case KEY_LOSE_ITEM:
 	if (version < 0x3400) {
@@ -392,6 +400,10 @@
     case KEY_TALK:
     case KEY_TOGGLE_OWNED_ITEMS:
     case KEY_TOGGLE_MESSAGES:
+/* START e92_ogu shipshape */
+    case KEY_TOGGLE_SHOW_SHIP_SHAPES:
+    case KEY_TOGGLE_SHOW_MY_SHIP_SHAPE:
+/* END e92_ogu */
 	return false;	/* server doesn't need to know */
 
     /* Don auto-shield hack */
diff -ur xpilot-4.1.0.orig/src/client/xpilot.c xpilot-4.1.0/src/client/xpilot.c
--- xpilot-4.1.0.orig/src/client/xpilot.c	Thu Apr 16 19:39:56 1998
+++ xpilot-4.1.0/src/client/xpilot.c	Sun Mar 21 16:51:27 1999
@@ -985,6 +985,15 @@
 	xpprintf("to \"%s\"\n", nick_name);
     }
 
+/* START e92_ogu alfaslang */
+    {
+	    char *alfa_slang;
+	    if ((alfa_slang=strchr(real_name, '@'))!=NULL) {
+		    strcpy(hostname, alfa_slang+1);
+		    *alfa_slang = '\0';
+	    }
+    }
+/* END e92_ogu */
     if (list_servers) {
 	auto_connect = true;
     }
