DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T p

⟦d3c2ff5a4⟧ TextFile

    Length: 50457 (0xc519)
    Types: TextFile
    Names: »patches01a«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Gb/patches01a« 

TextFile

*** ../../GB/races.h	Wed Apr 26 11:22:21 1989
--- races.h	Mon May  1 08:21:32 1989
***************
*** 17,22 ****
--- 17,24 ----
      char deflevel,defsystem,defplanetnum;	/* current default */
      int Playernum;
      char name[RNAMESIZE];
+     float likes[DES_ICE];		/* what territories they like */
+     char likesbest;
      percent translate[MAXPLAYERS];	/* translation mod for ea player */
      char atwar[howmanybytes(MAXPLAYERS)];	/* war */
      char allied[howmanybytes(MAXPLAYERS)];	/* allies */
*** ../../GB/tweakables.h	Wed Apr 26 11:22:24 1989
--- tweakables.h	Mon May  1 08:21:34 1989
***************
*** 5,22 ****
   *	the functions using them are not recompiled so be careful.
   */
  
- /*#define UNIX_VERSION4.3  /* otherwise assumes 4.2 */
- 
  #define VERS ".8"		/* game version */
  
  #define UPDATE_TIME 3		/* 3 hour  update time */
- #define PAGER "/usr/ucb/zcat"
  
  
- #include "files.h"
- 
- 
- 
  #define LOGIN_NAME_SIZE 13
  
  #define NUM_TIMES_TO_WAIT_FOR_LOCK 20
--- 5,15 ----
***************
*** 42,60 ****
  #define OTHER 	  9
  #define TOXIC	 10
  
- #define CHAR_OWNED_LAND 	'x' 
  #define CHAR_OWNED_THING 	'@' 
! #define CHAR_UNOWNED_LAND 	'-'
  #define CHAR_SEA 		'.'
! #define CHAR_OWNED_SEA 		','
  #define CHAR_MOUNT 		'^'
- #define CHAR_OWNED_MOUNT 	'X'
  #define CHAR_DIFFOWNED 		'?'
  #define CHAR_PLATED 		'|'
  #define CHAR_WASTELAND 		'%'
! #define CHAR_OWNED_WASTELAND 	'#'
  #define CHAR_GAS 		'~'
  #define CHAR_CLOAKED 		' '
  
  #define NAMESIZE 15
  #define RNAMESIZE 25
--- 35,56 ----
  #define OTHER 	  9
  #define TOXIC	 10
  
  #define CHAR_OWNED_THING 	'@' 
! #define CHAR_LAND 		'-'
! #define CHAR_OWNED_LAND 	'x' 
  #define CHAR_SEA 		'.'
! #define CHAR_OWNED_SEA 		'x'
  #define CHAR_MOUNT 		'^'
  #define CHAR_DIFFOWNED 		'?'
  #define CHAR_PLATED 		'|'
  #define CHAR_WASTELAND 		'%'
! #define CHAR_OWNED_WASTELAND 	'!'
  #define CHAR_GAS 		'~'
+ #define CHAR_OWNED_GAS 		'x'
  #define CHAR_CLOAKED 		' '
+ #define CHAR_ICE		'#'
+ #define CHAR_OWNED_ICE		'x'
+ #define CHAR_OWNED_MOUNT 	'X'
  
  #define NAMESIZE 15
  #define RNAMESIZE 25
***************
*** 115,121 ****
  #define CREAT_UNIV_ITERAT 10
  #define MAP_ISLANDS 10		/* # of beginning islands for makeuniv */
  #define MAP_MOUNT_PERCENT 0.22	/* percentage of mountain areas */
! #define MAP_GASGIANT_BANDMIN 30  /* min size gasgiants that have bands */
  #define LANDPERCENTAGE 0.45
  
  #define GRAV_FACTOR 0.0025	/* not sure as to what this should be*/
--- 111,117 ----
  #define CREAT_UNIV_ITERAT 10
  #define MAP_ISLANDS 10		/* # of beginning islands for makeuniv */
  #define MAP_MOUNT_PERCENT 0.22	/* percentage of mountain areas */
! #define MAP_GASGIANT_BANDMIN 20  /* min size gasgiants that have bands */
  #define LANDPERCENTAGE 0.45
  
  #define GRAV_FACTOR 0.0025	/* not sure as to what this should be*/
***************
*** 142,154 ****
  #define SYSTEMGRAVCONST 	0.05
  
  
! #define DIST_TO_LAND 5	/* moveship -- distance ship has to be to land */
! #define DIST_TO_BURN 50	/* distance from sun needed to destroy ship */
  
  
! #define FACTOR_DAMAGE 		28.0
! #define FACTOR_DESTPLANET 	0.002
! #define FACTOR_DAMAGE_DISTANCE 	4.00
  
  	/* various compiler options that may save cpu time/disk space */
  #define SHELL_DOTURN 1			/* put doturn() in shell */
--- 138,150 ----
  #define SYSTEMGRAVCONST 	0.05
  
  
! #define DIST_TO_LAND 5.0 /* moveship -- distance ship has to be to land */
! /*#define DIST_TO_BURN 50	 /* distance from sun needed to destroy ship */
  
  
! #define FACTOR_DAMAGE 		388.0
! #define FACTOR_DESTPLANET 	1.004
! #define FACTOR_DAMAGE_DISTANCE 	1.00
  
  	/* various compiler options that may save cpu time/disk space */
  #define SHELL_DOTURN 1			/* put doturn() in shell */
***************
*** 169,176 ****
--- 165,176 ----
   /* sign,abs val of number */
  #define sgn(x) ( ((x)>=0) ? (1) : (-1))
  #define abs(x) ( ( (x)<0) ? -(x) : (x) )
+ #define MIN(x,y) ( ((x)>(y)) ? (y) : (x) )
+ #define MAX(x,y) ( ((x)<(y)) ? (y) : (x) )
   /* positive modulus */
  #define mod(a,b,dum) ((dum)=(a)%(b),abs(dum))
+  /* swap two variables */
+ #define	swap(a, b)  ((a) ^= (b), (b) ^= (a), (a) ^= (b))
   /* euclidean distance */
  #define Distsq(x1,y1,x2,y2) ( ((x1)-(x2))*((x1)-(x2)) + \
  		((y1)-(y2))*((y1)-(y2)) )
***************
*** 179,208 ****
  #define Sector(pl,x,y) (Smap[(x) + (y)*(pl).Maxx])
  /* adjust temperature to displayed */
  #define Temp(x) (((int)x)*25)
- /* tty stuff */
- #ifdef UV_4.3
- #   define tty_on() cbreak()
- #   define tty_off() nocbreak()
- #else			/* this is 4.2 */
- #   define tty_on() crmode()
- #   define tty_off() nocrmode()
- #endif
  
   /* number of AP's to add to each player in ea. system */
   /*   (look in doturn)  */
  #define LIMIT_APs 50	/* max # of APs you can have */
  
! #define MIN(x,y) ( ((x)>(y)) ? (y) : (x) )
! #define MAX(x,y) ( ((x)<(y)) ? (y) : (x) )
! #define TYPE_EARTH 0
! #define TYPE_ASTEROID 1
! #define TYPE_AIRLESS 2
! #define TYPE_GASGIANT 3
  
! #define DES_SEA 0
! #define DES_LAND 1
! #define DES_MOUNT 2
! #define DES_GAS 3
! #define DES_PLATED 4
! #define MAX_SECT_POPN 9999
  
--- 179,199 ----
  #define Sector(pl,x,y) (Smap[(x) + (y)*(pl).Maxx])
  /* adjust temperature to displayed */
  #define Temp(x) (((int)x)*25)
  
   /* number of AP's to add to each player in ea. system */
   /*   (look in doturn)  */
  #define LIMIT_APs 50	/* max # of APs you can have */
  
! #define TYPE_EARTH 	0
! #define TYPE_ASTEROID 	1
! #define TYPE_AIRLESS 	2
! #define TYPE_GASGIANT 	3
  
! #define DES_SEA 	0
! #define DES_LAND 	1
! #define DES_MOUNT 	2
! #define DES_GAS 	3
! #define DES_ICE		4
! #define DES_PLATED 	5
  
+ #define MAX_SECT_POPN 9999
*** ../../GB/vars.h	Wed Apr 26 11:22:25 1989
--- vars.h	Mon May  1 08:21:35 1989
***************
*** 14,19 ****
--- 14,20 ----
  #define Bzero(x)  bzero( (char *)&(x), sizeof(x) )
  #define Malloc(x) (x *)malloc( sizeof(x) )
  
+ #include "files.h"
  #include "tweakables.h"
  #include <sys/types.h>
  #include <sys/file.h>
