[comp.sources.games] v08i026: GB2 - Galactic Bloodshed, an empire-like war game [Ver. 1.0], Patch1a

billr@saab.CNA.TEK.COM (Bill Randle) (09/15/89)

Submitted-by: VANCLEEF@mps.ohio-state.edu
Posting-number: Volume 8, Issue 26
Archive-name: GB2/Patch1a
Patch-To: GB2: Volume 7, Issue 44-51

	[This patch brings the Ohio State version of GB upto version
	 1.1.  As Garrett mentioned in another newsgroup, the complete
	 source can still be obtained directly from him for a period
	 of time.  The original GB2 posting is, of course, available
	 from any of the c.s.g. archive sites....    -br]

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 4)."
# Contents:  patches01a
# Wrapped by billr@saab on Fri Sep 15 08:21:43 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patches01a' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'patches01a'\"
else
echo shar: Extracting \"'patches01a'\" \(52745 characters\)
sed "s/^X//" >'patches01a' <<'END_OF_FILE'
X*** ../../GB2/GB.c	Wed Jul  5 15:14:58 1989
X--- GB.c	Fri Sep 15 07:27:43 1989
X***************
X*** 23,34 ****
X  
X  main()
X  {
X! int notified=0,s,i;
X  char c,commstr[MAXCOMMSTRSIZE];
X  int maim_handler();
X  int maim_stardata;
X  
X- 
X  	setegid(PLAYER_GROUP_ID);
X  
X  	srandom(getpid());
X--- 23,33 ----
X  
X  main()
X  {
X! int notified=0, s, i;
X  char c,commstr[MAXCOMMSTRSIZE];
X  int maim_handler();
X  int maim_stardata;
X  
X  	setegid(PLAYER_GROUP_ID);
X  
X  	srandom(getpid());
X***************
X*** 53,75 ****
X  	close(maim_stardata);
X  
X  	passwd = getpwuid(geteuid());
X  	if (!strcmp(passwd->pw_name, PLAYER_GOD)) {
X  
X  	printf("Enter password: ");
X  	scanf("%s",commstr);
X  		getchr();
X  
X! 	if(!strcmp(commstr, GOD_PASSWORD)){
X  
X! 		God = 1;
X! 		printf("Login as what player? ");
X  		scanf("%s",commstr);
X  		getchr();
X  
X! 		} else 
X! 			sprintf(commstr,"%s", passwd->pw_name);
X! 	}else
X! 		sprintf(commstr,"%s", passwd->pw_name);
X  
X  	i = Getracenum(commstr);
X  
X--- 52,72 ----
X  	close(maim_stardata);
X  
X  	passwd = getpwuid(geteuid());
X+ 
X  	if (!strcmp(passwd->pw_name, PLAYER_GOD)) {
X  
X  	printf("Enter password: ");
X  	scanf("%s",commstr);
X  		getchr();
X+ 		}
X  
X! 	if(!strcmp(commstr, GOD_PASSWORD)) God = 1;
X  
X! 		printf("Who are you (this is/will (be) your password)? ");
X  		scanf("%s",commstr);
X  		getchr();
X  
X! /*			sprintf(commstr,"%s", passwd->pw_name); */
X  
X  	i = Getracenum(commstr);
X  
X***************
X*** 78,84 ****
X  	 else 
X  		getrace(&Race,i);
X  	Playernum = Race->Playernum;
X! 	if (God)
X  		printf("Logging in as player %d.\n",Playernum);
X  
X  	if(God) {
X--- 75,81 ----
X  	 else 
X  		getrace(&Race,i);
X  	Playernum = Race->Playernum;
X! 
X  		printf("Logging in as player %d.\n",Playernum);
X  
X  	if(God) {
X*** ../../GB2/Makefile	Thu Jul  6 07:32:22 1989
X--- Makefile	Fri Sep 15 07:29:04 1989
X***************
X*** 1,5 ****
X  # Galactic Bloodshed (Robert Chansky, smq@b)
X! # Makefile              (modified by billr@saab.cna.tek.com, 4/26/89)
X  
X  # what version of UNIX we are running on.
X  UV = VER_4_3
X--- 1,5 ----
X  # Galactic Bloodshed (Robert Chansky, smq@b)
X! # Makefile
X  
X  # what version of UNIX we are running on.
X  UV = VER_4_3
X***************
X*** 6,19 ****
X  #UV = VER_4_2
X  # You might want to get rid of the -pipe -g, since these are for development. 
X  CFLAGS = -D$(UV) -pipe -g 
X! #CFLAGS = -D$(UV) -g 
X! #CFLAGS = -D$(UV) -O
X  
X- # destination directories
X- # GLIB should match the directory in the PATH macro of files.h
X- GBIN = /usr/games
X- GLIB = /usr/games/lib/GB
X- 
X  # objects for shell
X  SHOBJS =  getplace.o	\
X  	read_teleg.o	\
X--- 6,13 ----
X  #UV = VER_4_2
X  # You might want to get rid of the -pipe -g, since these are for development. 
X  CFLAGS = -D$(UV) -pipe -g 
X! #-D$(UV) -O
X  
X  # objects for shell
X  SHOBJS =  getplace.o	\
X  	read_teleg.o	\
X***************
X*** 20,26 ****
X  	autoreport.o	\
X  	shootblast.o	\
X  	docommand.o	\
X- 	explore.o	\
X  	telegram.o	\
X  	mobiliz.o	\
X  	shlmisc.o	\
X--- 14,19 ----
X***************
X*** 30,36 ****
X  	autoshoot.o	\
X  	dosector.o	\
X  	relation.o	\
X- 	enslave.o	\
X  	doturn.o	\
X  	doship.o	\
X  	zoom.o		\
X--- 23,28 ----
X***************
X*** 85,92 ****
X  	makeplanet.o	\
X  	shootblast.o	\
X  	autoshoot.o	\
X- 	moveship.o	\
X- 	explore.o	\
X  	relation.o	\
X  	dosector.o	\
X  	declare.o	\
X--- 77,82 ----
X***************
X*** 114,120 ****
X  	shootblast.o	\
X  	makeplanet.o	\
X  	examine.o	\
X- 	enslave.o	\
X  	launch.o	\
X  	build.o		\
X  	order.o		\
X--- 104,109 ----
X***************
X*** 190,200 ****
X  ${VOBJS}: vars.h
X  ${SHIPOBJS}: vars.h ships.h
X  ${FOBJS}: files.h
X- ${NOOBJS}: tweakables.h
X  moveship.o : vars.h ships.h shipdata.h
X  doturn.o doplanet.o power.o doship.o files_shl.o makeuniv.o : power.h
X  #sizes : vars.h ships.h races.h
X! #	 sizes.c
X  
X  
X  # make data files program
X--- 179,188 ----
X  ${VOBJS}: vars.h
X  ${SHIPOBJS}: vars.h ships.h
X  ${FOBJS}: files.h
X  moveship.o : vars.h ships.h shipdata.h
X  doturn.o doplanet.o power.o doship.o files_shl.o makeuniv.o : power.h
X  #sizes : vars.h ships.h races.h
X! #	cc sizes.c
X  
X  
X  # make data files program
X***************
X*** 205,211 ****
X  # the daemon
X  GB_daemon : ${DOBJS}
X  	cc -o GB_daemon ${DOBJS}  -lm
X! doturn.o doship.o doplanet.o moveship.o moveplanet.o : doturn.h
X  
X  # more clone
X  mor : more.c
X--- 193,199 ----
X  # the daemon
X  GB_daemon : ${DOBJS}
X  	cc -o GB_daemon ${DOBJS}  -lm
X! doturn.o doship.o doplanet.o : doturn.h
X  
X  # more clone
X  mor : more.c
X***************
X*** 212,218 ****
X  	cc -o mor more.c
X  
X  chmod:
X- 	cd $(GLIB)
X  	chmod ag+xs GB
X  	chmod g+rwx Data Data/* Data/Tele/*
X  	chmod a+rx Docs Docs/*
X--- 200,205 ----
X***************
X*** 221,227 ****
X  #	chmod ga+rwx Data Data/* Data/Tele/*
X  
X  start:
X- 	cd $(GLIB)
X  	/bin/rm -f Data/spitup
X  	GB_daemon \>\& Data/spitup
X  
X--- 208,213 ----
X***************
X*** 258,271 ****
X  # install the game for public use.
X  install:
X  	make
X!         cp GB $(GBIN)
X!         -mkdir $(GLIB)
X!         cp exam.dat enroll.dat $(GLIB)
X!         -mkdir $(GLIB)/Docs
X!         -cp Docs/* $(GLIB)/Docs
X!         -compress $(GLIB)/Docs/* $(GLIB)/enroll.dat
X!         make clear
X  	makeuniv < planet.list
X  	make chmod
X- 
X  
X--- 244,252 ----
X  # install the game for public use.
X  install:
X  	make
X! 	mkdir Docs
X! 	mv *.doc Docs
X! 	compress Docs/* enroll.dat
X  	makeuniv < planet.list
X  	make chmod
X  
X*** ../../GB2/README	Wed Jul  5 15:14:27 1989
X--- README	Fri Sep 15 08:12:44 1989
X***************
X*** 1,3 ****
X--- 1,8 ----
X+ 	GB2 is an enhancement/bug fixed version of GB that was
X+ originally written by Robert Chansky at the University of California
X+ at Santa Cruz.  The enhancements and modifications were written by
X+ Garrett Van Cleef at Ohio State University.  The text that
X+ follows is from the original README file.
X  
X  	This is a game of interstellar exploration/conquest.  By the time I
X  realized there really wasn't going to be much fighting going on in the game, I
X***************
X*** 34,40 ****
X  a game keeper's satisfaction.
X  
X  
X! 	GB can be found via anonymous ftp to the machine ssyx.ucsc.edu
X  (128.114.133.1).  (Look in pub/games).
X  
X  
X--- 39,45 ----
X  a game keeper's satisfaction.
X  
X  
X! 	The original GB can be found via anonymous ftp to the machine ssyx.ucsc.edu
X  (128.114.133.1).  (Look in pub/games).
X  
X  
X***************
X*** 128,138 ****
X  but have a longer range.  range is proportional to your tech.  These
X  were put in so people don't have to send ships out blindly.  Once you've
X  surveyed someplace with one of these, you can then map and 'cs' to it.
X- 	New ships: orbital mind control lasers, some ground, sea, and air
X- transportation ships (which don't work yet).
X- 
X- 	There is now an 'enslave' command.  Check the docs.
X- 
X  	tactical works better, it uses planets as part of its display.
X  	the bug where sector maps got randomly switched around sometimes
X  halting the game, has been fixed.  This was a MAJOR pain, and the main problem
X--- 133,138 ----
X*** ../../GB2/autoreport.c	Wed Jul  5 15:15:00 1989
X--- autoreport.c	Fri Sep 15 07:27:43 1989
X***************
X*** 1,5 ****
X  
X- 
X  /*
X   * Galactic Bloodshed (Robert Chansky, smq@b)
X   * autoreport.c -- tell server to generate a report for each planet
X--- 1,4 ----
X*** ../../GB2/autoshoot.c	Wed Jul  5 15:15:01 1989
X--- autoshoot.c	Fri Sep 15 07:27:44 1989
X***************
X*** 12,17 ****
X--- 12,18 ----
X  extern char telegram_buf[];
X  extern racetype *races[];
X  
X+ int fire_toshdata;
X  
X  /* ship #shipno bombards planet, then sends telegrams alerting whom it
X   *	may concern.
X***************
X*** 21,26 ****
X--- 22,28 ----
X  planettype *planet;
X  {
X  int x,y,oldown,numdest,found=0;
X+ int i, stren, stren0, stren1, stren2, sh;
X  float dist;
X  char buf[200];
X  bool whocares;
X***************
X*** 47,53 ****
X    if (found) {
X  	placetype from,to;
X  	int str;
X!     str = MIN(Shipdata[ship->type][ABIL_GUNS], ship->destruct);
X  	/* save owner of destroyed sector */
X      if (str) {
X      	oldown = Sector(*planet,x,y).owner;
X--- 49,55 ----
X    if (found) {
X  	placetype from,to;
X  	int str;
X!     str = MIN(Shipdata[ship->type][ABIL_GUNS]*(100-ship->damage)/100., ship->destruct);
X  	/* save owner of destroyed sector */
X      if (str) {
X      	oldown = Sector(*planet,x,y).owner;
X***************
X*** 86,91 ****
X--- 88,158 ----
X  		Shipnames[ship->type], shipno, x, y, numdest);
X      	teleg_add(buf,telegram_buf);
X      	teleg_send(TELEG_PLAYER_AUTO, oldown, telegram_buf);
X+ 
X+ /* enemy planet retaliates along with defending forces */
X+ 
X+ 
X+ 	stren = 0;
X+ 	for(i=1; i<= Numraces(); i++)
X+ 		if(i!=Playernum && planet->info[i-1].numsectsowned) {
X+ 			stren0 = 0;
X+ 			stren1 = 0;
X+ 			stren2 = 0;
X+ 	openshdata(&fire_toshdata);
X+ 		/* go through linked list of ships orbiting the planet */
X+ 		/* only add ships ordered to defend planet */
X+ 		sh = planet->ships;
X+ 
X+ 	while(sh)  {
X+ 
X+ 		free(to.shipptr);
X+ 		(void)getship(fire_toshdata, &(to.shipptr), sh);
X+ 		if(to.shipptr->owner == i && to.shipptr->protect.planet) {
X+ 
X+ 		stren0 = MIN(to.shipptr->destruct,
X+ 			Shipdata[to.shipptr->type][ABIL_GUNS]*(100-to.shipptr->damage)/100.);
X+ 		stren1 += stren0;
X+ 		to.shipptr->destruct -= stren0;
X+ 		putship(fire_toshdata, to.shipptr, sh);
X+ 
X+ 			}
X+ 		sh = to.shipptr->nextship;
X+ 		}
X+ 		close(fire_toshdata);
X+ /* add planet defense strength */
X+ 
X+ 		stren2 = planet->info[i-1].destruct;
X+ 		if(stren2 > PLAN_FIRE_LIM)
X+ 			stren2 = PLAN_FIRE_LIM;
X+ 		planet->info[i-1].destruct -= stren2;
X+ 
X+ 		stren += stren1;
X+ 		stren += stren2;
X+       	/* tell the involved players about it.. */
X+ 
X+ 			
X+ /* execute attack */
X+ 
X+     	numdest = shoot(to, &from, planet, (planettype *)NULL, x,y, stren, &dist, 
X+ 		&whocares,&whocares,&whocares, 0);	/* (0=dont get smap) */
X+ 
X+     	teleg_add("",telegram_buf);
X+     	sprintf(buf,"REPORT: Ship #%d Bombardment.\n\n",shipno);
X+     	teleg_add(buf,telegram_buf);
X+ 	sprintf(buf,"Defending ships return fire total strength %d \n",stren1);
X+ 	teleg_add(buf,telegram_buf);
X+ 	sprintf(buf,"Planet returns fire with strength %d \n",stren2);
X+ 	teleg_add(buf,telegram_buf);
X+ 	sprintf(buf,"Total defense strength %d \n",stren);
X+ 	teleg_add(buf,telegram_buf);
X+ 	sprintf(buf,"%d percent damage to Ship #%d \n",numdest,shipno);
X+ 	teleg_add(buf,telegram_buf);
X+ 
X+     	teleg_send(TELEG_PLAYER_AUTO, ship->owner, telegram_buf);
X+     	teleg_send(TELEG_PLAYER_AUTO, oldown, telegram_buf);
X+ 
X+ 
X+ }
X  
X      } else {
X  		/* no weapons! */
X*** ../../GB2/build.c	Wed Jul  5 15:15:03 1989
X--- build.c	Fri Sep 15 07:27:46 1989
X***************
X*** 171,178 ****
X  	/* find sector to build on (if planet) */
X  
X       if (Dir.level!=LEVEL_SHIP)
X- 	do {
X  
X  	   if (argn>1)
X  		sscanf(args[argn-1], "%d,%d", &x, &y);
X  	   else
X--- 171,179 ----
X  	/* find sector to build on (if planet) */
X  
X       if (Dir.level!=LEVEL_SHIP)
X  
X+ /*	do { */
X+ {
X  	   if (argn>1)
X  		sscanf(args[argn-1], "%d,%d", &x, &y);
X  	   else
X***************
X*** 183,198 ****
X  	   opensectdata(&build_sectdata);
X  	   getsector(build_sectdata, &sect, planet->sectormappos+(y*planet->Maxx+x)*sizeof(sectortype) );
X  	   close(build_sectdata);
X! 	   if (sect->owner!=Playernum) {
X  		printf("You don't own that sector.\n");
X  		if (argn>1)
X  			build_handler();
X  		exit(0);
X  	   }
X  	   free(sect);
X  
X-       	} while ( sect->owner != Playernum );
X  
X  		/* keep people from fucking up the data files */
X  	mask = sigblock(SIGINT | SIGQUIT | SIGSTOP);
X  
X--- 184,209 ----
X  	   opensectdata(&build_sectdata);
X  	   getsector(build_sectdata, &sect, planet->sectormappos+(y*planet->Maxx+x)*sizeof(sectortype) );
X  	   close(build_sectdata);
X! 	   if (sect->owner!=Playernum && i != OTYPE_REPAIR) {
X  		printf("You don't own that sector.\n");
X  		if (argn>1)
X  			build_handler();
X  		exit(0);
X  	   }
X+ 	   if (sect->owner == 0 && i == OTYPE_REPAIR) 
X+ 			{
X+ 			 sect->is_wasted = 0;
X+ 			 sect->eff = 10;
X+ 	   opensectdata(&build_sectdata);
X+ 	   putsector(build_sectdata, sect, planet->sectormappos+(y*planet->Maxx+x)*sizeof(sectortype) );
X+ 	   close(build_sectdata);
X+ }
X  	   free(sect);
X+ }
X+ /*      	} while ( sect->owner != Playernum ); */ /* do while taken out by gvc */
X  
X  
X+ 
X  		/* keep people from fucking up the data files */
X  	mask = sigblock(SIGINT | SIGQUIT | SIGSTOP);
X  
X***************
X*** 209,220 ****
X  	}
X  
X  	s.speed = 0;
X- /*	s.speed = MAX(2, Shipdata[s.type][ABIL_SPEED]); */
X  	 	/* starting speed default */
X  	s.owner = Playernum;
X  	s.mass = (float)Shipdata[i][ABIL_MASS];
X  	s.fuel = s.destruct = s.resource = 0;
X  	s.is_docked = 1;
X  	if (Dir.level==LEVEL_SHIP) {
X  		s.whatdest = LEVEL_SHIP;
X  		s.destshipno = Dir.shipno;
X--- 220,232 ----
X  	}
X  
X  	s.speed = 0;
X  	 	/* starting speed default */
X  	s.owner = Playernum;
X  	s.mass = (float)Shipdata[i][ABIL_MASS];
X  	s.fuel = s.destruct = s.resource = 0;
X  	s.is_docked = 1;
X+ 	s.is_alive = 1;
X+ 
X  	if (Dir.level==LEVEL_SHIP) {
X  		s.whatdest = LEVEL_SHIP;
X  		s.destshipno = Dir.shipno;
X***************
X*** 229,255 ****
X  	s.storbits = Dir.snum;
X  	s.pnumorbits = Dir.pnum;
X  	s.rad = 0;
X! 	if (Shipdata[s.type][ABIL_MAXCREW]==0 || s.type==OTYPE_TRANSDEV)
X! 		s.damage = 0;
X! 	else
X! 		s.damage = 50;
X  
X! 	if (has_switch(&s)) {
X  		s.on = 0;
X! 	}
X  	switch (s.type) {
X  	    case OTYPE_VN:
X! 		s.orders.object.number = 1;	/* one of them */
X! 		s.orders.object.number2 = 1;	/* we have an assignment */
X  		s.on = 1;
X  		break;
X  	    case STYPE_MINE:
X! 		s.orders.object.number = 100;	/* trigger radius */
X  		printf("Mine disarmed.\nTrigger radius set to 100.\n");
X  		break;
X  	    case OTYPE_TRANSDEV:
X  		printf("Receive OFF.  Change with order.\n");
X  		break;
X  	    case OTYPE_AP:
X  		printf("Processor OFF.\n");
X  		break;
X--- 241,277 ----
X  	s.storbits = Dir.snum;
X  	s.pnumorbits = Dir.pnum;
X  	s.rad = 0;
X! 	s.damage = Shipdata[s.type][ABIL_DAMAGE];
X  
X! 	s.object.number = 0;
X! 	s.object.number2 = 0;
X! 	s.object.number3 = 0;
X! 	s.object.number4 = 0;
X! 
X! 	if (has_switch(&s))
X  		s.on = 0;
X! 		printf("Ship name: ");
X! 		dots(11);
X! 		gets(s.name);
X! 
X  	switch (s.type) {
X  	    case OTYPE_VN:
X! 		s.object.number = 1;	/* one of them */
X! 		s.object.number2 = 1;	/* we have an assignment */
X  		s.on = 1;
X  		break;
X  	    case STYPE_MINE:
X! 		s.object.number = 100;	/* trigger radius */
X  		printf("Mine disarmed.\nTrigger radius set to 100.\n");
X  		break;
X  	    case OTYPE_TRANSDEV:
X  		printf("Receive OFF.  Change with order.\n");
X  		break;
X+ 	    case OTYPE_REPAIR:
X+ 			s.damage = 100;
X+ 			s.is_alive = 0;
X+ 			s.notified = 0;
X+ 		break;
X  	    case OTYPE_AP:
X  		printf("Processor OFF.\n");
X  		break;
X***************
X*** 258,266 ****
X  				planet->conditions[TOXIC]);
X  		if (planet->conditions[TOXIC] > 20) {
X  			planet->conditions[TOXIC] -= 20;
X! 			s.orders.object.number = 20;
X  		} else {
X! 			s.orders.object.number = planet->conditions[TOXIC];
X  			planet->conditions[TOXIC] = 0;
X  		}
X  		printf(" now %d.\n",planet->conditions[TOXIC]);
X--- 280,288 ----
X  				planet->conditions[TOXIC]);
X  		if (planet->conditions[TOXIC] > 20) {
X  			planet->conditions[TOXIC] -= 20;
X! 			s.object.number = 20;
X  		} else {
X! 			s.object.number = planet->conditions[TOXIC];
X  			planet->conditions[TOXIC] = 0;
X  		}
X  		printf(" now %d.\n",planet->conditions[TOXIC]);
X***************
X*** 284,295 ****
X  
X  		/* check for dead ships in the data files */
X  
X- 	if (Dir.level==LEVEL_SHIP)
X- 		Locks(1);
X- 	else
X- 		openshdata(&build_shdata);
X  
X! 	if ( (shipno = getdeadship(build_shdata)) == -1) {
X  			/* otherwise recycle topmost dead ship in data file. */
X  			/* no dead ships to recycle */
X  		shipno = Numships(build_shdata) + 1;
X--- 306,315 ----
X  
X  		/* check for dead ships in the data files */
X  
X  
X! 		openshdata(&build_shdata);
X! 	while( (shipno = getdeadship(build_shdata)) == 0){ };
X! 	if ( shipno == -1) {
X  			/* otherwise recycle topmost dead ship in data file. */
X  			/* no dead ships to recycle */
X  		shipno = Numships(build_shdata) + 1;
X***************
X*** 322,328 ****
X  	putship(build_shdata,&s,shipno);
X  	close(build_shdata);
X  
X-     Locks(0);
X      if (Dir.level==LEVEL_SHIP && dirship->whatorbits==LEVEL_UNIV)
X  	    deductAPs(APcount, 0, 1);
X      else
X--- 342,347 ----
X*** ../../GB2/daemon.c	Wed Jul  5 15:15:05 1989
X--- daemon.c	Fri Sep 15 07:27:47 1989
X***************
X*** 17,23 ****
X  {
X   struct tm *t;
X   long clk;
X!  int turn=0,update=0,fd2;
X   FILE *fd;
X  
X   if (fork()) exit();		/* detach from shell */
X--- 17,23 ----
X  {
X   struct tm *t;
X   long clk;
X!  int turn=0,update=0,fd2,first;
X   FILE *fd;
X  
X   if (fork()) exit();		/* detach from shell */
X***************
X*** 28,33 ****
X--- 28,34 ----
X    fd2 = open("/dev/tty", O_RDWR);	/* disassociate from tty */
X    ioctl(fd2, TIOCNOTTY, 0);
X    close(fd2);
X+ 	first=1;
X  
X   while (1) {
X  
X***************
X*** 37,43 ****
X     printf("day %d,hour %d,min %d,sec %d\n",
X  		t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
X  
X!    if ( (t->tm_hour % UPDATE_TIME)==0 && update!=t->tm_hour) {
X     	update = t->tm_hour;
X  	doturn(0);	/* not from shell */
X  	fd = fopen(PROFDATAFL, "a");
X--- 38,45 ----
X     printf("day %d,hour %d,min %d,sec %d\n",
X  		t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
X  
X!    if ( (t->tm_hour % UPDATE_TIME)==0 && update!=t->tm_hour || first) {
X! 	first = 0;
X     	update = t->tm_hour;
X  	doturn(0);	/* not from shell */
X  	fd = fopen(PROFDATAFL, "a");
X*** ../../GB2/doplanet.c	Wed Jul  5 15:15:08 1989
X--- doplanet.c	Fri Sep 15 07:27:51 1989
X***************
X*** 1,5 ****
X  /*
X!  * Galactic Bloodshed (Robert Chansky, smq@b)
X   *  doplanet.c -- do one turn on a planet.
X   */ 
X  
X--- 1,5 ----
X  /*
X!  * galactic Bloodshed (Robert Chansky, smq@b)
X   *  doplanet.c -- do one turn on a planet.
X   */ 
X  
X***************
X*** 70,80 ****
X  {
X  int shipno,x,y,nukex,nukey;
X  int o=0,j;
X  char *nukem;
X  reg int i;
X  sectortype *p;
X  shiptype *ship;
X! float madd,fadd;
X  int sectdata,timer=20;
X  int oldplanetpopn, oldplanetmaxpopn;
X  bool allamoeba=1,allmod=0,allexp=0;
X--- 70,81 ----
X  {
X  int shipno,x,y,nukex,nukey;
X  int o=0,j;
X+ int aliensects,stolenres,stolendes;
X  char *nukem;
X  reg int i;
X  sectortype *p;
X  shiptype *ship;
X! float madd,fadd,stolenfuel;
X  int sectdata,timer=20;
X  int oldplanetpopn, oldplanetmaxpopn;
X  bool allamoeba=1,allmod=0,allexp=0;
X***************
X*** 99,105 ****
X  
X    shipno = planet->ships;
X    while (shipno) {
X! 	if ( ((ship = ships[shipno])!=NULL) && !ship->is_dead && !ship->rad) {
X  	   if ( !(ship->is_docked && ship->whatdest==LEVEL_PLAN)) {
X  		 /* add fuel to ships orbiting gas giants */
X  		if (planet->type == TYPE_GASGIANT && !is_object(ship)) {
X--- 100,106 ----
X  
X    shipno = planet->ships;
X    while (shipno) {
X! 	if ( ((ship = ships[shipno])!=NULL) && ship->is_alive && !ship->rad) {
X  	   if ( !(ship->is_docked && ship->whatdest==LEVEL_PLAN)) {
X  		 /* add fuel to ships orbiting gas giants */
X  		if (planet->type == TYPE_GASGIANT && !is_object(ship)) {
X***************
X*** 126,138 ****
X  	    if (ship->type == OTYPE_VN) {
X  			/* Von Neumann machine */
X  	     if (ship->is_docked && ship->whatdest==LEVEL_PLAN) {
X! 		if (ship->orders.object.number2) {
X  			/* we are currently trying to construct another
X  			   machine */
X  		  reg int x,y,a,dum;
X  		     /* spread VN's all over the planet */
X! 		  for (i=1; i<253 && i<=ship->orders.object.number; i++) {
X! 		    a = round_rand(sqrt((double)ship->orders.object.number));
X  		    x = mod(int_rand((int)(ship->xpos-a),(int)(ship->xpos+a)),(int)planet->xpos,dum);
X  		    y = mod(int_rand((int)(ship->ypos-a),(int)(ship->ypos+a)),(int)planet->ypos,dum);
X  
X--- 127,139 ----
X  	    if (ship->type == OTYPE_VN) {
X  			/* Von Neumann machine */
X  	     if (ship->is_docked && ship->whatdest==LEVEL_PLAN) {
X! 		if (ship->object.number2) {
X  			/* we are currently trying to construct another
X  			   machine */
X  		  reg int x,y,a,dum;
X  		     /* spread VN's all over the planet */
X! 		  for (i=1; i<253 && i<=ship->object.number; i++) {
X! 		    a = round_rand(sqrt((double)ship->object.number));
X  		    x = mod(int_rand((int)(ship->xpos-a),(int)(ship->xpos+a)),(int)planet->xpos,dum);
X  		    y = mod(int_rand((int)(ship->ypos-a),(int)(ship->ypos+a)),(int)planet->ypos,dum);
X  
X***************
X*** 142,148 ****
X  		  if (ship->resource >= Shipdata[OTYPE_VN][ABIL_COST]) {
X  		   ship->resource -= Shipdata[OTYPE_VN][ABIL_COST];
X  		   ship->mass -= Shipdata[OTYPE_VN][ABIL_COST]*MASS_RESOURCE;
X! 		   if (ship->orders.object.number > int_rand(3,50)) {
X  			/* enough to start a new VN 'herd'. build another
X  			   ship. */
X  		     	 shiptype *s2;
X--- 143,149 ----
X  		  if (ship->resource >= Shipdata[OTYPE_VN][ABIL_COST]) {
X  		   ship->resource -= Shipdata[OTYPE_VN][ABIL_COST];
X  		   ship->mass -= Shipdata[OTYPE_VN][ABIL_COST]*MASS_RESOURCE;
X! 		   if (ship->object.number > int_rand(3,50)) {
X  			/* enough to start a new VN 'herd'. build another
X  			   ship. */
X  		     	 shiptype *s2;
X***************
X*** 169,184 ****
X  			s2->type = OTYPE_VN;
X  			s2->mass = Shipdata[OTYPE_VN][ABIL_MASS];
X  			s2->owner = (random()&01) ? ship->owner : 1;
X! 			s2->orders.object.number = 1;
X  				/* is not building any VN's */
X  				/* no assignment now */
X! 			ship->orders.object.number2 = 0;
X  				/* turn it on */
X  			s2->on = 1;
X  		 } else {
X  			/* we don't have too many in this herd, so make 
X  			   some more */
X! 			ship->orders.object.number++;
X  		 }
X  		} else {
X  			/* try and make some resources by ourselves.
X--- 170,185 ----
X  			s2->type = OTYPE_VN;
X  			s2->mass = Shipdata[OTYPE_VN][ABIL_MASS];
X  			s2->owner = (random()&01) ? ship->owner : 1;
X! 			s2->object.number = 1;
X  				/* is not building any VN's */
X  				/* no assignment now */
X! 			ship->object.number2 = 0;
X  				/* turn it on */
X  			s2->on = 1;
X  		 } else {
X  			/* we don't have too many in this herd, so make 
X  			   some more */
X! 			ship->object.number++;
X  		 }
X  		} else {
X  			/* try and make some resources by ourselves.
X***************
X*** 191,203 ****
X  		   in doship */
X  	       }
X  	      } else {	/* orbiting a planet */
X! 		if (ship->orders.object.number2) {
X  		 if (ship->whatdest==LEVEL_PLAN && ship->deststar==starnum && 
X  			ship->destpnum==planetnum) {
X  				/* we just arrived from somewhere */
X  		    if (planet->type==TYPE_GASGIANT) {
X  		      if (ship->fuel >= Shipdata[OTYPE_VN][ABIL_FUELCAP])
X! 			ship->orders.object.number2 = 0;
X  				/* gas giants are of no use to us;
X  				   doship() will head us somewhere else */
X  		    } else {
X--- 192,204 ----
X  		   in doship */
X  	       }
X  	      } else {	/* orbiting a planet */
X! 		if (ship->object.number2) {
X  		 if (ship->whatdest==LEVEL_PLAN && ship->deststar==starnum && 
X  			ship->destpnum==planetnum) {
X  				/* we just arrived from somewhere */
X  		    if (planet->type==TYPE_GASGIANT) {
X  		      if (ship->fuel >= Shipdata[OTYPE_VN][ABIL_FUELCAP])
X! 			ship->object.number2 = 0;
X  				/* gas giants are of no use to us;
X  				   doship() will head us somewhere else */
X  		    } else {
X***************
X*** 206,213 ****
X  			printf(" VN finding a place to land\n");
X  			Getxysect(planet,&x,&y,1);
X  			while ((d=Getxysect(planet,&x,&y,0)) && 
X! 					Sector(*planet,x,y).resource==0)
X  					 ;
X  			if (d) {
X  				printf(" VN landed.\n");
X  				ship->is_docked = 1;
X--- 207,215 ----
X  			printf(" VN finding a place to land\n");
X  			Getxysect(planet,&x,&y,1);
X  			while ((d=Getxysect(planet,&x,&y,0)) && 
X! 					Sector(*planet,x,y).resource == 0)
X  					 ;
X+ 
X  			if (d) {
X  				printf(" VN landed.\n");
X  				ship->is_docked = 1;
X***************
X*** 218,229 ****
X  
X  				ship->xpos = x;
X  				ship->ypos = y;
X! 				ship->orders.object.number2 = 1;
X  				/* number2 means we are currently
X  				   busy here */
X  			} else {
X  				 /* head somewhere else */
X! 				ship->orders.object.number2 = 0;
X  				printf("turning off; can't find place 2land\n");
X  			}
X  		    }
X--- 220,231 ----
X  
X  				ship->xpos = x;
X  				ship->ypos = y;
X! 				ship->object.number2 = 1;
X  				/* number2 means we are currently
X  				   busy here */
X  			} else {
X  				 /* head somewhere else */
X! 				ship->object.number2 = 0;
X  				printf("turning off; can't find place 2land\n");
X  			}
X  		    }
X***************
X*** 242,248 ****
X  	   }
X  
X  			/* bombard the planet */
X! 	   if (can_bombard(ship) && ship->orders.o.bombard
X  			&& ship->whatorbits==LEVEL_PLAN
X  			&& ship->whatdest==LEVEL_PLAN
X  			&& ship->deststar==starnum
X--- 244,250 ----
X  	   }
X  
X  			/* bombard the planet */
X! 	   if (can_bombard(ship) && ship->bombard
X  			&& ship->whatorbits==LEVEL_PLAN
X  			&& ship->whatdest==LEVEL_PLAN
X  			&& ship->deststar==starnum
X***************
X*** 281,286 ****
X--- 283,289 ----
X  	x = int_rand(0,planet->Maxx-1);
X  	y = int_rand(0,planet->Maxy-1);
X  	planet->info[Stinfo[starnum][planetnum].Thing_add-1].numsectsowned = 1;
X+ 
X  	planet->info[Stinfo[starnum][planetnum].Thing_add-1].explored = 1;
X  	Sector(*planet,x,y).des = 
X  			races[Stinfo[starnum][planetnum].Thing_add]->likesbest;
X***************
X*** 320,326 ****
X  
X  /* gvc hack */
X  	if (planet->info[i-1].numsectsowned) {
X- 	printf("numsects %d %d \n",i,planet->info[i-1].numsectsowned);
X  		Compat[i] = compatibility(planet, races[i]);
X  		planet->info[i-1].numsectsowned = 0;
X  	}
X--- 323,328 ----
X***************
X*** 327,334 ****
X--- 329,338 ----
X  
X  
X  printf(" while %d\n",Getxysect(planet, &x, &y, 1));	/* reset */
X+ 
X  while (Getxysect(planet, &x, &y, 0)) {
X         p = &Sector(*planet,x,y);
X+ 
X         if (p->amoeba) {
X  	    planet->info[1-1].numsectsowned++;
X  	    allamoeba &= 1;
X***************
X*** 420,429 ****
X  	   for (i=1; !Claims && !allexp && i<=Num_races; i++) {
X  	     printf("pl %d numsects %d compat %f\n",i,planet->info[i-1].numsectsowned,Compat[i]);
X  		 /* sectors have been modified for this player*/
X! 		 /* & planet is compatible enough */
X! 	     if (planet->info[i-1].numsectsowned && Compat[i] > 40.0)
X! 	      while (!Claims && !allexp && --timer) {
X! 		 printf("exploring ... timer=%d\n",timer);
X  		o = 1;
X  		Getxysect(planet, &x, &y, 1);
X  		while (!Claims && Getxysect(planet, &x, &y, 0)) {
X--- 424,433 ----
X  	   for (i=1; !Claims && !allexp && i<=Num_races; i++) {
X  	     printf("pl %d numsects %d compat %f\n",i,planet->info[i-1].numsectsowned,Compat[i]);
X  		 /* sectors have been modified for this player*/
X! 
X! 	     if (planet->info[i-1].numsectsowned)
X! 	      while (!Claims && !allexp && timer>0) {
X! 		timer -= 1;
X  		o = 1;
X  		Getxysect(planet, &x, &y, 1);
X  		while (!Claims && Getxysect(planet, &x, &y, 0)) {
X***************
X*** 433,439 ****
X  			if (( (Sectinfo[x][y].explored==i) && !(random()&02) ) 
X  			    && (!p->owner && !p->is_wasted && !p->amoeba && p->des==races[i]->likesbest) ) {
X  				 /*  explorations have found an island */
X- 			printf(" got here 2\n");
X  				printf("found island @ %d,%d\n",x,y);
X  				Claims = i;
X  				 /* give them some free people there */
X--- 437,442 ----
X***************
X*** 440,447 ****
X  				p->popn = races[i]->number_sexes;
X  				p->owner = i;
X  				tot_captured = 1;
X! 			} else
X  				explore(planet, p, x, y, i);
X  		}
X  		allexp |= o;	/* all sectors explored for this player */
X  
X--- 443,452 ----
X  				p->popn = races[i]->number_sexes;
X  				p->owner = i;
X  				tot_captured = 1;
X! 			} else {
X! 
X  				explore(planet, p, x, y, i);
X+ 				}
X  		}
X  		allexp |= o;	/* all sectors explored for this player */
X  
X***************
X*** 542,547 ****
X--- 547,591 ----
X  
X  
X     for (i=1; i<=Num_races; i++) {
X+ 
X+ /* check to see if your guys steal all alien resources on the planet,
X+ 	this requires that you be the only one inhabiting the planet */
X+ 	if(planet->info[i-1].numsectsowned > 0){
X+ 
X+ 		aliensects = 0;
X+ 		stolenres =0;
X+ 		stolendes =0;
X+ 		stolenfuel = 0.0;
X+ 		for (j=1; j<=Num_races; j++)
X+ 			if(j!=i){
X+ 			aliensects += planet->info[j-1].numsectsowned;
X+ 			stolenres += planet->info[j-1].resource;
X+ 			stolendes += planet->info[j-1].destruct;
X+ 			stolenfuel += planet->info[j-1].fuel;
X+ 			}
X+ 
X+ 		if(aliensects ==0 && (stolenres !=0 || stolendes !=0 || stolenfuel != 0.0) ) {
X+ 		for (j=1; j<=Num_races; j++)
X+ 			if(j!=i)
X+ 			{
X+ 		planet->info[j-1].resource = 0;
X+ 		planet->info[j-1].destruct = 0;
X+ 		planet->info[j-1].fuel = 0.0;
X+ 			}
X+ 		planet->info[i-1].resource += stolenres;
X+ 		planet->info[i-1].destruct += stolendes;
X+ 		planet->info[i-1].fuel += stolenfuel;
X+ /* notify player of recovered stockpiles */
X+ 	  teleg_add("",telegram_buf);	/* clear buf */
X+ 	  sprintf(buf,"****** Report: Planet /%s/%s ******\n\n", 
X+ 		Stars[starnum]->name, Stars[starnum]->pnames[planetnum] );
X+ 	  teleg_add(buf,telegram_buf);
X+ 	  sprintf(buf," %d resources \n %d destruct \n %4.2f fuel recovered from alien stock piles",stolenres,stolendes,stolenfuel);
X+ 	  teleg_add(buf,telegram_buf);
X+ 	  teleg_send(TELEG_PLAYER_AUTO, i, telegram_buf);
X+ 		}
X+ 			}
X+ 
X  	Power[i].resource += planet->info[i-1].resource;
X  	Power[i].destruct += planet->info[i-1].destruct;
X  	Power[i].fuel += planet->info[i-1].fuel;
X***************
X*** 557,564 ****
X     }
X  
X  	if(planet->maxpopn > 0)
X!    planet->conditions[TOXIC] = planet->conditions[TOXIC] + 
X  		     planet->popn / planet->maxpopn;
X  
X  	/* deal with enslaved planets */
X     if (planet->slaved_to) {
X--- 601,609 ----
X     }
X  
X  	if(planet->maxpopn > 0)
X! 	   planet->conditions[TOXIC] = planet->conditions[TOXIC] + 
X  		     planet->popn / planet->maxpopn;
X+ 
X  
X  	/* deal with enslaved planets */
X     if (planet->slaved_to) {
X*** ../../GB2/dosector.c	Wed Jul  5 15:15:09 1989
X--- dosector.c	Fri Sep 15 07:27:52 1989
X***************
X*** 19,46 ****
X  reg planettype *planet;
X  reg sectortype *s;
X  {
X  reg float factor;
X  reg int eff;
X  reg struct plinfo *pinf;
X  reg int new;
X  
X  
X- 	 factor = logscale(s->popn) * s->resource * races[s->owner]->metabolism;
X- 
X  	 pinf = &planet->info[s->owner-1];
X  
X- 	 prod_fuel[s->owner] = round_rand( s->eff * factor * FUEL_PRODUCTION
X- 		  * ((planet->type==TYPE_GASGIANT)* 4+1) );
X  
X! 	 prod_res[s->owner] = round_rand( s->eff * factor * RESOURCE_PRODUCTION 
X! 		  * ((planet->type==TYPE_ASTEROID) * 1 + 1) * (100 - s->mobilization)/100.);
X  
X! 	 prod_destruct[s->owner] = round_rand( s->eff * factor * DEST_PRODUCTION
X! 		  * ((planet->type==TYPE_ASTEROID) * 1 + 1) * s->mobilization /100.);
X  
X  
X- 	     /* deplete resources for making weapons - removed by gvc*/
X- 	 tot_resdep = 0;
X  
X  		/* increase mobilization to planetary quota */
X  	 if (s->mobilization < pinf->mob_set)
X--- 19,46 ----
X  reg planettype *planet;
X  reg sectortype *s;
X  {
X+ 
X+ int fac,ss;
X+ 
X  reg float factor;
X  reg int eff;
X  reg struct plinfo *pinf;
X  reg int new;
X  
X+ 	 factor = .01 * log1p(1.*s->eff) * log1p(1.*s->popn) * s->resource * races[s->owner]->metabolism * ((s->des==DES_GAS)*4+1);
X  
X  	 pinf = &planet->info[s->owner-1];
X  
X  
X! 	 prod_fuel[s->owner] = round_rand( factor * FUEL_PRODUCTION
X! 		* 100 * ((s->des==DES_GAS)*3+1) );
X  
X! 	 prod_res[s->owner] = round_rand( factor * RESOURCE_PRODUCTION 
X! 			* (100 - s->mobilization) );
X  
X+ 	 prod_destruct[s->owner] = round_rand( factor * DEST_PRODUCTION
X+ 			* s->mobilization );
X  
X  
X  		/* increase mobilization to planetary quota */
X  	 if (s->mobilization < pinf->mob_set)
X***************
X*** 50,55 ****
X--- 50,62 ----
X  			prod_mob++;
X  	 	}
X  
X+ 		/* decrease mobilization to planetary quota */
X+ 	 if (s->mobilization > pinf->mob_set)
X+ 		if (pinf->resource + prod_res[s->owner] > 0) {
X+ 			s->mobilization--;
X+ 			prod_res[s->owner] -= round_rand(MOB_COST);
X+ 			prod_mob++;
X+ 	 	}
X  
X  
X  	  /* add mobilization to get average mobilization */
X***************
X*** 62,68 ****
X  		prod_eff += s->eff = 1;
X  	   } else {
X  	     prod_eff += 
X! 		(eff = round_rand(races[s->owner]->metabolism*s->popn*EFF_PROD/100.0));
X  		if (s->eff+eff >= 100) {
X  			s->eff=100;	/* dont go past 100%*/
X  			prod_eff -= s->eff+eff-100;
X--- 69,75 ----
X  		prod_eff += s->eff = 1;
X  	   } else {
X  	     prod_eff += 
X! 		(eff = round_rand(races[s->owner]->metabolism*5*log1p(1.*s->popn)*EFF_PROD/100.0));
X  		if (s->eff+eff >= 100) {
X  			s->eff=100;	/* dont go past 100%*/
X  			prod_eff -= s->eff+eff-100;
X***************
X*** 72,85 ****
X  	   }
X  	}
X  
X! 	  /* add population to sector */
X! 	 if (s->popn >= races[s->owner]->number_sexes)
X! 	       s->popn += round_rand((float)s->popn * races[s->owner]->birthrate
X! 			* Compat[s->owner] / 100.0 
X! 			* (50.0 - planet->conditions[TOXIC]) / 50.0 );
X  	 else
X  		s->popn = round_rand(s->popn * .099);
X! 
X  }
X  
X  
X--- 79,101 ----
X  	   }
X  	}
X  
X! 	 if (s->popn >= races[s->owner]->number_sexes) {
X! 	fac =round_rand( .01 * (100. - planet->conditions[TOXIC])
X! 		* maxsupport(races[s->owner],s,Compat[s->owner]) );
X! 
X! 	ss = round_rand(
X! 		races[s->owner]->birthrate * (1.*fac - 1.*s->popn) );
X! 
X!      s->popn = MAX(0, s->popn + ss);
X! 
X! 	if(s->popn == 0) s->owner=0;
X! 
X! 			}
X  	 else
X+ 		{
X  		s->popn = round_rand(s->popn * .099);
X! 		if(s->popn = 0)s->owner=0;
X! 		}
X  }
X  
X  
X***************
X*** 101,113 ****
X  reg sectortype *s;
X  reg int x,y;
X  {
X! reg int peep;
X  
X  if (pl->is_sheep)
X  	return;		/* no one wants to go anywhere */
X  
X     /* peep == number of people who want to move */
X! if (s->amoeba || (peep = round_rand((float)s->popn * races[s->owner]->nonhomebodies)) ) {
X   if (pl->type==TYPE_GASGIANT && s->des==DES_GAS && !int_rand(0,20)) {
X  	 /* random 'wind' sweeps people in this sector, somewhere else */
X  	  reg int x2,y2;
X--- 117,132 ----
X  reg sectortype *s;
X  reg int x,y;
X  {
X! int peep;
X  
X  if (pl->is_sheep)
X  	return;		/* no one wants to go anywhere */
X  
X     /* peep == number of people who want to move */
X! 
X! 	peep = round_rand((float)s->popn * races[s->owner]->nonhomebodies);
X! 
X! if (s->amoeba || peep) { 
X   if (pl->type==TYPE_GASGIANT && s->des==DES_GAS && !int_rand(0,20)) {
X  	 /* random 'wind' sweeps people in this sector, somewhere else */
X  	  reg int x2,y2;
X***************
X*** 257,263 ****
X  
X  	/* explore sectors surrounding sectors currently explored. */
X   if (Sectinfo[x][y].explored) {
X- 
X      Sectinfo[mod(x-1,planet->Maxx,d)][y].explored = p;
X      Sectinfo[mod(x+1,planet->Maxx,d)][y].explored = p;
X      if (y==0) {
X--- 276,281 ----
X*** ../../GB2/doship.c	Wed Jul  5 15:15:11 1989
X--- doship.c	Fri Sep 15 07:27:54 1989
X***************
X*** 20,40 ****
X   int sh,sh2,j,shfdata;
X   char buf[300];
X  
X-  if (!ship->is_dead && (ship->owner == 0 && ship->type != OTYPE_VN
X- 		&& ship->type != OTYPE_AMOEBA) )
X- /* a hack by gvc to get rid of owner 0, space pod which occasionally
X- gets created for unknown reason (and consequentially causes problems) */
X- 	{
X- 	ship->is_dead = 1;
X- 	ship->owner = 1;
X  
X! } /* used to counteract bugs */
X  
X-  if (!ship->is_dead) {
X- 
X  		/* add ships, popn to total count to add AP's */
X  	if (ship->type==OTYPE_VN)
X! 		Power[ship->owner].ships_owned += ship->orders.object.number;
X  	else
X  		Power[ship->owner].ships_owned++;
X  	Power[ship->owner].resource += ship->resource;
X--- 20,31 ----
X   int sh,sh2,j,shfdata;
X   char buf[300];
X  
X  
X!  if (ship->is_alive) {
X  
X  		/* add ships, popn to total count to add AP's */
X  	if (ship->type==OTYPE_VN)
X! 		Power[ship->owner].ships_owned += ship->object.number;
X  	else
X  		Power[ship->owner].ships_owned++;
X  	Power[ship->owner].resource += ship->resource;
X***************
X*** 46,52 ****
X  		 Sdatapopns[ship->owner] += ship->popn;
X  	} else {
X  		starnumships[ship->storbits][ship->owner] += 
X! 			(ship->type==OTYPE_VN) ? ship->orders.object.number : 1;
X  	         /* add popn of ships to popn */
X  	        starpopns[ship->storbits][ship->owner] += ship->popn;
X  		 /* set inhabited for ship */
X--- 37,43 ----
X  		 Sdatapopns[ship->owner] += ship->popn;
X  	} else {
X  		starnumships[ship->storbits][ship->owner] += 
X! 			(ship->type==OTYPE_VN) ? ship->object.number : 1;
X  	         /* add popn of ships to popn */
X  	        starpopns[ship->storbits][ship->owner] += ship->popn;
X  		 /* set inhabited for ship */
X***************
X*** 55,71 ****
X  
X  		/* repair radiation */
X        if (ship->rad) {
X  			/* kill off some people */
X! 		ship->popn = round_rand(ship->popn * .90);
X  		if (ship->rad > REPAIR_RATE)
X  			ship->rad -= REPAIR_RATE;
X  		else
X  			ship->rad = 0;
X        } else {
X! 		/* irradiated ships are immobile.. */
X! 
X  		/* make sure of an update if someones bombarding the planet */
X! 	if (can_bombard(ship) && ship->orders.o.bombard &&
X  			ship->whatorbits==LEVEL_PLAN)
X  		Stinfo[ship->storbits][ship->pnumorbits].inhab = 1;
X  
X--- 46,62 ----
X  
X  		/* repair radiation */
X        if (ship->rad) {
X+ 			/* irradiated ships are immobile.. */
X  			/* kill off some people */
X! 		ship->popn = round_rand(ship->popn * .80);
X  		if (ship->rad > REPAIR_RATE)
X  			ship->rad -= REPAIR_RATE;
X  		else
X  			ship->rad = 0;
X        } else {
X! 		
X  		/* make sure of an update if someones bombarding the planet */
X! 	if (can_bombard(ship) && ship->bombard &&
X  			ship->whatorbits==LEVEL_PLAN)
X  		Stinfo[ship->storbits][ship->pnumorbits].inhab = 1;
X  
X***************
X*** 85,91 ****
X  
X        case OTYPE_CANIST:
X  	   if (ship->whatorbits == LEVEL_PLAN && !ship->is_docked) { short *t;
X! 	      if (--ship->orders.object.number) {
X  		  t = &Stinfo[ship->storbits][ship->pnumorbits].temp_add;
X  		  if (*t - 10 < -120)
X  			*t = -120;
X--- 76,82 ----
X  
X        case OTYPE_CANIST:
X  	   if (ship->whatorbits == LEVEL_PLAN && !ship->is_docked) { short *t;
X! 	      if (--ship->object.number) {
X  		  t = &Stinfo[ship->storbits][ship->pnumorbits].temp_add;
X  		  if (*t - 10 < -120)
X  			*t = -120;
X***************
X*** 110,116 ****
X        case STYPE_MINE:
X  		/* check around and see if we should explode. */
X  	   if (ship->on) {
X! 		int rad=0; float xd,yd; int p;
X  	     if (ship->whatorbits==LEVEL_STAR)
X  	     	sh = Stars[ship->storbits]->ships;
X  	     else if (ship->whatorbits==LEVEL_PLAN)
X--- 101,107 ----
X        case STYPE_MINE:
X  		/* check around and see if we should explode. */
X  	   if (ship->on) {
X! 		int rad=0; int dam=0; float xd,yd; int p;
X  	     if (ship->whatorbits==LEVEL_STAR)
X  	     	sh = Stars[ship->storbits]->ships;
X  	     else if (ship->whatorbits==LEVEL_PLAN)
X***************
X*** 125,131 ****
X  		yd = ships[sh]->ypos - ship->ypos;
X  		if ( (ships[sh]->type != STYPE_MINE) &&
X  			(ships[sh]->owner != Playernum) && 
X! 			( xd*xd+yd*yd < ship->orders.object.number * ship->orders.object.number) )
X  			rad = 1;
X  		sh = ships[sh]->nextship;
X  	     }
X--- 116,122 ----
X  		yd = ships[sh]->ypos - ship->ypos;
X  		if ( (ships[sh]->type != STYPE_MINE) &&
X  			(ships[sh]->owner != Playernum) && 
X! 			( xd*xd+yd*yd < ship->object.number * ship->object.number) )
X  			rad = 1;
X  		sh = ships[sh]->nextship;
X  	     }
X***************
X*** 139,158 ****
X  			xd = ships[sh2]->xpos - ship->xpos;
X  			yd = ships[sh2]->ypos - ship->ypos;
X  
X  			if ( ships[sh2]->popn != 0 ) {
X! 				      rad = round_rand(ship->destruct
X! 		* (2500/(xd*xd + yd*yd + 1.)) );
X  		      	      if (ships[sh2]->rad + rad > 100)
X  				        ships[sh2]->rad = 100;
X  				      else
X  				        ships[sh2]->rad += rad;
X  
X  				      teleg_add("",telegram_buf);
X! 				      sprintf(buf, "BULLETIN!\n ship #%d irradiated by mine at system /%s - dosage %d percent", 
X! 	sh2, Stars[ship->storbits]->name, rad);
X  				      teleg_add(buf, telegram_buf);
X  				      teleg_send(TELEG_PLAYER_AUTO,ships[sh2]->owner,telegram_buf);
X  				}
X  			sh2 = ships[sh2]->nextship;
X  		}
X  	     }
X--- 130,178 ----
X  			xd = ships[sh2]->xpos - ship->xpos;
X  			yd = ships[sh2]->ypos - ship->ypos;
X  
X+ 		if (!ship->mine.mode) {
X  			if ( ships[sh2]->popn != 0 ) {
X! 				      rad = round_rand(ship->destruct * 
X! 		(5./(float)Shipdata[ships[sh2]->type][ABIL_ARMOR]) * (2500/(xd*xd + yd*yd + 1.)) );
X  		      	      if (ships[sh2]->rad + rad > 100)
X  				        ships[sh2]->rad = 100;
X  				      else
X  				        ships[sh2]->rad += rad;
X  
X+ 				if(rad)
X+ 					{
X  				      teleg_add("",telegram_buf);
X! 				      sprintf(buf, "BULLETIN!\n %s #%d irradiated by mine at system /%s - dosage %d percent", 
X! 	Shipnames[ships[sh2]->type], sh2, Stars[ship->storbits]->name, rad);
X  				      teleg_add(buf, telegram_buf);
X  				      teleg_send(TELEG_PLAYER_AUTO,ships[sh2]->owner,telegram_buf);
X+ 			}
X+ 
X+ 				} /* ships radiated */
X+ 			 } else {
X+ 				      rad = round_rand(ship->destruct * 
X+ 		(5./(float)Shipdata[ships[sh2]->type][ABIL_ARMOR]) * 
X+ 		(2500/(xd*xd + yd*yd + 1.)) );
X+ 
X+ 		dam = int_rand(0,rad);
X+ 
X+ 				if(dam)
X+ 					{
X+ 		ships[sh2]->damage += dam;
X+ 					teleg_add("",telegram_buf);
X+ 
X+ 				      sprintf(buf, "BULLETIN!\n %s #%d damaged by mine at system /%s - %d %% damage", 
X+ 	Shipnames[ships[sh2]->type], sh2, Stars[ship->storbits]->name, dam);
X+ 				      teleg_add(buf, telegram_buf);
X+ 		if(ships[sh2]->damage >= 100)
X+ 			{
X+ 				kill_ship(ships[sh2]);
X+ 		sprintf(buf, " %s #%d DESTROYED",Shipnames[ships[sh2]->type],sh2);
X  				}
X+ 				      teleg_send(TELEG_PLAYER_AUTO,ships[sh2]->owner,telegram_buf);
X+ 				} /* ships attacked by explosive */
X+ 		}
X+ 
X  			sh2 = ships[sh2]->nextship;
X  		}
X  	     }
X***************
X*** 160,179 ****
X  	   break;
X  
X        case STYPE_MIRROR:
X! 	  switch (ship->orders.aimed_at.level) {
X  	   case LEVEL_SHIP: /* ship aimed at is a legal ship now */
X  			  /* if in the same system */
X  		   if ( (ship->whatorbits==LEVEL_STAR || ship->whatorbits==LEVEL_PLAN)
X! 			&& (ships[ship->orders.aimed_at.shipno]!=NULL)
X! 			&& (ships[ship->orders.aimed_at.shipno]->whatorbits==LEVEL_STAR ||
X! 			ships[ship->orders.aimed_at.shipno]->whatorbits==LEVEL_PLAN)
X! 			&& ship->storbits == ships[ship->orders.aimed_at.shipno]->storbits 
X! 			&& !ships[ship->orders.aimed_at.shipno]->is_dead )
X! 				ships[ship->orders.aimed_at.shipno]->damage += 10;
X  		break;
X  	   case LEVEL_PLAN: { reg short *t; reg int i;
X! 		  t = &Stinfo[ship->storbits][ship->orders.aimed_at.pnum].temp_add;
X! 		  i = ship->orders.aimed_at.intensity;
X  		  if (*t + i > 120)
X  			*t = 120;
X  		  else if (*t + i < -120)
X--- 180,199 ----
X  	   break;
X  
X        case STYPE_MIRROR:
X! 	  switch (ship->aimed_at.level) {
X  	   case LEVEL_SHIP: /* ship aimed at is a legal ship now */
X  			  /* if in the same system */
X  		   if ( (ship->whatorbits==LEVEL_STAR || ship->whatorbits==LEVEL_PLAN)
X! 			&& (ships[ship->aimed_at.shipno]!=NULL)
X! 			&& (ships[ship->aimed_at.shipno]->whatorbits==LEVEL_STAR ||
X! 			ships[ship->aimed_at.shipno]->whatorbits==LEVEL_PLAN)
X! 			&& ship->storbits == ships[ship->aimed_at.shipno]->storbits 
X! 			&& ships[ship->aimed_at.shipno]->is_alive )
X! 				ships[ship->aimed_at.shipno]->damage += 10;
X  		break;
X  	   case LEVEL_PLAN: { reg short *t; reg int i;
X! 		  t = &Stinfo[ship->storbits][ship->aimed_at.pnum].temp_add;
X! 		  i = ship->aimed_at.intensity;
X  		  if (*t + i > 120)
X  			*t = 120;
X  		  else if (*t + i < -120)
X***************
X*** 183,191 ****
X  		}
X  		break;
X  	   case LEVEL_STAR:
X! 		if (ship->orders.aimed_at.snum>0 && 
X! 			ship->orders.aimed_at.snum<Sdata.numstars)
X! 		    Stars[ship->orders.aimed_at.snum]->stability += random()&01;
X  		break;
X  	   case LEVEL_UNIV:
X  		break;
X--- 203,211 ----
X  		}
X  		break;
X  	   case LEVEL_STAR:
X! 		if (ship->aimed_at.snum>0 && 
X! 			ship->aimed_at.snum<Sdata.numstars)
X! 		    Stars[ship->aimed_at.snum]->stability += random()&01;
X  		break;
X  	   case LEVEL_UNIV:
X  		break;
X***************
X*** 221,227 ****
X  	break;
X  
X       case OTYPE_AMOEBA:	  /* space amoeba */
X! 	if (ship->orders.amoeba.dig) {
X  		/* we are currently digesting a planet. */
X  		if (planets[ship->storbits][ship->pnumorbits]->digested) {
X  			 reg int i,s; reg bool f=0;
X--- 241,247 ----
X  	break;
X  
X       case OTYPE_AMOEBA:	  /* space amoeba */
X! 	if (ship->amoeba.dig) {
X  		/* we are currently digesting a planet. */
X  		if (planets[ship->storbits][ship->pnumorbits]->digested) {
X  			 reg int i,s; reg bool f=0;
X***************
X*** 252,264 ****
X  			/*ship->whatorbits = LEVEL_STAR;
X  			ship->whatdest = LEVEL_UNIV;*/
X  			 /* no longer digesting */
X! 			ship->orders.amoeba.dig = 0;
X  			 /* find a new place to digest */
X! 			ship->orders.amoeba.dest = 0;
X  		}
X  	} else {
X  		 /* we have a planet in mind. */
X! 		if (!ship->orders.amoeba.dest || ship->whatdest==LEVEL_UNIV) {
X  			/* we have orders; wait to get to destination */
X  			if (ship->whatdest == LEVEL_PLAN && 
X  			    ship->whatorbits == LEVEL_PLAN &&
X--- 272,284 ----
X  			/*ship->whatorbits = LEVEL_STAR;
X  			ship->whatdest = LEVEL_UNIV;*/
X  			 /* no longer digesting */
X! 			ship->amoeba.dig = 0;
X  			 /* find a new place to digest */
X! 			ship->amoeba.dest = 0;
X  		}
X  	} else {
X  		 /* we have a planet in mind. */
X! 		if (!ship->amoeba.dest || ship->whatdest==LEVEL_UNIV) {
X  			/* we have orders; wait to get to destination */
X  			if (ship->whatdest == LEVEL_PLAN && 
X  			    ship->whatorbits == LEVEL_PLAN &&
X***************
X*** 267,273 ****
X  				/* we just arrived at our destination. */
X  			   Stinfo[ship->storbits][ship->pnumorbits].amoeba_add = 1;
X  			    /* start digesting */
X! 			   ship->orders.amoeba.dig = 1;
X  			    /* telegram people */
X  			   teleg_add("", telegram_buf);
X  			   teleg_add("BULLETIN!!\n\n ",telegram_buf);
X--- 287,293 ----
X  				/* we just arrived at our destination. */
X  			   Stinfo[ship->storbits][ship->pnumorbits].amoeba_add = 1;
X  			    /* start digesting */
X! 			   ship->amoeba.dig = 1;
X  			    /* telegram people */
X  			   teleg_add("", telegram_buf);
X  			   teleg_add("BULLETIN!!\n\n ",telegram_buf);
X***************
X*** 310,319 ****
X  			ship->destpnum =
X  				int_rand(0,Stars[ship->deststar]->numplanets-1);
X  		 	ship->whatdest = LEVEL_PLAN;
X! 			ship->orders.amoeba.dest = 1;
X  		   } else {
X  			/* no good; find someplace else. */
X! 			ship->orders.amoeba.dest = 0;
X  		   }
X  		   ship->speed = 1;	/* amoebae are very fastidious,too */
X  		   fprintf(stderr,"amoeba #%d headed for star %d, pl %d.\n",shipno,ship->deststar, ship->destpnum);
X--- 330,339 ----
X  			ship->destpnum =
X  				int_rand(0,Stars[ship->deststar]->numplanets-1);
X  		 	ship->whatdest = LEVEL_PLAN;
X! 			ship->amoeba.dest = 1;
X  		   } else {
X  			/* no good; find someplace else. */
X! 			ship->amoeba.dest = 0;
X  		   }
X  		   ship->speed = 1;	/* amoebae are very fastidious,too */
X  		   fprintf(stderr,"amoeba #%d headed for star %d, pl %d.\n",shipno,ship->deststar, ship->destpnum);
X***************
X*** 333,341 ****
X  
X       case OTYPE_OMCL:
X  	 /* orbital mind control laser */
X! 	if (ship->orders.aimed_at.level==LEVEL_PLAN && ship->on &&
X  	    ship->speed==1) {
X! 		planets[ship->orders.aimed_at.snum][ship->orders.aimed_at.pnum]
X  			->is_sheep = 1;
X  	}
X  	break;
X--- 353,361 ----
X  
X       case OTYPE_OMCL:
X  	 /* orbital mind control laser */
X! 	if (ship->aimed_at.level==LEVEL_PLAN && ship->on &&
X  	    ship->speed==1) {
X! 		planets[ship->aimed_at.snum][ship->aimed_at.pnum]
X  			->is_sheep = 1;
X  	}
X  	break;
X***************
X*** 400,406 ****
X  
X     }
X  
X!  } else if (ship->owner ==0 || !ship->notified) {
X  	/* ship is dead -- add to shipfree file, remove from all lists. */
X  	/* if notified, this means it's already been deleted and written. */
X  	ship->notified = 1;
X--- 420,426 ----
X  
X     }
X  
X!  } else if (!ship->is_alive && !ship->notified) {
X  	/* ship is dead -- add to shipfree file, remove from all lists. */
X  	/* if notified, this means it's already been deleted and written. */
X  	ship->notified = 1;
X***************
X*** 413,419 ****
X  
X  
X  do_VN(ship,shipno)
X! shiptype *ship;
X  int shipno;
X  {
X  int r; 
X--- 433,440 ----
X  
X  
X  do_VN(ship,shipno)
X! struct ship *ship;
X! /* shiptype *ship; */
X  int shipno;
X  {
X  int r; 
X***************
X*** 430,436 ****
X  		/* make sure the planet is updated */
X  	Stinfo[ship->storbits][ship->pnumorbits].inhab = 1;
X  	   /* try to launch it */
X! 	if (ship->orders.object.number2 == 0) {	/* launch if no assignment */
X  	  /* steal some fuel from other players,telegram */
X  		int f=0;
X  		if (ship->fuel < Shipdata[OTYPE_VN][ABIL_COST]) {
X--- 451,457 ----
X  		/* make sure the planet is updated */
X  	Stinfo[ship->storbits][ship->pnumorbits].inhab = 1;
X  	   /* try to launch it */
X! 	if (ship->object.number2 == 0) {	/* launch if no assignment */
X  	  /* steal some fuel from other players,telegram */
X  		int f=0;
X  		if (ship->fuel < Shipdata[OTYPE_VN][ABIL_COST]) {
X***************
X*** 450,456 ****
X  			teleg_add(buf,telegram_buf);
X  	    		teleg_send(TELEG_PLAYER_AUTO, f, telegram_buf);
X  	    
X! 		ship->orders.object.number2 = 0; /* no current assignment */
X  		ship->xpos = Stars[ship->storbits]->xpos + planets[ship->storbits][ship->pnumorbits]->xpos + int_rand(-10,10);
X  		ship->ypos = Stars[ship->storbits]->ypos + planets[ship->storbits][ship->pnumorbits]->ypos + int_rand(-10,10);
X  		ship->is_docked = 0;
X--- 471,477 ----
X  			teleg_add(buf,telegram_buf);
X  	    		teleg_send(TELEG_PLAYER_AUTO, f, telegram_buf);
X  	    
X! 		ship->object.number2 = 0; /* no current assignment */
X  		ship->xpos = Stars[ship->storbits]->xpos + planets[ship->storbits][ship->pnumorbits]->xpos + int_rand(-10,10);
X  		ship->ypos = Stars[ship->storbits]->ypos + planets[ship->storbits][ship->pnumorbits]->ypos + int_rand(-10,10);
X  		ship->is_docked = 0;
X***************
X*** 473,479 ****
X  			if (p->info[nums[i]-1].resource)
X  				f = nums[i];
X  		if (f) {
X! 		  	p->info[f-1].resource -= Shipdata[OTYPE_VN][ABIL_COST];
X  			ship->resource += Shipdata[OTYPE_VN][ABIL_COST];
X  			ship->mass += Shipdata[OTYPE_VN][ABIL_COST] * MASS_RESOURCE;
X  			teleg_add("",telegram_buf);
X--- 494,502 ----
X  			if (p->info[nums[i]-1].resource)
X  				f = nums[i];
X  		if (f) {
X! 		  	p->info[f-1].resource -= 
X! 				MIN( p->info[f-1].resource, 
X! 				Shipdata[OTYPE_VN][ABIL_COST]);
X  			ship->resource += Shipdata[OTYPE_VN][ABIL_COST];
X  			ship->mass += Shipdata[OTYPE_VN][ABIL_COST] * MASS_RESOURCE;
X  			teleg_add("",telegram_buf);
X***************
X*** 493,499 ****
X  	}
X    } else {
X  	/* we are not landed */
X! 	if (ship->orders.object.number2) {
X  		/* we've arrived from somewhere -- look for a place to land.  
X  		   this is done on planet turn */
X  	} else {
X--- 516,522 ----
X  	}
X    } else {
X  	/* we are not landed */
X! 	if (ship->object.number2) {
X  		/* we've arrived from somewhere -- look for a place to land.  
X  		   this is done on planet turn */
X  	} else {
X***************
X*** 518,527 ****
X  			ship->destpnum =
X  				int_rand(0,Stars[ship->deststar]->numplanets-1);
X  		 	ship->whatdest = LEVEL_PLAN;
X! 			ship->orders.object.number2 = 1;
X  		} else {
X  			/* no good; find someplace else. */
X! 			ship->orders.object.number2 = 0;
X  		}
X  		ship->speed = 1;	/* VN's are very fastidious */
X  		fprintf(stderr,"VN #%d headed for star %d, pl %d.\n",shipno,ship->deststar, ship->destpnum);
X--- 541,550 ----
X  			ship->destpnum =
X  				int_rand(0,Stars[ship->deststar]->numplanets-1);
X  		 	ship->whatdest = LEVEL_PLAN;
X! 			ship->object.number2 = 1;
X  		} else {
X  			/* no good; find someplace else. */
X! 			ship->object.number2 = 0;
X  		}
X  		ship->speed = 1;	/* VN's are very fastidious */
X  		fprintf(stderr,"VN #%d headed for star %d, pl %d.\n",shipno,ship->deststar, ship->destpnum);
X*** ../../GB2/doturn.c	Wed Jul  5 15:15:12 1989
X--- doturn.c	Fri Sep 15 07:27:56 1989
X***************
X*** 62,72 ****
X--- 62,74 ----
X   ships = (shiptype **)malloc(sizeof(shiptype *) * Num_ships);
X   for (i=1; i<=Num_ships; i++) {
X  	getship(shdata,&ships[i],i);
X+ 
X  	if (ships[i]->whatorbits >= LEVEL_STAR)
X  		StarsInhab[ships[i]->storbits] = 1;
X   }
X   close(shdata);
X  
X+ 
X  	/* get all stars & planets */
X   openstardata(&stardata);
X   getsdata(stardata,&Sdata);
X***************
X*** 86,91 ****
X--- 88,95 ----
X  
X  
X  races[0] = (racetype *)NULL;	/* for maxsupport() */
X+ 
X+ 
X  for (i=1; i<=Num_races; i++) {
X  	getrace(&(races[i]),i);
X  			/* increase tech; change to something else */
X***************
X*** 110,115 ****
X--- 114,121 ----
X  
X       /* insert ship into the list of wherever it might be */
X   for (i=Num_ships; i>=1; i--) {
X+ 	if( !(ships[i]->type == STYPE_FIGHTER &&
X+ 		ships[i]->object.number4) )
X      insert_sh(&Sdata, Stars[ships[i]->storbits], 
X  		planets[ships[i]->storbits][ships[i]->pnumorbits], 
X  		ships[i], i);
X***************
X*** 135,140 ****
X--- 141,147 ----
X  		  for (pppp=0; pppp<Stars[star]->numplanets; pppp++)
X  		   printf(" 8Pointer %d,%d= %x\n",ppp,pppp,planets[ppp][pppp]);*/
X  
X+ 	printf("%s %d\n",Stars[star]->name,i);
X      if (doplanet(star, planets[star][i], i, command)) {
X  	/* save smap gotten & altered by doplanet only if the planet is expl*/
X          opensectdata(&sectdata);
X*** ../../GB2/doturn.h	Wed Jul  5 15:14:53 1989
X--- doturn.h	Fri Sep 15 07:27:36 1989
X***************
X*** 34,37 ****
X  extern int tot_resdep, prod_eff, prod_res[MAXPLAYERS],
X  	prod_fuel[MAXPLAYERS], prod_destruct[MAXPLAYERS], 
X  	tot_captured, prod_mob;
X- 
X--- 34,36 ----
END_OF_FILE
if test 52745 -ne `wc -c <'patches01a'`; then
    echo shar: \"'patches01a'\" unpacked with wrong size!
fi
# end of 'patches01a'
fi
echo shar: End of archive 1 \(of 4\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 2 3 4 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 4 archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0