*** ../../GB/cs.c	Wed Apr 26 11:22:30 1989
--- cs.c	Mon May  1 08:21:39 1989
***************
*** 113,118 ****
--- 113,119 ----
    Dir.snum = where.snum;
    Dir.pnum = where.pnum;
    Dir.shipno = where.shipno;
+   printf(" csing to st %d, pl %d\n",where.snum,where.pnum);
  
     /* fix prompt */
        switch (Dir.level) {
*** ../../GB/daemon.c	Wed Apr 26 11:22:31 1989
--- daemon.c	Mon May  1 08:21:40 1989
***************
*** 4,9 ****
--- 4,10 ----
   */
  
  #include "tweakables.h"
+ #include "files.h"
  #include <stdio.h>
  #include <signal.h>
  #include <time.h>
*** ../../GB/doplanet.c	Wed Apr 26 11:22:33 1989
--- doplanet.c	Mon May  1 08:21:43 1989
***************
*** 269,275 ****
  	 /* start a meso colony */
  	x = int_rand(0,planet->Maxx-1);
  	y = int_rand(0,planet->Maxy-1);
! 	Sector(*planet,x,y).des = DES_LAND;	/* cheating. so what. */
  	Sector(*planet,x,y).popn = 1;
  	Sector(*planet,x,y).owner = Stinfo[starnum][planetnum].Thing_add;
  }
--- 269,276 ----
  	 /* start a meso colony */
  	x = int_rand(0,planet->Maxx-1);
  	y = int_rand(0,planet->Maxy-1);
! 	Sector(*planet,x,y).des = 
! 			races[Stinfo[starnum][planetnum].Thing_add]->likesbest;
  	Sector(*planet,x,y).popn = 1;
  	Sector(*planet,x,y).owner = Stinfo[starnum][planetnum].Thing_add;
  }
***************
*** 330,336 ****
  					(!(p-1)->is_wasted || !(p+1)->is_wasted)
  					&& !random()%5)
  					p->is_wasted = 0;
! 	      		} else if (p->des==DES_LAND || p->des==DES_MOUNT) {
  				if ( y>1 && y<planet->Maxy-2 && 
  				   ((p-1)->popn || (p+1)->popn)
  				   && !random()%10)
--- 331,337 ----
  					(!(p-1)->is_wasted || !(p+1)->is_wasted)
  					&& !random()%5)
  					p->is_wasted = 0;
! 	      		} else if (p->des==DES_LAND || p->des==DES_MOUNT || p->des==DES_ICE) {
  				if ( y>1 && y<planet->Maxy-2 && 
  				   ((p-1)->popn || (p+1)->popn)
  				   && !random()%10)
***************
*** 340,348 ****
         }
  
  	 /* evaporate the oceans on novae */
!      if (Stars[starnum]->nova_stage && p->des==DES_SEA)
  
! 	if ( (x>0 && (p-1)->des==DES_LAND) ||
  	     (x<planet->Maxx-1 && (p+1)->des==DES_LAND) || 
  	     (y>0 && (p-planet->Maxx)->des==DES_LAND) ||
  	     (y<planet->Maxy-1 && (p+planet->Maxx)->des==DES_LAND ) ) {
--- 341,352 ----
         }
  
  	 /* evaporate the oceans on novae */
!      if (Stars[starnum]->nova_stage)
!        if (p->des==DES_ICE)
! 	   p->des = DES_LAND;
!        else if (p->des==DES_SEA)
  
! 	  if ( (x>0 && (p-1)->des==DES_LAND) ||
  	     (x<planet->Maxx-1 && (p+1)->des==DES_LAND) || 
  	     (y>0 && (p-planet->Maxx)->des==DES_LAND) ||
  	     (y<planet->Maxy-1 && (p+planet->Maxx)->des==DES_LAND ) ) {
***************
*** 366,374 ****
  		 /* sectors have been modified for this player*/
  		 /* & planet is compatible enough */
  	     if (planet->info[i-1].numsectsowned && Compat[i] > 40.0)
! 	       while (!Claims && !allexp && --timer) {
  		 printf("exploring ... timer=%d\n",timer);
- 		/*printf("exploring player %d\n",i);*/
  		o = 1;
  		Getxysect(planet, &x, &y, 1);
  		while (!Claims && Getxysect(planet, &x, &y, 0)) {
--- 370,377 ----
  		 /* sectors have been modified for this player*/
  		 /* & planet is compatible enough */
  	     if (planet->info[i-1].numsectsowned && Compat[i] > 40.0)
! 	      while (!Claims && !allexp && --timer) {
  		 printf("exploring ... timer=%d\n",timer);
  		o = 1;
  		Getxysect(planet, &x, &y, 1);
  		while (!Claims && Getxysect(planet, &x, &y, 0)) {
***************
*** 375,383 ****
  			  /* find out if all sectors have been explored */
  			o &= Sectinfo[x][y].explored[i];
  			p = &Sector(*planet,x,y);
! 			if (!p->owner && !p->is_wasted && p->des==DES_LAND && Sectinfo[x][y].explored[i]) {
! 				 /* (water) explorations have found an island */
! 				printf("found an island @ %d,%d\n",x,y);
  				Claims = i;
  				 /* give them some free people there */
  				p->popn = races[i]->number_sexes;
--- 378,386 ----
  			  /* find out if all sectors have been explored */
  			o &= Sectinfo[x][y].explored[i];
  			p = &Sector(*planet,x,y);
! 			if (!p->owner && !p->is_wasted && p->des==races[i]->likesbest && Sectinfo[x][y].explored[i]) {
! 				 /*  explorations have found an island */
! 				printf("found island @ %d,%d\n",x,y);
  				Claims = i;
  				 /* give them some free people there */
  				p->popn = races[i]->number_sexes;
***************
*** 410,417 ****
  	  teleg_add("resource prod.  fuel prod.  weapons prod. mob.pt prod.\n",telegram_buf);
  	  sprintf(buf,"%12d%12d%15d%13d\n", tot_res, tot_fuel, tot_destruct,tot_mob);
  	  teleg_add(buf,telegram_buf);
! 	  sprintf(buf,"resource deposit depletion: %d\n", tot_resdep);
! 	  teleg_add(buf,telegram_buf);
  	  teleg_add("total births  (%%)    growth of max popn support  (%%)\n",telegram_buf);
  	  sprintf(buf,"%9d      (%.2f%%)%23d   (%.2f%%)\n", 
  		    planet->popn - oldplanetpopn, 
--- 413,422 ----
  	  teleg_add("resource prod.  fuel prod.  weapons prod. mob.pt prod.\n",telegram_buf);
  	  sprintf(buf,"%12d%12d%15d%13d\n", tot_res, tot_fuel, tot_destruct,tot_mob);
  	  teleg_add(buf,telegram_buf);
! 	  if (tot_resdep) {
! 		  sprintf(buf,"resource deposit depletion: %d\n", tot_resdep);
! 		  teleg_add(buf,telegram_buf);
! 	  }
  	  teleg_add("total births  (%%)    growth of max popn support  (%%)\n",telegram_buf);
  	  sprintf(buf,"%9d      (%.2f%%)%23d   (%.2f%%)\n", 
  		    planet->popn - oldplanetpopn, 
***************
*** 467,474 ****
  			    sgn(avg_mob[i] - planet->info[i-1].comread);
   	}
     }
!    planet->conditions[TOXIC] = (planet->conditions[TOXIC]*50 + 
! 		     100.0 * planet->popn / planet->maxpopn) / 51.0;
  
   }
   return allmod;
--- 472,479 ----
  			    sgn(avg_mob[i] - planet->info[i-1].comread);
   	}
     }
!    planet->conditions[TOXIC] = (planet->conditions[TOXIC]*30 + 
! 		     100.0 * planet->popn / planet->maxpopn) / 31.0;
  
   }
   return allmod;
*** ../../GB/dosector.c	Wed Apr 26 11:22:34 1989
--- dosector.c	Mon May  1 08:21:44 1989
***************
*** 63,69 ****
  	   if (!s->eff) {
  		tot_eff += s->eff = 1;
  	   } else {
! 	     tot_eff += eff = round_rand(races[s->owner]->metabolism*s->popn*(0.95-logscale(s->eff))*EFF_PROD);
  		if (s->eff+eff >= 100) {
  			s->eff=100;	/* dont go past 100%*/
  			tot_eff -= s->eff+eff-100;
--- 63,70 ----
  	   if (!s->eff) {
  		tot_eff += s->eff = 1;
  	   } else {
! 	     /*tot_eff += eff = round_rand(races[s->owner]->metabolism*s->popn*(0.95-logscale(s->eff))*EFF_PROD);*/
! 	     tot_eff += eff = round_rand(races[s->owner]->metabolism*s->popn*EFF_PROD/100.0);
  		if (s->eff+eff >= 100) {
  			s->eff=100;	/* dont go past 100%*/
  			tot_eff -= s->eff+eff-100;
***************
*** 106,114 ****
  reg int peep;
  
     /* peep == number of people who want to move */
- /*printf("spreading from %d,%d -- ",x,y);*/
  if (peep = round_rand((float)s->popn * races[s->owner]->nonhomebodies) ) {
- 	/*printf(" peeple=%d\n",peep);*/
  
  #if NO_SLIDING_SCALE_AUTOMOVE
   if (pl->popn < POPN_MOVE_SCALE_1) {
--- 107,113 ----
***************
*** 151,166 ****
  	xd=planet->Maxx-1;
   else if (xd>=planet->Maxx) 
  	xd=0;
  	/* check for planetary compatibility */
!  if (float_rand()*100.0 > Compat[ps->owner]) {
! 	/*printf("%d,%d incomp -- returning\n",xd,yd);*/
  	return;
   }
  
!  pd = &Smap[yd*planet->Maxx+xd];
  
-  if ((ps->owner==pd->owner) || (pd->des!=DES_SEA && !pd->is_wasted)) {
- 
   	if (!pd->owner) {
  		printf("claiming %d,%d (%d), %d people\n",xd,yd,ps->owner,people);
          	pd->popn += people;
--- 150,166 ----
  	xd=planet->Maxx-1;
   else if (xd>=planet->Maxx) 
  	xd=0;
+ 
+  pd = &Sector(*planet,xd,yd);
+ 
  	/* check for planetary compatibility */
!  if (float_rand()*100.0 > Compat[ps->owner] * races[ps->owner]->likes[pd->des]) {
! 	/*printf("%d,%d incomp C %.2f,l %.f-- returning\n",xd,yd,Compat[ps->owner],races[ps->owner]->likes[pd->des]);*/
  	return;
   }
  
!  if ( (ps->owner==pd->owner || !pd->owner) && !pd->is_wasted) {
  
   	if (!pd->owner) {
  		printf("claiming %d,%d (%d), %d people\n",xd,yd,ps->owner,people);
          	pd->popn += people;
***************
*** 177,188 ****
  		reg float dfac;
  
  		ps->popn -= round_rand(((float)ps->popn * pd->mobilization * 
! 			planet->info[pd->owner-1].comread + races[pd->owner]->fighters*10)/200.0);
  		dfac = ( (float)pd->popn * ps->mobilization * 
! 			planet->info[ps->owner-1].comread + races[pd->owner]->fighters*10)/200.0;
  		printf(" att %d lost %g people of %d.\n",ps->owner,
  			((float)ps->popn * pd->mobilization * 
! 			planet->info[pd->owner-1].comread + races[pd->owner]->fighters*10)/200.0, pd->popn);
  		if (pd->popn - dfac <= 0.0) {
  			    /* the invasion was successful */
  			if (races[ps->owner]->Thing) {
--- 177,188 ----
  		reg float dfac;
  
  		ps->popn -= round_rand(((float)ps->popn * pd->mobilization * 
! 			planet->info[pd->owner-1].comread + races[pd->owner]->fighters*20)/200.0);
  		dfac = ( (float)pd->popn * ps->mobilization * 
! 			planet->info[ps->owner-1].comread + races[pd->owner]->fighters*20)/200.0;
  		printf(" att %d lost %g people of %d.\n",ps->owner,
  			((float)ps->popn * pd->mobilization * 
! 			planet->info[pd->owner-1].comread + races[pd->owner]->fighters*20)/200.0, pd->popn);
  		if (pd->popn - dfac <= 0.0) {
  			    /* the invasion was successful */
  			if (races[ps->owner]->Thing) {
***************
*** 196,203 ****
  			sects_lost[pd->owner]++;
  			sects_gained[ps->owner]++;
  			pd->owner = ps->owner;
! 			pd->eff *= 0.5;
! 			pd->mobilization *= 0.25;
  			tot_captured++;
  			printf(" sec %d,%d CAPTURED",xd,yd);
  		} else 
--- 196,203 ----
  			sects_lost[pd->owner]++;
  			sects_gained[ps->owner]++;
  			pd->owner = ps->owner;
! 			pd->eff *= 0.75;
! 			pd->mobilization *= 0.75;
  			tot_captured++;
  			printf(" sec %d,%d CAPTURED",xd,yd);
  		} else 
***************
*** 205,211 ****
  			
  		printf(" def %d lost %g people of %d,",pd->owner,
  			((float)pd->popn * ps->mobilization * 
! 			planet->info[ps->owner-1].comread + races[pd->owner]->fighters*10)/200.0, pd->popn);
   	}
     }
  }
--- 205,211 ----
  			
  		printf(" def %d lost %g people of %d,",pd->owner,
  			((float)pd->popn * ps->mobilization * 
! 			planet->info[ps->owner-1].comread + races[pd->owner]->fighters*20)/200.0, pd->popn);
   	}
     }
  }
*** ../../GB/doship.c	Wed Apr 26 11:22:35 1989
--- doship.c	Mon May  1 08:21:45 1989
***************
*** 205,210 ****
--- 205,211 ----
       case STYPE_POD:
  	if (ship->notified) {
  		/* we just arrived at this system -- explode */
+ 		/* or, we are floating in space with no fuel -- just die */
  		int shfdata;
  		reg int i,f= -1;
  		for (i=0; i<MAXSSHIPS && Stars[ship->storbits]->shipnums[i]!=shipno; i++) ;
***************
*** 215,225 ****
  			ship->is_dead = 1;
  			openshfdata(&shfdata);
  			destroyship(shfdata, shipno);
! 			close(shfdata);
! 			for (i=0; f== -1 && i<Stars[ship->storbits]->numplanets; i++)
  				if (sqrt((double)Distsq(ship->xpos, ship->ypos,
  				  Stars[ship->storbits]->xpos + planets[ship->storbits][i]->xpos,
! 				  Stars[ship->storbits]->ypos + planets[ship->storbits][i]->ypos))/SYSTEMSIZE < float_rand()*2)
  					f = i;
  			teleg_add("",telegram_buf);
  			sprintf(buf, "Bulletin\n\nSpore pod #%d has warmed and exploded.\n",shipno);
--- 216,227 ----
  			ship->is_dead = 1;
  			openshfdata(&shfdata);
  			destroyship(shfdata, shipno);
! 			close(shfdata); 
! 			if (ship->whatorbits==LEVEL_STAR) {
! 			  for (i=0; f== -1 && i<Stars[ship->storbits]->numplanets; i++)
  				if (sqrt((double)Distsq(ship->xpos, ship->ypos,
  				  Stars[ship->storbits]->xpos + planets[ship->storbits][i]->xpos,
! 				  Stars[ship->storbits]->ypos + planets[ship->storbits][i]->ypos))/SYSTEMSIZE < float_rand())
  					f = i;
  			teleg_add("",telegram_buf);
  			sprintf(buf, "Bulletin\n\nSpore pod #%d has warmed and exploded.\n",shipno);
***************
*** 242,247 ****
--- 244,250 ----
  			for (i=1; i<=Num_races; i++)
  				if (i!=ship->owner && isset(Stars[ship->storbits]->inhabited,i))
  					teleg_send(TELEG_PLAYER_AUTO, i, telegram_buf);
+ 		      }
  		}
  	}
  	break;
***************
*** 274,280 ****
  	if (ship->orders.object.number2 == 0) {	/* launch if no assignment */
  	  /* steal some fuel from other players,telegram */
  		bool f=0;
! 		for (r=Num_races-1; !f && r>0; r--)
  		  if (p->info[r-1].fuel >= Shipdata[OTYPE_VN][ABIL_COST]) {
  			p->info[ship->owner-1].fuel += 
  					Shipdata[OTYPE_VN][ABIL_FUELCAP];
--- 277,284 ----
  	if (ship->orders.object.number2 == 0) {	/* launch if no assignment */
  	  /* steal some fuel from other players,telegram */
  		bool f=0;
! 		if (ship->fuel < Shipdata[OTYPE_VN][ABIL_COST])
! 		 for (r=1; !f && r<=Num_races; r--)
  		  if (p->info[r-1].fuel >= Shipdata[OTYPE_VN][ABIL_COST]) {
  			p->info[ship->owner-1].fuel += 
  					Shipdata[OTYPE_VN][ABIL_FUELCAP];
***************
*** 292,298 ****
  			   Stars[ship->storbits]->pnames[ship->pnumorbits]);
  			teleg_add(buf,telegram_buf);
  	    		teleg_send(TELEG_PLAYER_AUTO, f, telegram_buf);
- 	    		teleg_send(TELEG_PLAYER_AUTO, 1, telegram_buf);
  		  /*}*/
  	    
  		ship->orders.object.number2 = 0; /* no current assignment */
--- 296,301 ----
***************
*** 306,312 ****
  		   we are engaged in building up resources/fuel. */
  		/* steal resources from other players,telegram */
  		bool f=0;
! 		for (r=Num_races-1; !f && r>0; r--)
  		  if (p->info[r-1].resource >= Shipdata[OTYPE_VN][ABIL_COST])
  			f = r;
  		if (f) {
--- 309,315 ----
  		   we are engaged in building up resources/fuel. */
  		/* steal resources from other players,telegram */
  		bool f=0;
! 		for (r=Num_races; !f && r>0; r--)
  		  if (p->info[r-1].resource >= Shipdata[OTYPE_VN][ABIL_COST])
  			f = r;
  		if (f) {
***************
*** 325,332 ****
  			     Stars[ship->storbits]->pnames[ship->pnumorbits]);
  			teleg_add(buf,telegram_buf);
  	    		teleg_send(TELEG_PLAYER_AUTO, f, telegram_buf);
- 				/* remove */
- 	    		teleg_send(TELEG_PLAYER_AUTO, 1, telegram_buf);
  		  /*}*/
  		/* if no resources to steal, more will be produced in doplanet*/
  		}
--- 328,333 ----
***************
*** 362,367 ****
--- 363,369 ----
  		 	ship->whatdest = LEVEL_STAR;
  		}
  		fprintf(stderr,"VN #%d headed for star %d, pl %d.\n",shipno,ship->deststar, ship->destpnum);
+ 		ship->speed = 1;	/* VN's are very fastidious */
  		ship->orders.object.number2 = 1;
  			/* we are assigned to go */
  	}
*** ../../GB/examine.c	Wed Apr 26 11:22:37 1989
--- examine.c	Mon May  1 08:21:50 1989
***************
*** 42,48 ****
      }
  
     /* look through ship data file */
!     for (t=0; t<ship->type; t++)
         while (fgetc(fd) != '~') ;
      
  	/* give report */
--- 42,48 ----
      }
  
     /* look through ship data file */
!     for (t=0; t<=ship->type; t++)
         while (fgetc(fd) != '~') ;
      
  	/* give report */
*** ../../GB/files_rw.c	Wed Apr 26 11:22:37 1989
--- files_rw.c	Mon May  1 08:21:50 1989
***************
*** 12,17 ****
--- 12,18 ----
   */
  
  #include "tweakables.h"
+ #include "files.h"
  #include <sys/file.h>
  #include <signal.h>
  #include <errno.h>
*** ../../GB/fire.c	Wed Apr 26 14:27:19 1989
--- fire.c	Mon May  1 08:21:52 1989
***************
*** 28,33 ****
--- 28,34 ----
  sectortype *sect;
  int dam=0,dam2=0,strength,oldstrength,maxstrength,
      i,from_firex= -1,from_firey= -1,firex= -1,firey= -1,Numplayersretaliate=0;
+ float dist;
  char string[PLACENAMESIZE],buf[100];
  bool sameplanet = 0, fromplanetmod=0,toplanetmod=0,starmod=0,sdatamod=0;
  int mask,APdeductstar;
***************
*** 262,267 ****
--- 263,275 ----
  	/* block kill signals to foil cheaters */
   mask = sigblock(SIGINT | SIGQUIT | SIGSTOP);
  
+  dam = shoot(from,&to,fpl,tpl,firex,firey,strength, &dist, &sdatamod,&starmod, &fromplanetmod);
+  printf("Distance to target: %.0f, maximum distance: %d.\n",dist, SYSTEMSIZE);
+  if (dam < 0) {
+ 	printf("Target out of range!\n", SYSTEMSIZE);
+ 	fire_handler();
+  }
+ 
   if (from.level==LEVEL_SHIP) {
  			from.shipptr->destruct -= strength;
  			from.shipptr->mass -= strength*MASS_DESTRUCT;
***************
*** 268,278 ****
   } else if (from.level==LEVEL_PLAN) 
  			fpl->info[Playernum-1].destruct -= strength;
  
-  dam = shoot(from,&to,fpl,tpl,firex,firey,strength, &sdatamod,&starmod, &fromplanetmod);
-  if (dam < 0) {
- 	printf("Target out of range!  must be %d or closer.\n", SYSTEMSIZE);
- 	fire_handler();
-  }
  
    /* enemy retaliates with twice the strength (if he can) */
  
--- 276,281 ----
***************
*** 298,304 ****
  
  	/* enemy fires at shooting sector */
   if ( !(to.level==LEVEL_SHIP && to.shipptr->is_dead) )
!  	dam2 = shoot(to,&from,tpl,fpl,from_firex,from_firey,strength, &sdatamod,&starmod, &toplanetmod);
  
  
   if (from.level==LEVEL_PLAN) {
--- 301,307 ----
  
  	/* enemy fires at shooting sector */
   if ( !(to.level==LEVEL_SHIP && to.shipptr->is_dead) )
!  	dam2 = shoot(to,&from,tpl,fpl,from_firex,from_firey,strength, &dist, &sdatamod,&starmod, &toplanetmod);
  
  
   if (from.level==LEVEL_PLAN) {
***************
*** 352,358 ****
  
   close(fire_stardata);
  
!  printf("BOOM!!\007  %d%s.\n", dam, 
  		to.level==LEVEL_SHIP ? 
  		 (to.shipptr->type==OTYPE_VN ? " Von Neumann machines destroyed"
  		 : "% damage done") : " sectors destroyed" );
--- 355,361 ----
  
   close(fire_stardata);
  
!  printf("BOOM!!\007  %d%s.\n", dam, 
  		to.level==LEVEL_SHIP ? 
  		 (to.shipptr->type==OTYPE_VN ? " Von Neumann machines destroyed"
  		 : "% damage done") : " sectors destroyed" );
*** ../../GB/fix.c	Wed Apr 26 11:22:40 1989
--- fix.c	Mon May  1 08:21:53 1989
***************
*** 295,300 ****
--- 295,303 ----
  	ch = sh->destpnum;
  	query(CHAR, "what planet dest",0,0,&ch,0,0);
  	  sh->destpnum = ch;
+ 	ch = sh->is_dead;
+ 	query(CHAR, "is dead",0,0,&ch,0,0);
+ 	  sh->is_dead = ch;
  	ch = sh->is_docked;
  	query(CHAR, "is docked",0,0,&ch,0,0);
  	  sh->is_docked = ch;
*** ../../GB/getplace.c	Wed Apr 26 11:22:41 1989
--- getplace.c	Mon May  1 08:21:55 1989
***************
*** 44,53 ****
  			   where.snum = where.shipptr->storbits;
  			   where.pnum = where.shipptr->pnumorbits;
  			/* where.shipno already taken care of */
! 			   printf(" |%s|\n",string);
! 			   while (isdigit(*string)) {putchr(*string),string++;}
! 		   	   putchr(*string);
! 			   printf(" |%s|\n",string);
  			   if (*string=='/')
  				 return Getplace2(string+1,&where, ignoreexpl);
  			   else
--- 44,51 ----
  			   where.snum = where.shipptr->storbits;
  			   where.pnum = where.shipptr->pnumorbits;
  			/* where.shipno already taken care of */
! 			   while (isdigit(*string)) 
! 				string++;
  			   if (*string=='/')
  				 return Getplace2(string+1,&where, ignoreexpl);
  			   else
*** ../../GB/help.c	Wed Apr 26 11:22:42 1989
--- help.c	Mon May  1 08:21:55 1989
***************
*** 5,10 ****
--- 5,11 ----
   */
  
  #include "tweakables.h"
+ #include "files.h"
  
  help(APcount, argn,args)
  int APcount;
***************
*** 25,31 ****
  		"tactical fire     name    mobilize   telegram\n"
  	      );
    } else {
!     sprintf(s,"%s %s/%s.doc*", PAGER, DOCS, args[1] );
      system(s);
    }
  
--- 26,32 ----
  		"tactical fire     name    mobilize   telegram\n"
  	      );
    } else {
!     sprintf(s,"%s %s/%s.doc", PAGER, DOCS, args[1] );
      system(s);
    }
  
*** ../../GB/makeplanet.c	Wed Apr 26 11:22:45 1989
--- makeplanet.c	Mon May  1 08:22:00 1989
***************
*** 13,19 ****
  planettype Makeplanet(type)
  int type;
  {
! register int x,y;
  sectortype *s;
  planettype planet;
  int i, atmos;
--- 13,19 ----
  planettype Makeplanet(type)
  int type;
  {
! reg int x,y;
  sectortype *s;
  planettype planet;
  int i, atmos;
***************
*** 54,60 ****
       for (x=0; x<planet.Maxx; x++) {
  	s = &Sector(planet,x,y);
  	s->des = DES_GAS;	/* for gasgiant */
! 	s->fert=1;
       }
   if (planet.Maxx > MAP_GASGIANT_BANDMIN) {
      int nbands;
--- 54,61 ----
       for (x=0; x<planet.Maxx; x++) {
  	s = &Sector(planet,x,y);
  	s->des = DES_GAS;	/* for gasgiant */
! 	s->fert = int_rand(2,15);
! 	s->resource = int_rand(3,20);
       }
   if (planet.Maxx > MAP_GASGIANT_BANDMIN) {
      int nbands;
***************
*** 64,70 ****
       for (x=0; x<planet.Maxx; x++) {
  	s = &Sector(planet,x,y);
  	s->des = DES_SEA;	/* make random bands of water */
! 	s->fert += int_rand(2,3);
       }
      }
      for (i=0; i<=MAP_ISLANDS*2; i++) {
--- 65,72 ----
       for (x=0; x<planet.Maxx; x++) {
  	s = &Sector(planet,x,y);
  	s->des = DES_SEA;	/* make random bands of water */
! 	s->fert += int_rand(2,6);
! 	s->resource += int_rand(30,40);
       }
      }
      for (i=0; i<=MAP_ISLANDS*2; i++) {
***************
*** 72,78 ****
       x=int_rand(1,planet.Maxx-2);
  	s = &Sector(planet,x,y);
  	s->des = DES_SEA;	/* make random spots of water */
! 	s->fert += int_rand(2,3);
      }
   } else {
      for (i=0; i<MAP_ISLANDS*2; i++) {
--- 74,80 ----
       x=int_rand(1,planet.Maxx-2);
  	s = &Sector(planet,x,y);
  	s->des = DES_SEA;	/* make random spots of water */
! 	s->fert += int_rand(2,6);
      }
   } else {
      for (i=0; i<MAP_ISLANDS*2; i++) {
***************
*** 80,87 ****
  	if (random()&01) {
  		s->des=DES_MOUNT;
  		s->is_wasted = 1;
! 		s->resource=int_rand(5,12);
! 		s->fert=int_rand(5,12);
  	} else {
  		s->des=DES_SEA;
  		s->fert=int_rand(5,12);
--- 82,89 ----
  	if (random()&01) {
  		s->des=DES_MOUNT;
  		s->is_wasted = 1;
! 		s->resource += int_rand(9,21);
! 		s->fert = int_rand(5,21);
  	} else {
  		s->des=DES_SEA;
  		s->fert=int_rand(5,12);
***************
*** 109,122 ****
       for (x=0; x<planet.Maxx; x++) {
  	s = &Sector(planet,x,y);
  	s->des = DES_MOUNT;	/* for airless */
- 	/*s->is_wasted=1;	/* is wasteland */
  	s->resource=int_rand(25,35);
! 	s->fert=1;
       }
       for (i=0; i<MAP_ISLANDS; i++) {
  	s = &Sector(planet, int_rand(1,planet.Maxx-2), int_rand(1,planet.Maxy-2));
  	s->des = DES_LAND;
! 	s->fert += random()&01;
  	s->resource+=int_rand(15,22);
       }
    Smashup(&planet,6,DES_LAND,5,1,1);	/* make meteor impacts */
--- 111,124 ----
       for (x=0; x<planet.Maxx; x++) {
  	s = &Sector(planet,x,y);
  	s->des = DES_MOUNT;	/* for airless */
  	s->resource=int_rand(25,35);
! 	s->fert=int_rand(0,int_rand(3,10));
       }
+ 
       for (i=0; i<MAP_ISLANDS; i++) {
  	s = &Sector(planet, int_rand(1,planet.Maxx-2), int_rand(1,planet.Maxy-2));
  	s->des = DES_LAND;
! 	s->fert += int_rand(3,17);
  	s->resource+=int_rand(15,22);
       }
    Smashup(&planet,6,DES_LAND,5,1,1);	/* make meteor impacts */
***************
*** 138,144 ****
  	s = &Sector(planet,x,y);
  	s->des = int_rand(0,3) ? DES_MOUNT : DES_LAND;
  	s->is_wasted=1;
! 	s->resource=int_rand(55,85);
  	s->fert=(char)random()&01;
       }
    
--- 140,146 ----
  	s = &Sector(planet,x,y);
  	s->des = int_rand(0,3) ? DES_MOUNT : DES_LAND;
  	s->is_wasted=1;
! 	s->resource=int_rand(101,500);
  	s->fert=(char)random()&01;
       }
    
***************
*** 175,180 ****
--- 177,184 ----
       for (x=0; x<planet.Maxx; x++) {
  	s = &Sector(planet,x,y);
  	s->des=DES_SEA;	/* make all water first */
+ 	s->fert = int_rand(55,79);
+ 	s->resource = int_rand(20,30);
       }
  		/* make first isolated islands */
    for (i=0; i<=MAP_ISLANDS; i++) {
***************
*** 185,192 ****
       s->fert = int_rand(6,20);
    }
  
!   PermuteSects(&planet);	/* mix up map */
!   (void)Getxysect(&planet,0,0,1);	/* reset index */
  
    landsects=0;
    while (landsects<=Numlandsects)
--- 189,196 ----
       s->fert = int_rand(6,20);
    }
  
!   /*PermuteSects(&planet);	/* mix up map */
!   /*(void)Getxysect(&planet,0,0,1);	/* reset index */
  
    landsects=0;
    while (landsects<=Numlandsects)
***************
*** 195,201 ****
  
  
  		/* make more isolated islands */
!   for (i=0; i<=MAP_ISLANDS*4; i++) {
       x=int_rand(0,planet.Maxx-1);
       y=int_rand(0,planet.Maxy-1);
       s = &Sector(planet,x,y);
--- 199,205 ----
  
  
  		/* make more isolated islands */
!   for (i=0; i<=MAP_ISLANDS*3; i++) {
       x=int_rand(0,planet.Maxx-1);
       y=int_rand(0,planet.Maxy-1);
       s = &Sector(planet,x,y);
***************
*** 205,230 ****
       s->fert = 45;
    }
  	/* make some wasteland sectors (polar caps ) */
  	/* do s pole */
!   for (y=planet.Maxy; y>=planet.Maxy-4; y--)
       for (x=0; x<planet.Maxx; x++)
  	if ( ((y==planet.Maxy-1) && int_rand(0,1)) ||
! 		((y==planet.Maxy-2) && !int_rand(0,2) && Sector(planet,x,planet.Maxy).is_wasted) ) {
! 	  Sector(planet,x,y).is_wasted=1;
! 	  Smap[y*planet.Maxx+x].fert /= 6;
!      	}
  	/* do n pole */
!   for (y=0; y<=3; y++)
       for (x=0; x<planet.Maxx; x++)
  	if ( ((y==0) && int_rand(0,1)) ||
  		((y==1) && !int_rand(0,2) && Smap[x].is_wasted) ) {
! 	  Smap[y*planet.Maxx+x].is_wasted=1;
! 	  Smap[y*planet.Maxx+x].fert /= 6;
!         }
   }
! /*###222 [lint] syntax error at or near word "return"%%%*/
!  return ( planet );
! /*###223 [lint] syntax error at or near symbol }%%%*/
  }
  
  
--- 209,231 ----
       s->fert = 45;
    }
  	/* make some wasteland sectors (polar caps ) */
+ 	/* { already done in Volcano } */
  	/* do s pole */
!   /*for (y=planet.Maxy; y>=planet.Maxy-4; y--)
       for (x=0; x<planet.Maxx; x++)
  	if ( ((y==planet.Maxy-1) && int_rand(0,1)) ||
! 		((y==planet.Maxy-2) && !int_rand(0,2) && Sector(planet,x,planet.Maxy-1).is_wasted) ) {
! 	  Sector(planet,x,y).des= DES_ICE;
!      	}*/
  	/* do n pole */
!   /*for (y=0; y<=3; y++)
       for (x=0; x<planet.Maxx; x++)
  	if ( ((y==0) && int_rand(0,1)) ||
  		((y==1) && !int_rand(0,2) && Smap[x].is_wasted) ) {
! 	  Smap[y*planet.Maxx+x].des= DES_ICE;
!         }*/
   }
!  return planet;
  }
  
  
***************
*** 236,242 ****
  		/* smash psuedo-meteors into the place */
  {
  char r,x,y;
! register int x2,y2;
  sectortype *s;
  
   while (n--) {
--- 237,243 ----
  		/* smash psuedo-meteors into the place */
  {
  char r,x,y;
! reg int x2,y2;
  sectortype *s;
  
   while (n--) {
***************
*** 263,269 ****
  
  
  double Distmap(x,y,x2,y2)
! register int x,y,x2,y2;
  {
   return fabs((double)x-x2) / RATIOXY + fabs( (double)y-y2);
  }
--- 264,270 ----
  
  
  double Distmap(x,y,x2,y2)
! reg int x,y,x2,y2;
  {
   return fabs((double)x-x2) / RATIOXY + fabs( (double)y-y2);
  }
***************
*** 273,286 ****
  planettype *pptr;
  int landsectors,Numlandsects;
  {
! int x,y;
  sectortype *s;
  
!   (void)Getxysect(pptr,&x,&y,0);
!   /*x = int_rand(0,pptr->Maxx-1);
!   y = int_rand(0,pptr->Maxy-1);*/
    s = &Sector(*pptr,x,y);
  
    if (s->des==DES_SEA) {
      if (Numneighbors(pptr,x,y,DES_LAND)||Numneighbors(pptr,x,y,DES_MOUNT)) {
  	s->des=(landsectors>(MAP_MOUNT_PERCENT*Numlandsects))?DES_LAND:DES_MOUNT;
--- 274,308 ----
  planettype *pptr;
  int landsectors,Numlandsects;
  {
! reg int x,y;
  sectortype *s;
  
!   x = int_rand(0,pptr->Maxx-1);
!   y = int_rand(0,pptr->Maxy-1);
    s = &Sector(*pptr,x,y);
  
+     if (y > pptr->Maxy/2) {
+       if (y==pptr->Maxy-1) {
+ 	s->des = DES_ICE;
+ 	return(1);
+       } else {
+ 	if ((Sector(*pptr,x,y+1).des==DES_ICE) && 
+ 		 (int_rand(-50,50)>pptr->conditions[RTEMP])) {
+ 		s->des = DES_ICE;
+ 		return(1);
+ 	}
+       }
+     } else {
+       if (y==0) {
+ 	s->des = DES_ICE;
+ 	return(1);
+       } else if ((Sector(*pptr,x,y-1).des==DES_ICE) && 
+ 		 (int_rand(-50,50)>pptr->conditions[RTEMP])) {
+ 		s->des = DES_ICE;
+ 		return(1);
+ 	}
+     }
+ 
    if (s->des==DES_SEA) {
      if (Numneighbors(pptr,x,y,DES_LAND)||Numneighbors(pptr,x,y,DES_MOUNT)) {
  	s->des=(landsectors>(MAP_MOUNT_PERCENT*Numlandsects))?DES_LAND:DES_MOUNT;
***************
*** 298,306 ****
  /* return # of neighbors of a given designation that a sector has. */
  int Numneighbors(p,x,y,des)
  planettype *p;
! register int x,y,des;
  {
! register int d;
    return (Sector(*p,mod(x-1,p->Maxx,d),y).des==des) + 
    	 (Sector(*p,mod(x+1,p->Maxx,d),y).des==des) + 
    	 ((y==0) ? 0 : (Sector(*p,x,y-1).des==des)) + 
--- 320,328 ----
  /* return # of neighbors of a given designation that a sector has. */
  int Numneighbors(p,x,y,des)
  planettype *p;
! reg int x,y,des;
  {
! reg int d;
    return (Sector(*p,mod(x-1,p->Maxx,d),y).des==des) + 
    	 (Sector(*p,mod(x+1,p->Maxx,d),y).des==des) + 
    	 ((y==0) ? 0 : (Sector(*p,x,y-1).des==des)) + 
*** ../../GB/makeuniv.c	Wed Apr 26 14:33:56 1989
--- makeuniv.c	Mon May  1 08:22:01 1989
***************
*** 36,43 ****
   scanf("%d",&lowp);
   printf("hi # of planets (%d-%d):",lowp,MAXPLANETS-1);
   scanf("%d",&hip);
-  printf("approx # of habitable planets:");
-  scanf("%d",&e);
   getchr();
  
   sprintf(str, "/bin/mkdir %s", DATADIR );
--- 36,41 ----
***************
*** 54,65 ****
   	Bzero(*Stars[star]);
   	Star = Stars[star];
   	Star->numplanets=int_rand(lowp,hip);
!  	Star->gravity = (float)int_rand(100000,1000000) / 100;
   	printf("name of star (%d planets):",Star->numplanets);
  	for (i=0; i<NAMESIZE-4; i++)
  	   putchr('.');
  	for (i=0; i<NAMESIZE-4; i++)
! 	   putchr('\010');
   	scanf("%10[^\n]",Star->name);
  	  getchr();
   	Star->xpos=(float)int_rand(-UNIVSIZE,UNIVSIZE);
--- 52,63 ----
   	Bzero(*Stars[star]);
   	Star = Stars[star];
   	Star->numplanets=int_rand(lowp,hip);
!  	Star->gravity = int_rand(10000,100000) / 100.0;
   	printf("name of star (%d planets):",Star->numplanets);
  	for (i=0; i<NAMESIZE-4; i++)
  	   putchr('.');
  	for (i=0; i<NAMESIZE-4; i++)
! 	   putchr('\010');
   	scanf("%10[^\n]",Star->name);
  	  getchr();
   	Star->xpos=(float)int_rand(-UNIVSIZE,UNIVSIZE);
***************
*** 70,85 ****
  
   for (star=0; star<Sdata.numstars; star++) {
  
!   Star=Stars[star];
  
-   for (i=0; i<=Star->numplanets; i++) 
- 			types[i] = 200;
-   e2=e;
-   while (e2--) {
-   	types[int_rand(0,Star->numplanets-1)] = TYPE_EARTH;
-   }
    for (i=0; i<Star->numplanets; i++)
! 	if (types[i]!=TYPE_EARTH) types[i]=int_rand(1,3);
    for (i=0; i<Star->numplanets; i++)  {
  	sprintf(Star->pnames[i],"%s-%s",Star->name,Romannums[i]);
  	if (argc==2 && argv[1][1]=='v')
--- 68,78 ----
  
   for (star=0; star<Sdata.numstars; star++) {
  
!   Star = Stars[star];
  
    for (i=0; i<Star->numplanets; i++)
! 	types[i]=int_rand(TYPE_EARTH,TYPE_GASGIANT);
! 
    for (i=0; i<Star->numplanets; i++)  {
  	sprintf(Star->pnames[i],"%s-%s",Star->name,Romannums[i]);
  	if (argc==2 && argv[1][1]=='v')
***************
*** 98,107 ****
  	  for (y=0; y<planet.Maxy; y++) {
  	   for (x=0; x<planet.Maxx; x++) {
  	      switch (Smap[y*planet.Maxx+x].des) {
! 		case DES_LAND: putchr(CHAR_UNOWNED_LAND); break;
  		case DES_SEA: putchr(CHAR_SEA); break;
  		case DES_MOUNT: putchr(CHAR_MOUNT); break;
  		case DES_GAS: putchr(CHAR_GAS); break;
  	      }
  	   }
  	   putchr('\n');
--- 91,102 ----
  	  for (y=0; y<planet.Maxy; y++) {
  	   for (x=0; x<planet.Maxx; x++) {
  	      switch (Smap[y*planet.Maxx+x].des) {
! 		case DES_LAND: putchr(CHAR_LAND); break;
  		case DES_SEA: putchr(CHAR_SEA); break;
  		case DES_MOUNT: putchr(CHAR_MOUNT); break;
+ 		case DES_ICE: putchr(CHAR_ICE); break;
  		case DES_GAS: putchr(CHAR_GAS); break;
+ 		default: break;
  	      }
  	   }
  	   putchr('\n');
*** ../../GB/map.c	Wed Apr 26 11:22:47 1989
--- map.c	Mon May  1 08:22:02 1989
***************
*** 150,161 ****
  	return(CHAR_OWNED_WASTELAND);
    if (s->VN)
  	return(Shipltrs[OTYPE_VN]);
     switch (s->des) {
!      	case DES_SEA: return(CHAR_OWNED_SEA);
!      	case DES_LAND: return(Race->Thing ? CHAR_OWNED_THING : CHAR_OWNED_LAND);
!      	case DES_MOUNT: return(Race->Thing ? CHAR_OWNED_THING : CHAR_OWNED_MOUNT);
!      	case DES_GAS: return(CHAR_GAS);
!      	case DES_PLATED: return(CHAR_PLATED);
       	default: return('!');
     }
  
--- 150,164 ----
  	return(CHAR_OWNED_WASTELAND);
    if (s->VN)
  	return(Shipltrs[OTYPE_VN]);
+    if (Race->Thing)
+ 	return CHAR_OWNED_THING;
     switch (s->des) {
!      	case DES_SEA: return CHAR_OWNED_SEA;
!      	case DES_LAND: return CHAR_OWNED_LAND;
!      	case DES_MOUNT: return CHAR_OWNED_MOUNT;
!      	case DES_GAS: return CHAR_OWNED_GAS;
!      	case DES_PLATED: return CHAR_PLATED;
!      	case DES_ICE: return CHAR_OWNED_ICE;
       	default: return('!');
     }
  
***************
*** 175,183 ****
  	return(CHAR_WASTELAND);
    switch (s->des) {
       case DES_SEA: return(CHAR_SEA);
!      case DES_LAND: return(CHAR_UNOWNED_LAND);
       case DES_MOUNT: return(CHAR_MOUNT);
       case DES_GAS: return(CHAR_GAS);
       case DES_PLATED: return(CHAR_PLATED);
       default: return('!');
    }
--- 178,187 ----
  	return(CHAR_WASTELAND);
    switch (s->des) {
       case DES_SEA: return(CHAR_SEA);
!      case DES_LAND: return(CHAR_LAND);
       case DES_MOUNT: return(CHAR_MOUNT);
       case DES_GAS: return(CHAR_GAS);
+      case DES_ICE: return CHAR_ICE;
       case DES_PLATED: return(CHAR_PLATED);
       default: return('!');
    }
*** ../../GB/more.c	Wed Apr 26 11:22:49 1989
--- more.c	Mon May  1 08:22:05 1989
***************
*** 4,11 ****
  #include <sgtty.h>
  
  
- char *doc_directory = "/b/o/therat/k";
- 
  main(c, v)
  int c;
  char **v;
--- 4,9 ----
***************
*** 21,27 ****
  	int fd, pid;
  	long t;
  
! 	sprintf(filename, "%s/%s.Z", doc_directory, s);
  	/* could stat the file here to make sure it's there */
  
  	time(&t);
--- 19,25 ----
  	int fd, pid;
  	long t;
  
! 	sprintf(filename, "%s", s);
  	/* could stat the file here to make sure it's there */
  
  	time(&t);
***************
*** 105,108 ****
  
  	return c;
  }
- 
--- 103,105 ----
*** ../../GB/moveship.c	Wed Apr 26 11:22:50 1989
--- moveship.c	Mon May  1 08:22:06 1989
***************
*** 91,104 ****
     	Ddist -= (SYSTEMSIZE - 1.0);
     else if (s->whatdest==LEVEL_STAR)
  	Ddist -= PLORBITSIZE - 1.0;
!    else if (s->whatdest==LEVEL_SHIP && Ddist > SYSTEMSIZE) {
       if (!s->notified) {
  	s->notified = 1;
  	teleg_add("",telegram_buf);
     	sprintf(buf,"Telecomm from ship #%d at %s\n\n",shipno, 
! 						prin_ship_orbits(s));
     	teleg_add(buf,telegram_buf);
!    	sprintf(buf,"%s #%d cannot find destination ship #%d.\n", 
  				Shipnames[s->type],shipno,s->destshipno);
     	teleg_add(buf,telegram_buf);
     	teleg_send(TELEG_PLAYER_AUTO, s->owner, telegram_buf);
--- 91,105 ----
     	Ddist -= (SYSTEMSIZE - 1.0);
     else if (s->whatdest==LEVEL_STAR)
  	Ddist -= PLORBITSIZE - 1.0;
!    else if (s->whatdest==LEVEL_SHIP && Ddist > SYSTEMSIZE * 2.0) {
       if (!s->notified) {
  	s->notified = 1;
+ 	s->whatdest = LEVEL_UNIV;
  	teleg_add("",telegram_buf);
     	sprintf(buf,"Telecomm from ship #%d at %s\n\n",shipno, 
! 				prin_ship_orbits(s));
     	teleg_add(buf,telegram_buf);
!    	sprintf(buf,"%s #%d lost sight of destination ship #%d.\n", 
  				Shipnames[s->type],shipno,s->destshipno);
     	teleg_add(buf,telegram_buf);
     	teleg_send(TELEG_PLAYER_AUTO, s->owner, telegram_buf);
***************
*** 111,127 ****
  
     else if (Ddist > DIST_TO_LAND) {
     	s->fuel -= fuse;
-    	printf(" subtracting %f fuel \n",fuse);
-     		/* subtract the fuel's mass */
     	s->mass -= fuse * MASS_FUEL;
  
  		/* dont overshoot */
     	xdest = sin(heading) * mfactor;
-     	if (abs(xdest) > Ddist) 
- 		xdest = sgn(xdest) * Ddist;
     	ydest = cos(heading) * mfactor;
!     	if (abs(ydest) > Ddist) 
  		ydest = sgn(ydest) * Ddist;
     	s->xpos += xdest;
     	s->ypos += ydest;
     }
--- 112,126 ----
  
     else if (Ddist > DIST_TO_LAND) {
     	s->fuel -= fuse;
     	s->mass -= fuse * MASS_FUEL;
  
  		/* dont overshoot */
     	xdest = sin(heading) * mfactor;
     	ydest = cos(heading) * mfactor;
!     	if (sqrt(xdest*xdest + ydest*ydest) > Ddist) {
! 		xdest = sgn(xdest) * Ddist;
  		ydest = sgn(ydest) * Ddist;
+ 	}
     	s->xpos += xdest;
     	s->ypos += ydest;
     }
*** ../../GB/orbit.c	Wed Apr 26 11:22:52 1989
--- orbit.c	Mon May  1 08:22:07 1989
***************
*** 41,47 ****
  int orbit_shdata,orbit_pdata,orbit_stardata;
  
   DontDispPlanets = DontDispShips = DontDispStars = 0;
-  printf(" orbit:called |%s|\n",args[1]);
  
    /* find options, set flags accordingly */
   for (flag=1; flag<=argn-1; flag++)
--- 41,46 ----
***************
*** 70,76 ****
     Lasty = Dir.lasty;
     Zoom = Dir.zoom;
   } else {
-    printf(" trying to orbit %s\n",args[argn-1]);
     where = Getplace(args[argn-1],0);
     Lastx = Lasty = 0.0;
     Zoom = 1.0;
--- 69,74 ----
***************
*** 172,178 ****
  	shipwhere.snum = where.shipptr->storbits;
  	shipwhere.pnum = where.shipptr->pnumorbits;
  	sprintf(gs[1],"%s",Dispplace(&shipwhere) );
- 	printf(" orbiting %s\n",gs[1]);
  	orbit(0,2,gs);
  	} break;
  
--- 170,175 ----
*** ../../GB/order.c	Wed Apr 26 14:29:29 1989
--- order.c	Mon May  1 08:22:09 1989
***************
*** 9,20 ****
  #include <ctype.h>
  #include <setjmp.h>
  #include <signal.h>
  extern jmp_buf main_jenv;
  
- extern char *Shipnames[];
- 
  char *prin_aimed_at(), *prin_ship_dest();
  
  int order_shdata,order_pdata,order_stardata;
  static bool first,prerror,was_obj = 0;
  
--- 9,20 ----
  #include <ctype.h>
  #include <setjmp.h>
  #include <signal.h>
+ #include <math.h>
  extern jmp_buf main_jenv;
  
  char *prin_aimed_at(), *prin_ship_dest();
  
+ extern int Ignore_filelocks;
  int order_shdata,order_pdata,order_stardata;
  static bool first,prerror,was_obj = 0;
  
***************
*** 219,227 ****
       tty_on();
       do {
  		  c = getchr();
!      } while (iscntrl(c) && c!='\033');
       switch (c) {
! 		case '\033': { shiptype *tempship;
  		    tempship = oldship;
  		    ship = oldship;
  		    oldship = tempship;
--- 219,227 ----
       tty_on();
       do {
  		  c = getchr();
!      } while (iscntrl(c) && c!='');
       switch (c) {
! 		case '': { shiptype *tempship;
  		    tempship = oldship;
  		    ship = oldship;
  		    oldship = tempship;
***************
*** 246,251 ****
--- 246,252 ----
  				case OTYPE_TRANSDEV:
  					printw("Ready to receive.");
  					break;
+ 				default: break;
  			      }
  		      }
  		    }
***************
*** 262,273 ****
  		      ungetc(c,stdin);
  		      scanw("%43s",s); 
  		      move(Erry,0); refresh();
  		      where = Getplace(s, 1);
  		      if (!where.err) {
  			    ship->whatdest = where.level;
  			    ship->deststar = where.snum;
  			    ship->destpnum = where.pnum;
! 			    ship->destshipno = where.shipno;
  		      }
  		     }
  		     tty_on();
--- 263,282 ----
  		      ungetc(c,stdin);
  		      scanw("%43s",s); 
  		      move(Erry,0); refresh();
+ 		      Ignore_filelocks = 1;
  		      where = Getplace(s, 1);
+ 		      Ignore_filelocks = 0;
  		      if (!where.err) {
+ 			if (where.level==LEVEL_SHIP) {
+ 			  /*if (sqrt(Distsq(ship->xpos, ship->ypos, where.shipptr->xpos,where.shipptr->ypos))<SYSTEMSIZE*2.0) {*/
+ 			    	ship->destshipno = where.shipno;
+ 				ship->whatdest = LEVEL_SHIP;
+ 			  /*} else { move(Erry,0); printw("Ship #%d can't find ship #%d.", shipno, where.shipno); }*/
+ 			} else {
  			    ship->whatdest = where.level;
  			    ship->deststar = where.snum;
  			    ship->destpnum = where.pnum;
! 			}
  		      }
  		     }
  		     tty_on();
***************
*** 517,522 ****
--- 526,532 ----
  int sig,code;
  struct sigcontext *scp;
  {
+  Ignore_filelocks = 0;
   close(order_shdata);
   close(order_pdata);
   close(order_stardata);
*** ../../GB/prof.c	Wed Apr 26 11:22:55 1989
--- prof.c	Mon May  1 08:22:10 1989
***************
*** 40,45 ****
--- 40,52 ----
  		Race->conditions[NITROGEN], Race->conditions[SULFUR] );
    printf("     helium %02d%%     other %02d%%\n", 
  		Race->conditions[HELIUM], Race->conditions[OTHER]);
+   printf("Sector type preferences:\n");
+   printf(" %c %.1f%%      %c %.1f%%\n", CHAR_SEA, Race->likes[DES_SEA]*100,
+ 	CHAR_GAS, Race->likes[DES_GAS]*100);
+   printf(" %c %.1f%%      %c %.1f%%\n", CHAR_MOUNT, Race->likes[DES_MOUNT]*100,
+ 	CHAR_LAND, Race->likes[DES_LAND]*100);
+   printf(" %c %.1f%%      %c %.1f%%\n", CHAR_ICE, Race->likes[DES_ICE]*100,
+ 	CHAR_PLATED, Race->likes[DES_PLATED]*100);
  
   printf("\nRelations with other races:\nPlayer	relation\n");
   numraces = Numraces();
*** ../../GB/rand.c	Wed Apr 26 11:22:56 1989
--- rand.c	Mon May  1 08:22:11 1989
***************
*** 20,32 ****
  
  float float_rand()
  {
! 	return (-(float)random()/ 2147483648);
  }
  
  int int_rand(low,hi)
  register int low,hi;
  {
!     return( (hi<=low) ? low : (float_rand() * (hi - low + 1)) + low );
  }
  
  
--- 20,32 ----
  
  float float_rand()
  {
! 	return random()/ 2147483648.0;
  }
  
  int int_rand(low,hi)
  register int low,hi;
  {
!     return( (hi<=low) ? low : (random() % (hi - low + 1)) + low );
  }
  
  
*** ../../GB/scrap.c	Wed Apr 26 11:23:00 1989
--- scrap.c	Mon May  1 08:22:13 1989
***************
*** 61,71 ****
   getplanet(scrap_pdata, &planet, Stars[s->storbits]->planetpos[s->pnumorbits]);
  
   scrapval = Shipdata[s->type][ABIL_COST] * .75 + s->resource;
  
   tty_on();
   printf("%s #%d:original cost: %d\n",
  	Shipnames[s->type], shipno, Shipdata[s->type][ABIL_COST]);
!  printf("         scrap value%s: %d. Junk (y/n)?",
  	s->resource ? "(with stockpile) " : "", scrapval);
  
   if (getchr()!='y') {
--- 61,74 ----
   getplanet(scrap_pdata, &planet, Stars[s->storbits]->planetpos[s->pnumorbits]);
  
   scrapval = Shipdata[s->type][ABIL_COST] * .75 + s->resource;
+  if (s->type==OTYPE_VN)
+ 	scrapval += (s->orders.object.number-1) * Shipdata[s->type][ABIL_COST];
  
   tty_on();
   printf("%s #%d:original cost: %d\n",
  	Shipnames[s->type], shipno, Shipdata[s->type][ABIL_COST]);
!  printf("        %s scrap value%s: %d. Junk (y/n)?", 
! 	s->type==OTYPE_VN ? "total" : "",
  	s->resource ? "(with stockpile) " : "", scrapval);
  
   if (getchr()!='y') {
*** ../../GB/shlmisc.c	Wed Apr 26 14:39:13 1989
--- shlmisc.c	Mon May  1 08:22:14 1989
***************
*** 5,10 ****
--- 5,11 ----
  
  #include "vars.h"
  #include "races.h"
+ #include <curses.h>
  #include <signal.h>
  #include <ctype.h>
  #include <stdio.h>
***************
*** 174,179 ****
    for (j=0; j<i; j++)
  	putchar('.');
    for (j=0; j<i; j++)
! 	putchar('\010');
  }
  
--- 175,199 ----
    for (j=0; j<i; j++)
  	putchar('.');
    for (j=0; j<i; j++)
! 	putchar('\010');
  }
  
+ /* tty stuff -- set cbreak mode */
+ tty_on()
+ {
+ #ifdef UV_4.3
+ 	cbreak();
+ #else			/* this is 4.2 */
+  	crmode();
+ #endif
+ 
+ }
+ 
+ tty_off()
+ {
+ #ifdef UV_4.3
+ 	nocbreak();
+ #else			/* this is 4.2 */
+ 	nocrmode();
+ #endif
+ }
*** ../../GB/shootblast.c	Wed Apr 26 11:23:01 1989
--- shootblast.c	Mon May  1 08:22:15 1989
***************
*** 14,28 ****
  bool Nuked[MAXPLAYERS];	/* who was nuked on the planet/ship */
  
  
! int shoot(from,to,fpl,tpl,sectorx,sectory,strength, sdatamod,starmod,planetmod)
  placetype from,*to;
  planettype *fpl,*tpl;
  int sectorx,sectory,strength;
  	/* reported modifications to datafiles */
  bool *sdatamod,*starmod, *planetmod;
  {
  int i;
! double dist,xfrom,yfrom,xto,yto;
  double str;
  float r;
  
--- 14,29 ----
  bool Nuked[MAXPLAYERS];	/* who was nuked on the planet/ship */
  
  
! int shoot(from,to,fpl,tpl,sectorx,sectory,strength, dist, sdatamod,starmod,planetmod)
  placetype from,*to;
  planettype *fpl,*tpl;
  int sectorx,sectory,strength;
+ float *dist;
  	/* reported modifications to datafiles */
  bool *sdatamod,*starmod, *planetmod;
  {
  int i;
! double xfrom,yfrom,xto,yto;
  double str;
  float r;
  
***************
*** 42,55 ****
     yto = to->shipptr->ypos;
   }
  
!  dist = sqrt( (double)Distsq(xfrom, yfrom, xto, yto)) + 50.0;
! 						/* (adjust for too close) */
!  if (dist > SYSTEMSIZE) {
  	 /* out of range */
  	return -1;
   } else {
  
!      str = (double)strength * FACTOR_DAMAGE / dist;
       printf(" str = %f, rad = %f\n",str,str*FACTOR_DESTPLANET);
  
       r = blast(to, tpl, sectorx, sectory, str * FACTOR_DESTPLANET, str);
--- 43,55 ----
     yto = to->shipptr->ypos;
   }
  
!  *dist = sqrt( (double)Distsq(xfrom, yfrom, xto, yto));
!  if (*dist > SYSTEMSIZE*2.0) {
  	 /* out of range */
  	return -1;
   } else {
  
!      str = strength * FACTOR_DAMAGE / (*dist+50.0);
       printf(" str = %f, rad = %f\n",str,str*FACTOR_DESTPLANET);
  
       r = blast(to, tpl, sectorx, sectory, str * FACTOR_DESTPLANET, str);
*** ../../GB/teleg_send.c	Wed Apr 26 11:23:03 1989
--- teleg_send.c	Mon May  1 08:22:17 1989
***************
*** 5,10 ****
--- 5,11 ----
  
  
  #include "tweakables.h"
+ #include "files.h"
  #include <stdio.h>
  #include <ctype.h>
  #include <strings.h>