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

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

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

	[Because the doc files are in a subdirectory, you must use
	 the '-p' option to patch(1) when applying this patch file:
	 e.g., patch -p <patches01d.	-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 4 (of 4)."
# Contents:  patches01d
# Wrapped by billr@saab on Fri Sep 15 08:22:30 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patches01d' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'patches01d'\"
else
echo shar: Extracting \"'patches01d'\" \(51327 characters\)
sed "s/^X//" >'patches01d' <<'END_OF_FILE'
X*** ../../GB2/perm.c	Wed Jul  5 15:15:43 1989
X--- perm.c	Fri Sep 15 07:28:39 1989
X***************
X*** 1,5 ****
X  
X- 
X  /*
X   * Galactic Bloodshed (Robert Chansky, smq@ucscb.ucsc.edu)
X   * perm.c -- randomly permute a sector list
X--- 1,4 ----
X*** ../../GB2/power.c	Wed Jul  5 15:15:43 1989
X--- power.c	Fri Sep 15 07:28:40 1989
X***************
X*** 1,5 ****
X  
X- 
X  /*
X   * Galactic Bloodshed (Robert Chansky, smq@ucscb.ucsc.edu)
X   * power.c -- display power report
X--- 1,4 ----
X*** ../../GB2/power.h	Wed Jul  5 15:14:54 1989
X--- power.h	Fri Sep 15 07:27:37 1989
X***************
X*** 1,5 ****
X  
X- 
X  	/* for power report */
X  struct power {
X  	ul popn;	/* total population */
X--- 1,4 ----
X*** ../../GB2/prof.c	Wed Jul  5 15:15:44 1989
X--- prof.c	Fri Sep 15 07:28:41 1989
X***************
X*** 1,5 ****
X  
X- 
X  /*
X   * Galactic Bloodshed (Robert Chansky, smq@b)
X   * prof.c -- print out racial profile
X--- 1,4 ----
X*** ../../GB2/rst.c	Wed Jul  5 15:15:49 1989
X--- rst.c	Fri Sep 15 07:28:45 1989
X***************
X*** 104,111 ****
X     case LEVEL_SHIP:
X        openshdata(&shdata);
X        Getrship(shdata,rd, Dir.shipno);
X-       close(shdata);
X        ship_report(rd,0);		/* first ship report */
X        break;
X    }
X  
X--- 104,130 ----
X     case LEVEL_SHIP:
X        openshdata(&shdata);
X        Getrship(shdata,rd, Dir.shipno);
X        ship_report(rd,0);		/* first ship report */
X+ 
X+ 	if(rd[0].s->type == STYPE_CARRIER) /* list attached fighter groups */
X+ 	{
X+ 	  openshdata(&shdata);
X+ 	  shn = rd[0].s->object.number;
X+ 	   Num_ships = 0;	
X+ 	  while (shn) {
X+ 	      Getrship(shdata,rd, shn);
X+ 	      shn = rd[Num_ships-1].s->object.number;
X+ 	  }
X+ 	  close(shdata);
X+ 
X+ 	for (i=0; i<Num_ships; i++)
X+ 		ship_report(rd,i);
X+ 
X+ 
X+ 
X+ 	}
X+ 
X+       close(shdata);
X        break;
X    }
X  
X***************
X*** 120,126 ****
X  {
X   shiptype *s;
X   planettype *p;
X!  int shipno;
X   reg int i;
X   placetype where;
X   char orb[PLACENAMESIZE];
X--- 139,145 ----
X  {
X   shiptype *s;
X   planettype *p;
X!  int shipno,test;
X   reg int i;
X   placetype where;
X   char orb[PLACENAMESIZE];
X***************
X*** 133,153 ****
X  
X  
X  	/* launched canister, non-owned ships don't show up */
X!   if ( (rd[indx].type==PLANET && p->info[Playernum-1].numsectsowned)
X!       || (rd[indx].type!=PLANET && s->owner==Playernum && 
X! 	!(s->type==OTYPE_CANIST && !s->is_docked) && !s->is_dead) ) {
X  
X- 
X     if (rd[indx].type!=PLANET && Stock) {
X      if (first) {
X!       printf("  #   mass res  ^res  dest ^dest   fuel ^fuel  crew ^crew dock\n");
X        if (!Ship && !Object)
X  	      first=0;
X      }
X!     /*if (is_object(s) == Object)*/
X!      if (s->owner == Playernum || God) {
X!       printf("%3d %c%5.1f%4u%6d%6u%6d%7.1f%6d%6u%6d%5s",
X! 	shipno, Shipltrs[s->type], s->mass,
X  	s->resource, Shipdata[s->type][ABIL_CARGO],
X  	s->destruct, Shipdata[s->type][ABIL_DESTCAP],
X  	s->fuel, Shipdata[s->type][ABIL_FUELCAP],
X--- 152,171 ----
X  
X  
X  	/* launched canister, non-owned ships don't show up */
X!     if ( (rd[indx].type==PLANET && p->info[Playernum-1].numsectsowned)
X!       || (rd[indx].type!=PLANET && s->owner==Playernum &&
X! 	!(s->type==OTYPE_CANIST && !s->is_docked) && s->is_alive) ) {
X  
X     if (rd[indx].type!=PLANET && Stock) {
X      if (first) {
X!       printf("  #   own mass res  ^res  dest ^dest   fuel ^fuel  crew ^crew dock\n");
X        if (!Ship && !Object)
X  	      first=0;
X      }
X! 
X! 
X!       printf("%3d %c%3d %5.1f%4u%6d%6u%6d%7.1f%6d%6u%6d%5s",
X! 	shipno, Shipltrs[s->type], s->owner,s->mass,
X  	s->resource, Shipdata[s->type][ABIL_CARGO],
X  	s->destruct, Shipdata[s->type][ABIL_DESTCAP],
X  	s->fuel, Shipdata[s->type][ABIL_FUELCAP],
X***************
X*** 154,199 ****
X  	s->popn, Shipdata[s->type][ABIL_MAXCREW],
X  	(s->is_docked) ? ((s->whatdest==LEVEL_PLAN) ? "land" : "dock") :"    ");
X        if (s->type==OTYPE_VN) 
X! 	printf(" * %d",s->orders.object.number);
X        if (s->rad)
X  	printf(" INACTIVE(%d)",s->rad);
X        putchr('\n');
X  
X-     }
X     }
X     if (rd[indx].type!=PLANET && Report) {
X           if (first) {
X! 		 printf("  #    own crew dam dest  fuel speed              orbits           destination\n");
X  		 if (!Ship && !Object)
X  		      first=0;
X  	 }
X  
X! 	if (s->owner == Playernum || God) {
X! 	 /*if (is_object(s) == Object) */
X!  	  printf("%3d %c%5u%4u%4u%5u%7.1f%4u%5s%20s%20s",
X! 		shipno, Shipltrs[s->type],
X! 		s->owner, s->popn, s->damage, s->destruct, s->fuel, s->speed, 
X  		(s->is_docked) ? ( (s->whatdest==LEVEL_SHIP) ? "dock" 
X  			: "land") : "    ",
X  		prin_ship_orbits(s), prin_ship_dest(s) );
X!          if (s->type==OTYPE_VN) printf("* %d",s->orders.object.number);
X        if (s->rad)
X  	printf(" INACTIVE(%d)",s->rad);
X           putchr('\n');
X  
X- 	}
X     }
X  
X     if (Tactical) {
X  
X! 	printf("\n  # typ GUNS dest  fuel dam    x,y abs         x,y rel    orbits\n");
X  
X  	if (rd[indx].type==PLANET) {
X  		/* tac report from planet */
X! 		printf("(planet)%4d%5u%6u    %7.0f,%-7.0f %7.0f,%-7.0f%10s\n",
X  			PLAN_FIRE_LIM, p->info[Playernum-1].destruct,
X  			p->info[Playernum-1].fuel,
X- 			rd[indx].x , rd[indx].y, p->xpos, p->ypos,
X  			Stars[rd[indx].star]->pnames[rd[indx].pnum]);
X  
X  	} else {
X--- 172,215 ----
X  	s->popn, Shipdata[s->type][ABIL_MAXCREW],
X  	(s->is_docked) ? ((s->whatdest==LEVEL_PLAN) ? "land" : "dock") :"    ");
X        if (s->type==OTYPE_VN) 
X! 	printf(" * %d",s->object.number);
X        if (s->rad)
X  	printf(" INACTIVE(%d)",s->rad);
X        putchr('\n');
X  
X     }
X+ 
X+ 
X+ 
X     if (rd[indx].type!=PLANET && Report) {
X           if (first) {
X! 		 printf("  #              crew dam dest  fuel speed          orbits          destination\n");
X  		 if (!Ship && !Object)
X  		      first=0;
X  	 }
X  
X!  	  printf("%3d %c%11s%4u%4u%5u%7.1f%4u%5s%17s%17s",
X! 		shipno, Shipltrs[s->type], s->name,
X! 		s->popn, s->damage, s->destruct, s->fuel, s->speed, 
X  		(s->is_docked) ? ( (s->whatdest==LEVEL_SHIP) ? "dock" 
X  			: "land") : "    ",
X  		prin_ship_orbits(s), prin_ship_dest(s) );
X!          if (s->type==OTYPE_VN) printf("* %d",s->object.number);
X        if (s->rad)
X  	printf(" INACTIVE(%d)",s->rad);
X           putchr('\n');
X  
X     }
X  
X     if (Tactical) {
X  
X! 	printf("\n  # typ      name       GUNS dest  fuel dam     orbits\n");
X  
X  	if (rd[indx].type==PLANET) {
X  		/* tac report from planet */
X! 		printf("(planet)               %4d%5u%6u    %10s\n",
X  			PLAN_FIRE_LIM, p->info[Playernum-1].destruct,
X  			p->info[Playernum-1].fuel,
X  			Stars[rd[indx].star]->pnames[rd[indx].pnum]);
X  
X  	} else {
X***************
X*** 202,213 ****
X   	  where.snum = s->storbits;
X   	  where.pnum = s->pnumorbits;
X  	  sprintf(orb, "%.30s", Dispplace(&where));
X! 	  printf("%3d  %c%6d%5u%6.1f%4u%7.0f,%-7.0f %7.0f,%-7.0f%10s",
X! 		shipno, Shipltrs[s->type], Shipdata[s->type][ABIL_GUNS],
X! 		s->destruct, s->fuel, s->damage, 
X! 		s->xpos, s->ypos, s->xpos-rd[indx].x, s->ypos-rd[indx].y, orb );
X  	  if (s->type == OTYPE_VN)
X! 		printf(" * %d", s->orders.object.number);
X            if (s->rad)
X  		printf(" INACTIVE(%d)",s->rad);
X  	  putchr('\n');
X--- 218,228 ----
X   	  where.snum = s->storbits;
X   	  where.pnum = s->pnumorbits;
X  	  sprintf(orb, "%.30s", Dispplace(&where));
X! 	  printf("%3d  %c%15s%6d%5u%6.1f%4u  %10s",
X! 		shipno, Shipltrs[s->type], s->name,Shipdata[s->type][ABIL_GUNS],
X! 		s->destruct, s->fuel, s->damage, orb );
X  	  if (s->type == OTYPE_VN)
X! 		printf(" * %d", s->object.number);
X            if (s->rad)
X  		printf(" INACTIVE(%d)",s->rad);
X  	  putchr('\n');
X***************
X*** 215,243 ****
X  	}
X  
X  		/* tactical display */
X! 	printf("           Tac display:  # own typ     rng    %%dam %%dam given\n");
X  	for (i=0; i<Num_ships; i++) {
X  	   if (i!=indx && (Dist = sqrt(Distsq(rd[indx].x, rd[indx].y, 
X  				rd[i].x, rd[i].y))) < gun_range(Race, NULL))
X  	      if (rd[i].type==PLANET) {
X  		/* tac report at planet */
X! 		   printf("             %13s(planet)%8.1f      %13.1f\n", 
X! 			Stars[rd[i].star]->pnames[rd[i].pnum], Dist, 
X! 			Kill_factor(Dist, rd[indx].type==PLANET ? PLAN_FIRE_LIM
X! 					: Shipdata[s->type][ABIL_GUNS])
X! 					* FACTOR_DESTPLANET );
X  	      } else {
X  			/* tac report at ship */
X  
X  		if (rd[i].s->owner!=Playernum) {
X! 		   printf("           %15d%4d  %c%9.1f%8u%11.1f%%",
X! 			rd[i].n, rd[i].s->owner, Shipltrs[rd[i].s->type], Dist,
X! 			rd[i].s->damage,
X! 			Kill_factor(Dist, rd[indx].type==PLANET ? PLAN_FIRE_LIM
X! 				: Shipdata[s->type][ABIL_GUNS]) / 
X! 				(float)Shipdata[rd[i].s->type][ABIL_ARMOR]);
X  		   if (rd[i].s->type==OTYPE_VN)
X! 			printf(" * %d", rd[i].s->orders.object.number);
X  		   putchr('\n');
X  		}
X  	      }
X--- 230,253 ----
X  	}
X  
X  		/* tactical display */
X! 	printf("           Tac display:  # own typ        name        rng    %%dam \n");
X  	for (i=0; i<Num_ships; i++) {
X  	   if (i!=indx && (Dist = sqrt(Distsq(rd[indx].x, rd[indx].y, 
X  				rd[i].x, rd[i].y))) < gun_range(Race, NULL))
X  	      if (rd[i].type==PLANET) {
X  		/* tac report at planet */
X! 		   printf("             %13s(planet)               %8.1f\n", 
X! 			Stars[rd[i].star]->pnames[rd[i].pnum], Dist);
X! 
X  	      } else {
X  			/* tac report at ship */
X  
X  		if (rd[i].s->owner!=Playernum) {
X! 		   printf("           %15d%4d  %c%15s%9.1f%8u",
X! 			rd[i].n, rd[i].s->owner, Shipltrs[rd[i].s->type], 
X! 			rd[i].s->name, Dist, rd[i].s->damage);
X  		   if (rd[i].s->type==OTYPE_VN)
X! 			printf(" * %d", rd[i].s->object.number);
X  		   putchr('\n');
X  		}
X  	      }
X***************
X*** 260,268 ****
X   int shdata,pdata;
X  
X   openpdata(&pdata);
X-   Locks(1);
X     getplanet(pdata, &rd[Num_ships].p, Stars[snum]->planetpos[pnum]);
X-   Locks(0);
X   close(pdata);
X   p = rd[Num_ships].p;
X  	/* add this planet into the ship list */
X--- 270,276 ----
X***************
X*** 279,284 ****
X--- 287,293 ----
X     openshdata(&shdata);
X     shn = p->ships;
X     while (shn) {
X+ 
X  	Getrship(shdata, rd, shn);
X  		/* add offsets for docked ships */
X  	if (rd[Num_ships-1].s->is_docked && 
X***************
X*** 303,308 ****
X--- 312,318 ----
X   reg int shn;
X   int i,shdata;
X  
X+ 
X   if (isset(Stars[snum]->inhabited, Playernum)) {
X     openshdata(&shdata);
X     shn = Stars[snum]->ships;
X***************
X*** 324,336 ****
X  {
X  int noerr;
X  
X-    Locks(1);
X      noerr = getship(shdata,&rd[Num_ships].s,shipno);
X!    Locks(0);
X     rd[Num_ships].type = 0;
X     rd[Num_ships].n = shipno;
X     rd[Num_ships].x = rd[Num_ships].s->xpos;
X     rd[Num_ships].y = rd[Num_ships].s->ypos;
X     if (noerr)
X  	Num_ships++;
X  }
X--- 334,348 ----
X  {
X  int noerr;
X  
X      noerr = getship(shdata,&rd[Num_ships].s,shipno);
X! 
X! 
X     rd[Num_ships].type = 0;
X     rd[Num_ships].n = shipno;
X     rd[Num_ships].x = rd[Num_ships].s->xpos;
X     rd[Num_ships].y = rd[Num_ships].s->ypos;
X+ 
X+ 
X     if (noerr)
X  	Num_ships++;
X  }
X*** ../../GB2/scrap.c	Wed Jul  5 15:15:50 1989
X--- scrap.c	Fri Sep 15 07:28:46 1989
X***************
X*** 1,5 ****
X  
X- 
X  /*
X   * Galactic Bloodshed (Robert Chansky, smq@ssyx.ucsc.edu)
X   * scrap.c -- turn a ship to junk
X--- 1,4 ----
X***************
X*** 42,48 ****
X  	scrap_handler();
X   }
X  
X!  if (s->owner!=Playernum || s->is_dead) {
X  	DontOwnErr(shipno);
X  	free(s);
X  	scrap_handler();
X--- 41,47 ----
X  	scrap_handler();
X   }
X  
X!  if (s->owner!=Playernum || !s->is_alive) {
X  	DontOwnErr(shipno);
X  	free(s);
X  	scrap_handler();
X***************
X*** 57,63 ****
X  
X  
X   if (s->whatorbits==LEVEL_PLAN && s->type==OTYPE_TOXWC)
X! 	printf("WARNING: This will release %d toxin points back into the atmosphere!!\n", s->orders.object.number);
X  
X  
X   if ( !(s->is_docked && s->whatdest==LEVEL_PLAN)) {
X--- 56,62 ----
X  
X  
X   if (s->whatorbits==LEVEL_PLAN && s->type==OTYPE_TOXWC)
X! 	printf("WARNING: This will release %d toxin points back into the atmosphere!!\n", s->object.number);
X  
X  
X   if ( !(s->is_docked && s->whatdest==LEVEL_PLAN)) {
X***************
X*** 83,91 ****
X   }
X  
X  	 scrapval = Shipdata[s->type][ABIL_COST] * .75;
X! 	if ( s->type!=OTYPE_VN ) scrapval += s->resource;
X   if (s->type==OTYPE_VN)
X! 	scrapval += .75 * (s->orders.object.number-1) * Shipdata[s->type][ABIL_COST];
X  
X   if (s->is_docked && s->whatdest==LEVEL_PLAN) {
X   	tty_on();
X--- 82,92 ----
X   }
X  
X  	 scrapval = Shipdata[s->type][ABIL_COST] * .75;
X! /*	if ( s->type != OTYPE_VN ) scrapval += s->resource;
X! 	if ( s->type == OTYPE_VN ) scrapval = 0;
X! */
X   if (s->type==OTYPE_VN)
X! 	scrapval += .25 * (s->object.number-1) * Shipdata[s->type][ABIL_COST];
X  
X   if (s->is_docked && s->whatdest==LEVEL_PLAN) {
X   	tty_on();
X***************
X*** 120,129 ****
X  
X       /* distribute poison over planet even if orbiting */
X     if (s->type==OTYPE_TOXWC) {
X! 	if (planet->conditions[TOXIC] > 100 - s->orders.object.number)
X  		planet->conditions[TOXIC] = 100;
X  	else
X! 		planet->conditions[TOXIC] += s->orders.object.number;
X  	printf("Planetary toxin concentration is now %d.\n", 
X  		planet->conditions[TOXIC]);
X     }
X--- 121,130 ----
X  
X       /* distribute poison over planet even if orbiting */
X     if (s->type==OTYPE_TOXWC) {
X! 	if (planet->conditions[TOXIC] > 100 - s->object.number)
X  		planet->conditions[TOXIC] = 100;
X  	else
X! 		planet->conditions[TOXIC] += s->object.number;
X  	printf("Planetary toxin concentration is now %d.\n", 
X  		planet->conditions[TOXIC]);
X     }
X*** ../../GB2/shipdata.h	Wed Jul  5 15:14:55 1989
X--- shipdata.h	Fri Sep 15 07:27:39 1989
X***************
X*** 2,68 ****
X   * Galactic Bloodshed (Robert Chansky, smq@b)
X   */
X  
X! char Shipltrs[]={ 'p','s','D','B','I','C','d','f','c','e','t','S','O','$', 
X! 	'+','m','H','=','/','T','A','g','V','^',' ','L','w','Y','G','&',
X! 	'-','>','"','[' };
X  
X  int Shipdata[NUMSTYPES][NUMABILS] = {
X!    /* cargo destcap guns  fuelcap  tech  crew   armr cost  mass lnd sw sp*/
X! /*SPd*/1,     0,     0,     20,    1,     1,      1,  10,   3,   1, 0, 1,
X! /*Shu*/10,    2,     1,     20,	   10,    25,     1,  50,   2,   1, 0, 2,
X! /*Drn*/100,   500,   60,    500,   500,   60,    20, 2000,  40,  0, 0, 2,
X! /*BB */35,    300,   30,    200,   200,   100,    15, 500,  20,  1, 0, 2,
X! /*Int*/10,    120,   40,    200,   500,   20,     10, 1000, 5,   1, 0, 4,
X! /*CA */15,    200,   20,    120,   150,   60,     10,  300, 10,  1, 0, 3,
X! /*DD */10,    100,   10,     80,   100,   30,      5,  200,  5,  1, 0, 4,
X! /*FF */0,     50,    10,    10,	   200,    1,     2,  30,   1,   1, 0, 4,
X! /*Crg*/1000,  1000,  5,     1000,  100,  100,    3,  200,  20,   1, 0, 2,
X! /*Exp*/0,     15,    5,     35,    20,    2,      1,  100,   1,  1, 0, 4,
X! /*Tnk*/15,    10,    5,     5000,  100,    50,    3,  400,  20,  1, 0, 2,
X! /*Stn*/5000,  250,   40,    500,   100,    1000, 10,  400,  100, 1, 0, 2,
X! /*OSP*/1000,  1000,  50,    1000,   200,   1000,   8, 800,  100, 0, 0, 2,
X! /*GOD*/50000, 50000, 50000, 50000, 5000,  50000,  100,100,  1,   1, 0, 4,
X! /*SMn*/0,     50,    0,     20,    50,    0,    5,    50,   10,  1, 1, 2,
X!    /* cargo destcap guns  fuelcap  tech  crew   armr cost  mass  mv sw */
X! /*mir*/200,   10,     1,     20,    200,  15,     1,  100,  100, 0, 0, 1,
X! /*Hab*/5000, 500,    20,    5000,   100, 2000,    9, 1000,  100, 0, 0, 1,
X! /*Stc*/0,     0,     0,     20,    50,    5,      1,  50,    2,  1, 0, 2,
X! /*Tsc*/0,     0,     0,     0,     5,     10,     1,  10,   5,   1, 0, 0,
X! /*T-R*/0,     0,     0,     1000,  100,   15,     1,  120,  10,  1, 1, 1,
X! /*APr*/0,     0,     0,     200,    50,    10,     1,  80,   40,  1, 1, 0,
X! /*CD */0,     0,     0,     1,     40,    0,      1,  20,   5,   1, 0, 1,
X! /*VN */20,    0,     0,     50,    80,    0,      1,  15,   10,  1, 1, 1,
X! /*PB */0,     20,    0,     5,     300,   0,      1,  100,  5,   1, 1, 1,
X! /*ClD*/0,     10,    0,     0,     250,   0,      1,  25,   6,   1, 1, 0,
X! /*OMCL*/0,   100,  10,     100,    350,   5,      1, 100,   4,   1, 1, 2,
X! /*TWC*/0,     0,     0,     20,    25,    0,      1,  50,   15,  1, 0, 1,
X! /*AY */0,     10,    0,     0,     90,    0,      1,  25,   6,   1, 0, 0,
X! /*Gr */0,     100,   25,    0,     80,    5,      1,  25,   6,   1, 0, 0,
X! /*SA */5000,  5000,  100,   50000, 10000, 0,      55, 1,    500, 1, 0, 1,
X! /*LTr*/100,	5,    5,      20,    0,   20,     2,   1,    4,  1, 1, 0,
X! /*Otr*/ 100,     5,  5,       20,    0,   20,     2,   3,    3,  1, 0, 0,
X! /*DgT*/1000,  1000,  0,    1000,  200,    1000,   1,  800,  80,  1, 1, 0,
X! /*TD */1000,  1000,  0,     1000,  400,   1000,   2, 1200,  80,  1, 1, 0
X  };
X  
X  char *Shipnames[NUMSTYPES] = {
X     "Spore pod",
X     "Shuttle",
X     "Dreadnaught",
X     "Battleship",
X     "Interceptor",
X     "Cruiser",
X     "Destroyer",
X!    "Fighter",
X!    "Cargo ship",
X     "Explorer",
X!    "Tanker",
X     "Station",
X     "Ob Asst Pltfrm",
X     "GODSHIP",
X     "Space mine",
X     "Space mirror",
X-    "Habitat",
X     "Space telescope",
X     "Ground telescope",
X     "* T-R beam",
X--- 2,73 ----
X   * Galactic Bloodshed (Robert Chansky, smq@b)
X   */
X  
X! char Shipltrs[]={ 'p','s','$','D','B','I','C','d','f','e','H','S','O','c',
X! 	't','!','+','m',
X! 	'=','/','T','A','g','V','^',' ','L','w','Y','G','&',
X! 	'-','>','"','[','R'};
X  
X  int Shipdata[NUMSTYPES][NUMABILS] = {
X!    /* carg  dest   guns  fuelcap  tech  crew armr targ cost mass lnd sw sp dm*/
X! /*SPd*/   1,    0,     0,     20,    1,     1,   1,  2,  10,   3, 1, 0, 1,  0,
X! /*Shu*/  10,    2,     1,     20,   10,     5,   1,  2,  50,   2, 1, 0, 2,  0,
X! /*Car*/ 200,  800,    20,   1000,  250,    30,  10,  2,1200, 100, 0, 0, 2, 50,
X! /*Drn*/ 100,  500,    60,    500,  500,    20,  20,  0, 800,  40, 0, 0, 4, 50,
X! /*BB */  35,  350,    30,    200,  200,    15,  15,  0, 400,  15, 1, 0, 4, 50,
X! /*Int*/  10,  120,    30,    200,  350,     3,  10,  1, 400,   5, 1, 0, 4, 50,
X! /*CA */  15,  200,    20,    120,  150,    10,   8,  1, 300,  10, 1, 0, 4, 50,
X! /*DD */  10,  100,    10,     80,  100,     5,   5,  2, 200,   5, 1, 0, 4, 50,
X! /*FF */   0,   30,    30,     10,  200,     1,   2,  2,  30,   1, 1, 0, 4,  0,
X! /*Exp*/   0,    15,    5,     35,   20,     2,   2,  2, 100,   1, 1, 0, 4,  0,
X! /*Hab*/5000,   500,   20,    500,  100,  2000,  10,  0,1000, 100, 0, 0, 1,  0,
X! /*Stn*/5000,   250,   40,    500,  100,    50,  12,  0, 500, 100, 1, 0, 2,  0,
X! /*OSP*/1000,  1000,   50,   1000,  200,   200,  10,  0, 800, 100, 0, 0, 2,  0,
X! /*Crg*/1000,  1000,    5,   1000,  100,    10,   5,  0, 200,  20, 1, 0, 2,  0,
X! /*Tnk*/  15,    10,    5,   5000,  100,    10,   5,  0, 400,  20, 1, 0, 2,  0,
X! /*GOD*/50000,50000,50000,  50000, 5000,   100,  20,  1, 100,   1, 1, 0, 4,  0,
X! /*SMn*/   0,    50,    0,     20,   50,     0,   5,  2,  50,  10, 1, 1, 2,  0,
X!   /* cargo destcap guns  fuelcap  tech  crew armr targ cost mass lnd sw sp dm*/
X! /*mir*/ 200,    10,    1,     20,  200,     5,   2,  0, 100, 100, 0, 0, 1,  0,
X! /*Stc*/   0,     0,    0,     20,   50,     2,   3,  1,  50,   2, 1, 0, 2,  0,
X! /*Tsc*/   0,     0,    0,      0,    5,     2,   3,  2,  10,   5, 1, 0, 0,  0,
X! /*T-R*/   0,     0,    0,   1000,  100,     5,   1,  2, 400,  10, 1, 1, 1,  0,
X! /*APr*/   0,     0,    0,    200,   50,    10,   3,  0,  80,  40, 1, 1, 0,  0,
X! /*CD */   0,     0,    0,      1,   40,     0,   1,  2,  20,   5, 1, 0, 1,  0,
X! /*VN */  20,     0,    0,     50,   80,     0,   1,  2,  15,  10, 1, 1, 1,  0,
X! /*PB */   0,    20,    0,      5,  300,     0,   1,  2, 100,   5, 1, 1, 1,  0,
X! /*ClD*/   0,    10,    0,      0,  250,     0,   1,  2,  25,   6, 1, 1, 0,  0,
X! /*OMCL*/  0,   100,   10,    100,  350,     2,   8,  1, 100,   4, 1, 1, 2,  0,
X! /*TWC*/   0,     0,    0,     20,   25,     0,   1,  0,  50,  15, 1, 0, 1,  0,
X! /*AY */   0,    10,    0,      0,   90,     0,   1,  2,  25,   6, 1, 0, 0,  0,
X!    /* cargo destcap guns  fuelcap  tech  crew armr targ cost mass lnd sw sp*/
X! /*GRL */  0,   100,   25,      0,   80,     5,   5,  2,  25,   6, 1, 0, 0,  0,
X! /*SA */5000,  5000,  100,  50000,10000,     0,  20,  0,   1, 500, 1, 0, 1,  0,
X! /*LTr*/ 100,     5,    5,     20,    0,    20,   2,  2,   1,   4, 1, 1, 0,  0,
X! /*Otr*/ 100,     5,    5,     20,    0,    20,   2,  2,   3,   3, 1, 0, 0,  0,
X! /*DgT*/1000,  1000,    0,   1000,  200,    50,   2,  2,   8,  80, 1, 1, 0,  0,
X! /*TD */1000,  1000,    0,   1000,  400,   100,   2,  1, 600,  80, 1, 1, 0,  0,
X! /*SRp*/   0,	 0,    0,      0,  400,     0,   1,  2,  45,   0, 1, 0, 0,  0
X  };
X  
X  char *Shipnames[NUMSTYPES] = {
X     "Spore pod",
X     "Shuttle",
X+    "Carrier",
X     "Dreadnaught",
X     "Battleship",
X     "Interceptor",
X     "Cruiser",
X     "Destroyer",
X!    "Fighter Group",
X     "Explorer",
X!    "Habitat",
X     "Station",
X     "Ob Asst Pltfrm",
X+    "Cargo ship",
X+    "Tanker",
X     "GODSHIP",
X     "Space mine",
X     "Space mirror",
X     "Space telescope",
X     "Ground telescope",
X     "* T-R beam",
X***************
X*** 79,83 ****
X     "* Land Transport",
X     "* Ocean Transport",
X     "* Dirigable Trans.",
X!    "audio-vibatory-\n   physio-molecular\n   transport device",
X  };
X--- 84,92 ----
X     "* Land Transport",
X     "* Ocean Transport",
X     "* Dirigable Trans.",
X!    "AVPM transporter",
X!    "Sector Repair"
X  };
X+ 
X+ 
X+ 
X*** ../../GB2/ships.h	Wed Jul  5 15:14:56 1989
X--- ships.h	Fri Sep 15 07:27:40 1989
X***************
X*** 5,46 ****
X  
X  #define STYPE_POD	0
X  #define STYPE_SHUTTLE 	1
X! #define STYPE_DREADNT	2
X! #define STYPE_BATTLE 	3
X! #define STYPE_INTCPT	4
X! #define STYPE_CRUISER	5
X! #define STYPE_DESTROYER 6
X! #define STYPE_FIGHTER 	7
X! #define STYPE_CARGO 	8
X  #define STYPE_EXPLORER 	9
X! #define STYPE_TANKER 	10
X  #define STYPE_STATION	11
X  #define STYPE_ASS	12
X! #define STYPE_GOD	13
X! #define STYPE_MINE	14
X! #define STYPE_MIRROR	15
X! #define STYPE_HABITAT 	16
X  
X! #define OTYPE_STELE	17
X! #define OTYPE_GTELE	18
X! #define OTYPE_TRACT	19
X! #define OTYPE_AP	20
X! #define OTYPE_CANIST	21
X! #define OTYPE_VN	22
X! #define OTYPE_PLBOMB	23
X! #define OTYPE_CLOAK	24
X! #define OTYPE_OMCL	25
X! #define OTYPE_TOXWC	26
X! #define OTYPE_AMULET	27
X! #define OTYPE_GR	28
X! #define OTYPE_AMOEBA	29
X! #define OTYPE_LANDTR	30
X! #define OTYPE_OCTR	31
X! #define OTYPE_DIRTR	32
X! #define OTYPE_TRANSDEV	33
X  
X  #define ABIL_CARGO 	0
X- /*#define ABIL_STEALTH 	1*/
X  #define ABIL_DESTCAP 	1
X  #define ABIL_GUNS 	2
X  #define ABIL_FUELCAP 	3
X--- 5,47 ----
X  
X  #define STYPE_POD	0
X  #define STYPE_SHUTTLE 	1
X! #define STYPE_CARRIER   2
X! #define STYPE_DREADNT	3
X! #define STYPE_BATTLE 	4
X! #define STYPE_INTCPT	5
X! #define STYPE_CRUISER	6
X! #define STYPE_DESTROYER 7
X! #define STYPE_FIGHTER 	8
X  #define STYPE_EXPLORER 	9
X! #define STYPE_HABITAT 	10
X  #define STYPE_STATION	11
X  #define STYPE_ASS	12
X! #define STYPE_CARGO 	13
X! #define STYPE_TANKER 	14
X! #define STYPE_GOD	15
X! #define STYPE_MINE	16
X! #define STYPE_MIRROR	17
X  
X! #define OTYPE_STELE	18
X! #define OTYPE_GTELE	19
X! #define OTYPE_TRACT	20
X! #define OTYPE_AP	21
X! #define OTYPE_CANIST	22
X! #define OTYPE_VN	23
X! #define OTYPE_PLBOMB	24
X! #define OTYPE_CLOAK	25
X! #define OTYPE_OMCL	26
X! #define OTYPE_TOXWC	27
X! #define OTYPE_AMULET	28
X! #define OTYPE_GR	29
X! #define OTYPE_AMOEBA	30
X! #define OTYPE_LANDTR	31
X! #define OTYPE_OCTR	32
X! #define OTYPE_DIRTR	33
X! #define OTYPE_TRANSDEV	34
X! #define OTYPE_REPAIR	35
X  
X  #define ABIL_CARGO 	0
X  #define ABIL_DESTCAP 	1
X  #define ABIL_GUNS 	2
X  #define ABIL_FUELCAP 	3
X***************
X*** 47,80 ****
X  #define ABIL_TECH 	4
X  #define ABIL_MAXCREW 	5
X  #define ABIL_ARMOR 	6
X! #define ABIL_COST 	7
X! #define ABIL_MASS 	8
X! #define ABIL_CANLAND	9
X! #define ABIL_HASSWITCH	10
X! #define ABIL_SPEED	11
X  
X! #define NUMSTYPES 	(OTYPE_TRANSDEV+1)
X! #define NUMABILS 	(ABIL_SPEED+1)
X  
X  
X  typedef struct ship shiptype;
X- typedef struct orders ordertype;
X  typedef struct place placetype;
X  
X- struct orders {		/* standing orders for ships, planets */
X-     unsigned bombard : 1;	/* bombard planet we're on */
X- };
X  
X  struct ship {
X      float xpos,ypos;
X      float fuel,mass;
X!     /*char name[NAMESIZE];*/
X!     /*us abils[NUMABILS-2];	/* only certain abilities are kept track*/
X      unsigned short destshipno;		/* destination ship # */
X      unsigned short nextship;		/* next ship in orbit around whatever */
X      unsigned short prevship;		/* prev ship in orbit around whatever */
X!     union {
X!     	ordertype o;		/* standing orders for ship */
X  	struct a {		/* if the ship is a Space Mirror */
X  		short shipno;	/* aimed at what ship */
X  		char snum;		/* aimed at what star */
X--- 48,78 ----
X  #define ABIL_TECH 	4
X  #define ABIL_MAXCREW 	5
X  #define ABIL_ARMOR 	6
X! #define ABIL_TARGET	7
X! #define ABIL_COST 	8
X! #define ABIL_MASS 	9
X! #define ABIL_CANLAND	10
X! #define ABIL_HASSWITCH	11
X! #define ABIL_SPEED	12
X! #define ABIL_DAMAGE	13
X  
X! #define NUMSTYPES 	(OTYPE_REPAIR+1)
X! #define NUMABILS 	(ABIL_DAMAGE+1)
X  
X  
X  typedef struct ship shiptype;
X  typedef struct place placetype;
X  
X  
X  struct ship {
X      float xpos,ypos;
X      float fuel,mass;
X!     char name[18];			/* name of ship (optional) */
X      unsigned short destshipno;		/* destination ship # */
X      unsigned short nextship;		/* next ship in orbit around whatever */
X      unsigned short prevship;		/* prev ship in orbit around whatever */
X!     unsigned bombard : 1;	/* bombard planet we're on */
X! 
X  	struct a {		/* if the ship is a Space Mirror */
X  		short shipno;	/* aimed at what ship */
X  		char snum;		/* aimed at what star */
X***************
X*** 82,91 ****
X--- 80,114 ----
X  		unsigned pnum : BITS_MAXPLANETS;  /* aimed at what planet */
X  		unsigned level : 2;	/* aimed at what level */
X  	} aimed_at;
X+ 	
X  	struct o2 {
X  		short number;	/* for misc functions */
X  		short number2;	/* again */
X+ 		short number3;  /* again. don't use this in this version!!
X+ 				there is some strange bug with the order
X+ 				command which modifies it for some reason.
X+ 				someone needs to figure this problem out */
X+ 		short number4;  /* again */
X  	} object;
X+ 	
X+ 	struct m {
X+ 		unsigned mode : 1; /* 0 for radiation, 1 for damage */
X+ 	} mine;
X+ 	
X+ 	struct nv {
X+ 		unsigned on : 1;    /* toggles navigate mode */
X+ 		unsigned speed : 3; /* speed for navigate command */
X+ 		unsigned turns : 3; /* number turns left in maneuver */
X+ 		unsigned bearing : 16; /* course */
X+ 	} navigate;
X+ 	
X+ 	struct prot {
X+ 		float maxrng;	       /* maximum range for autoshoot */
X+ 		unsigned on	 :  1; /* toggle on/off */
X+ 		unsigned planet  :  1; /* planet defender */
X+ 		unsigned ship	 : 14; /* ship it is protecting */
X+ 	} protect;
X+ 
X  	struct am {
X  		char psuedo1x,psuedo1y;	/* x,y loc for psuedopods */
X  		char psuedo2x,psuedo2y;
X***************
X*** 94,100 ****
X  		unsigned dest : 1;	/* has a destination in mind */
X  		unsigned div : 1;	/* trying to divide in two */
X  	} amoeba;
X!     } orders;
X      char storbits;		/* what star # orbits */
X      char deststar;		/* destination star */
X      unsigned destpnum : BITS_MAXPLANETS;	/* destination planet */
X--- 117,123 ----
X  		unsigned dest : 1;	/* has a destination in mind */
X  		unsigned div : 1;	/* trying to divide in two */
X  	} amoeba;
X! 
X      char storbits;		/* what star # orbits */
X      char deststar;		/* destination star */
X      unsigned destpnum : BITS_MAXPLANETS;	/* destination planet */
X***************
X*** 106,112 ****
X      unsigned popn : 16;			/* crew */
X      unsigned owner : BITS_MAXPLAYERS;	/* owner of ship */
X      unsigned speed : 3;		/* what speed to travel at */
X-     /*unsigned augmented : 4;	/* # of times augmented (max 10) ? */
X      unsigned whatdest : 2;	/* where going (same as Dir) */
X      unsigned whatorbits : 2;	/* where orbited (same as Dir) */
X      unsigned type : 6;		/* what type ship is */
X--- 129,134 ----
X***************
X*** 114,120 ****
X      unsigned is_sheep : 1;	/* 1 bit: is under influence of mind control */
X      unsigned is_docked : 1;	/* 1 bit: is landed on a planet or docked */
X      unsigned notified : 1; 	/* 1bit: has been notified of something */
X!     unsigned is_dead : 1;	/* 1 bit: is destroyed ship */
X      unsigned is_examined : 1;	/* 1 bit: has been examined */
X      unsigned on : 1;		/* on or off */
X  };
X--- 136,142 ----
X      unsigned is_sheep : 1;	/* 1 bit: is under influence of mind control */
X      unsigned is_docked : 1;	/* 1 bit: is landed on a planet or docked */
X      unsigned notified : 1; 	/* 1bit: has been notified of something */
X!     unsigned is_alive : 1;	/* 1 bit: ship is alive */
X      unsigned is_examined : 1;	/* 1 bit: has been examined */
X      unsigned on : 1;		/* on or off */
X  };
X***************
X*** 141,152 ****
X  #define can_bombard(s) \
X  	( ((s)->type < STYPE_MIRROR) && Shipdata[(s)->type][ABIL_GUNS])
X  
X   /* can aim at things. */
X  #define can_aim(s) ((s)->type>=STYPE_MIRROR && (s)->type<=OTYPE_TRACT)
X  
X   /* macro for killing a ship.  !notified means we have not yet written it
X      to the dead_ship file.  */
X! #define kill_ship(s) ((s)->is_dead = 1, (s)->notified = 0)
X  
X  extern placetype Getplace();
X  extern char *Dispplace(),*Dispshiporbits(),*prin_ship_orbits(),
X--- 163,177 ----
X  #define can_bombard(s) \
X  	( ((s)->type < STYPE_MIRROR) && Shipdata[(s)->type][ABIL_GUNS])
X  
X+ /* can navigate */
X+ #define can_navigate(s) (Shipdata[(s)->type][ABIL_SPEED] > 0 && (s)->type != OTYPE_VN)
X+ 
X   /* can aim at things. */
X  #define can_aim(s) ((s)->type>=STYPE_MIRROR && (s)->type<=OTYPE_TRACT)
X  
X   /* macro for killing a ship.  !notified means we have not yet written it
X      to the dead_ship file.  */
X! #define kill_ship(s) ((s)->is_alive = 0, (s)->damage = 100, (s)->notified = 0)
X  
X  extern placetype Getplace();
X  extern char *Dispplace(),*Dispshiporbits(),*prin_ship_orbits(),
X*** ../../GB2/shootblast.c	Wed Jul  5 15:15:51 1989
X--- shootblast.c	Fri Sep 15 07:28:48 1989
X***************
X*** 19,24 ****
X--- 19,61 ----
X  
X  float Kill_factor();
X  
X+ static int damage_table[8][9] = {
X+ 1, 3, 6, 10, 15, 21, 28, 37, 48,
X+ 0, 2, 4,  7, 11, 16, 22, 29, 38,
X+ 0, 1, 3,  5,  8, 12, 17, 23, 30,
X+ 0, 0, 2,  4,  6,  9, 13, 18, 24,
X+ 0, 0, 1,  3,  5,  7, 10, 14, 19,
X+ 0, 0, 0,  2,  4,  6,  8, 11, 15,
X+ 0, 0, 0,  1,  3,  5,  7,  9, 12,
X+ 0, 0, 0,  0,  2,  4,  6,  8, 10
X+ };
X+ 
X+ static int combat_table[6][11] = {
X+  0,  0,  0,  0,  0, 20, 20,  20,  20,  40,  60,
X+  0,  0,  0,  0, 20, 20, 20,  20,  40,  60,  80,
X+  0,  0, 20, 20, 20, 20, 20,  40,  60,  80, 100,
X+  0, 10, 20, 20, 20, 20, 40,  60,  80, 100, 100,
X+ 10, 20, 20, 20, 20, 40, 60,  80, 100, 100, 100,
X+ 20, 20, 20, 20, 40, 60, 80,  90, 100, 100, 100
X+ };
X+ 
X+ static int crew_casualties[6][11] = {
X+ 0, 0, 0, 0, 0, 2,  3,  4,  5,  6,  7,
X+ 0, 0, 1, 2, 3, 4,  5,  6,  7,  8,  9,
X+ 0, 1, 2, 3, 4, 5,  6,  7,  8,  9, 10,
X+ 0, 1, 3, 4, 5, 6,  7,  9, 10, 11, 12,
X+ 1, 2, 4, 5, 6, 8,  9, 11, 12, 13, 17,
X+ 3, 4, 6, 7, 8, 9, 10, 12, 15, 17, 20
X+ };
X+ 
X+ static int column[9] = {
X+ 1, 2, 4,  8, 14, 21, 31, 51,  81
X+ };
X+ 
X+ static float column1[11] = {
X+ 0.25, 0.33, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0
X+ };
X+ 
X  int shoot(from,to,fpl,tpl,sectorx,sectory,strength, dist, msg, getmap)
X  placetype from,*to;
X  planettype *fpl,*tpl;
X***************
X*** 58,64 ****
X     if (to->shipptr->is_docked && to->shipptr->whatdest==LEVEL_PLAN) {
X     	xto = Stars[to->shipptr->storbits]->xpos + tpl->xpos;
X     	yto = Stars[to->shipptr->storbits]->ypos + tpl->ypos;
X- 	printf(" xto %g yto %g, tpl %g,%g\n", xto, yto, tpl->xpos,tpl->ypos);
X  	if (from.level==LEVEL_SHIP &&
X  	    from.shipptr->is_docked && from.shipptr->whatdest==LEVEL_PLAN) {
X  		xto += to->shipptr->xpos;
X--- 95,100 ----
X***************
X*** 71,77 ****
X   }
X  
X   *dist = sqrt( (double)Distsq(xfrom, yfrom, xto, yto));
X!  if (*dist > SYSTEMSIZE*2.0) {
X  	 /* out of range */
X  	return -1;
X   } else {
X--- 107,113 ----
X   }
X  
X   *dist = sqrt( (double)Distsq(xfrom, yfrom, xto, yto));
X!  if (*dist > SYSTEMSIZE*3.0) {
X  	 /* out of range */
X  	return -1;
X   } else {
X***************
X*** 91,97 ****
X       teleg_add(buf, msg);
X       teleg_add(".\n\n", msg);
X  
X!      if (to->level==LEVEL_SHIP && to->shipptr->is_dead) {
X  	sprintf(buf,"%s #%d DESTROYED.\n", Shipnames[to->shipptr->type],
X  			to->shipno);
X  	teleg_add(buf,msg);
X--- 127,133 ----
X       teleg_add(buf, msg);
X       teleg_add(".\n\n", msg);
X  
X!      if (to->level==LEVEL_SHIP && !to->shipptr->is_alive) {
X  	sprintf(buf,"%s #%d DESTROYED.\n", Shipnames[to->shipptr->type],
X  			to->shipno);
X  	teleg_add(buf,msg);
X***************
X*** 115,122 ****
X  {
X  register int x2,y2;
X  reg float r;		/* radius of blast */
X! float d,str;
X  int numdest = 0,lowx,lowy,hix,hiy;
X  register sectortype *s;
X  register float fac;
X  int shfdata,sectdata;
X--- 151,159 ----
X  {
X  register int x2,y2;
X  reg float r;		/* radius of blast */
X! float d,damage,str;
X  int numdest = 0,lowx,lowy,hix,hiy;
X+ int i, col, row, die, kills;
X  register sectortype *s;
X  register float fac;
X  int shfdata,sectdata;
X***************
X*** 125,141 ****
X   str = Kill_factor(dist, strength);
X  
X   if (to->level==LEVEL_SHIP) {
X! 	numdest = int_rand(round_rand((float)str / Shipdata[to->shipptr->type][ABIL_ARMOR])-10, round_rand((float)str / Shipdata[to->shipptr->type][ABIL_ARMOR])+10);
X! 	if (numdest > 100)
X! 		numdest = 100;
X! 	if (numdest < 0)
X! 		numdest = 0;
X  
X  	if (from->level==LEVEL_SHIP && from->shipptr->type==OTYPE_GR) {
X  		/* gamma-ray lasers irradiate targets */
X  		if (to->shipptr->type==OTYPE_VN) {
X  			 /* damage spread around the machine herd */
X! 			numdest = round_rand((float)numdest / (to->shipptr->orders.object.number * 0.3) );
X  				/* radiation is not accumulated */
X  			to->shipptr->rad = numdest;
X  		} else {
X--- 162,206 ----
X   str = Kill_factor(dist, strength);
X  
X   if (to->level==LEVEL_SHIP) {
X! /* calculate combat result based on attack strength, defense strenght,
X!  target class and current target speed. */
X  
X+ /* get damage points */
X+ 		/*find column to use */
X+ 	col = 0;
X+ 
X+ for (i=0; i<9; i++)
X+ 	if((int)str >= column[i]) col = i;
X+ 
X+ 		/*locate damage points */
X+ 	die = int_rand(1,6);
X+ 	row = Shipdata[to->shipptr->type][ABIL_TARGET] + die - 1;
X+ damage = ((float)damage_table[row][col]) /Shipdata[to->shipptr->type][ABIL_ARMOR];
X+ 
X+ /*get damage */
X+ col = -1;
X+ for (i=0; i<11; i++)
X+ 	if(damage >= column1[i])col = i;
X+ 
X+ 
X+ numdest = 0;
X+ 
X+ if (col >= 0)
X+ 	{
X+ 	die = int_rand(1,6);
X+ 	row = die - 1;
X+ 	numdest = combat_table[row][col]+int_rand(-10,10);
X+ 	if(numdest < 0)numdest = 0;
X+ 	if(numdest > 100)numdest = 100;
X+ 
X+ 	}
X+ 
X+ 
X  	if (from->level==LEVEL_SHIP && from->shipptr->type==OTYPE_GR) {
X  		/* gamma-ray lasers irradiate targets */
X  		if (to->shipptr->type==OTYPE_VN) {
X  			 /* damage spread around the machine herd */
X! 			numdest = round_rand((float)numdest / (to->shipptr->object.number * 0.3) );
X  				/* radiation is not accumulated */
X  			to->shipptr->rad = numdest;
X  		} else {
X***************
X*** 151,166 ****
X  			    to->shipptr->whatdest==LEVEL_PLAN)
X  				pl->conditions[TOXIC] = 
X  					MIN(pl->conditions[TOXIC]+
X! 					      to->shipptr->orders.object.number,
X  					    100);
X  		} else
X  			to->shipptr->damage += numdest;
X  	   } else {
X  		numdest = round_rand((float)numdest / Shipdata[OTYPE_VN][ABIL_ARMOR]);
X! 		if (to->shipptr->orders.object.number - numdest < 1)
X  			kill_ship(to->shipptr);
X  		else
X! 			to->shipptr->orders.object.number -= numdest;
X  	   }
X  	}
X  	Nuked[to->shipptr->owner] = 1;
X--- 216,231 ----
X  			    to->shipptr->whatdest==LEVEL_PLAN)
X  				pl->conditions[TOXIC] = 
X  					MIN(pl->conditions[TOXIC]+
X! 					      to->shipptr->object.number,
X  					    100);
X  		} else
X  			to->shipptr->damage += numdest;
X  	   } else {
X  		numdest = round_rand((float)numdest / Shipdata[OTYPE_VN][ABIL_ARMOR]);
X! 		if (to->shipptr->object.number - numdest < 1)
X  			kill_ship(to->shipptr);
X  		else
X! 			to->shipptr->object.number -= numdest;
X  	   }
X  	}
X  	Nuked[to->shipptr->owner] = 1;
X***************
X*** 168,174 ****
X  
X   } else if (to->level==LEVEL_PLAN) {
X  
X!     r = str * FACTOR_DESTPLANET;
X      if (getmap) {
X  	    opensectdata(&sectdata);
X  	    getsmap(sectdata,Smap,pl);
X--- 233,239 ----
X  
X   } else if (to->level==LEVEL_PLAN) {
X  
X!     r = .2 * str;
X      if (getmap) {
X  	    opensectdata(&sectdata);
X  	    getsmap(sectdata,Smap,pl);
X***************
X*** 181,215 ****
X           for (x2=lowx; x2<=hix; x2++) {
X  	  if ( (d = Distmap(x,y,x2,y2) ) <= r) {
X  	     s = &Sector(*pl,x2,y2);
X! 	     fac = ((float)str*FACTOR_DESTPLANET/10) * logscale(100 - s->mobilization)/(d+1);
X  		/* factor of destruction */
X! 	     /*printf("%d,%d  dist = %.2f,dest fac %.2f",x2,y2,d,fac);*/
X! 	     	if (fac > 1.00) {
X  		   	Nuked[s->owner] = 1;	/* for retaliating */
X! 			s->popn = s->owner = 0;
X  				/* mutate the sector. */
X  			if (s->des==DES_ICE)
X  				s->des==DES_SEA;
X  			else if (s->des==DES_PLATED)
X! 				s->des==DES_LAND;
X  			else if (s->des==DES_SEA)
X  				s->des==DES_LAND;
X  			else if (s->des==DES_MOUNT) 
X! 					s->des=DES_LAND;
X  			else if (s->des==DES_LAND && 
X  				(s+1)->des==DES_SEA || (s-1)->des==DES_SEA)
X  					s->des=DES_SEA;
X  			else if (s->des==DES_LAND && 
X  				(s+1)->des==DES_GAS || (s-1)->des==DES_GAS)
X  					s->des=DES_GAS;
X! 	     	   	s->is_wasted = 1;
X! 			numdest++;
X! 				/* add some resources to be fair */
X  	     	   	s->resource = (percent)round_rand(s->resource * fac);
X! 		   	s->fert = (percent)round_rand(s->fert / fac);
X  	     	   	s->mobilization = (percent)(round_rand(s->mobilization / fac) );
X! 	     	   	/*printf("::%d,%d killed %d.\n",x2,y2,round_rand(s->popn * fac) );*/
X! 	     	   	s->eff = (percent)round_rand(s->eff / fac);
X  		}
X  	  }
X  	}
X--- 246,295 ----
X           for (x2=lowx; x2<=hix; x2++) {
X  	  if ( (d = Distmap(x,y,x2,y2) ) <= r) {
X  	     s = &Sector(*pl,x2,y2);
X! 	     fac = ((float)str) * logscale(100 - s->mobilization)/(d+1);
X  		/* factor of destruction */
X! 	    /* printf("%d,%d  dist = %.2f,dest fac %.2f \n",x2,y2,d,fac);*/
X! 	     	if (fac > 1.0) {
X  		   	Nuked[s->owner] = 1;	/* for retaliating */
X! 						
X! 			kills = int_rand(0,((int)fac))/(1+(s->des==DES_PLATED));
X! 		if(kills >= s->popn)
X! 			{s->popn = 0;
X! 			 s->owner = 0;}
X! 		else {
X! 			s->popn -= kills;}
X  				/* mutate the sector. */
X+ 	if(((float)int_rand(0,20))*fac > 100.)
X+ 		{
X  			if (s->des==DES_ICE)
X  				s->des==DES_SEA;
X  			else if (s->des==DES_PLATED)
X! 				if(int_rand(0,100) > 30)s->des==DES_LAND;
X  			else if (s->des==DES_SEA)
X  				s->des==DES_LAND;
X  			else if (s->des==DES_MOUNT) 
X! 				if(int_rand(0,100) > 20)s->des=DES_LAND;
X  			else if (s->des==DES_LAND && 
X  				(s+1)->des==DES_SEA || (s-1)->des==DES_SEA)
X  					s->des=DES_SEA;
X+ 
X  			else if (s->des==DES_LAND && 
X  				(s+1)->des==DES_GAS || (s-1)->des==DES_GAS)
X  					s->des=DES_GAS;
X! 		}
X! 	     	   	if(fac >= 5.0)
X! 				if(((float)int_rand(0,10))*fac > 50.0)
X! 					{
X! 				s->popn = 0;
X! 				s->owner = 0;
X! 				s->is_wasted = 1;
X! 				numdest++;
X! 					}
X! /* not sure why this is necessary (gvc)
X  	     	   	s->resource = (percent)round_rand(s->resource * fac);
X!  		   	s->fert = (percent)round_rand(s->fert / fac);
X  	     	   	s->mobilization = (percent)(round_rand(s->mobilization / fac) );
X! 	     	   	s->eff = (percent)round_rand(s->eff / fac); */
X  		}
X  	  }
X  	}
X***************
X*** 235,241 ****
X  {
X  reg float str;
X  
X!  str = strength * FACTOR_DAMAGE / (dist+50.0);
X   return str;
X  }
X  
X--- 315,322 ----
X  {
X  reg float str;
X  
X!  str = strength * FACTOR_DAMAGE * exp(-dist/FACTOR_DAMAGE_DISTANCE);
X! 
X   return str;
X  }
X  
X*** ../../GB2/sizes.c	Wed Jul  5 15:15:51 1989
X--- sizes.c	Fri Sep 15 07:28:49 1989
X***************
X*** 14,20 ****
X  
X   printf(" size racetype is %d\n",sizeof(racetype));
X   printf(" size placetype is %d\n",sizeof(placetype));
X-  printf(" size ordertype is %d\n",sizeof(ordertype));
X   printf(" size struct plinfo is %d\n\n",sizeof(struct plinfo));
X   printf(" size struct power [15] is %d\n\n",sizeof(P));
X  
X--- 14,19 ----
X*** ../../GB2/telegram.c	Wed Jul  5 15:15:53 1989
X--- telegram.c	Fri Sep 15 07:28:52 1989
X***************
X*** 75,80 ****
X--- 75,81 ----
X  	  getchr();
X  	  i += strlen(tbuf);
X  	  teleg_add(tbuf, telegram_buf);
X+ 	  teleg_add("\n", telegram_buf);
X    	  printf("%d : ",TELEGRAM_SIZE - i );
X    }
X    
X*** ../../GB2/tweakables.h	Wed Jul  5 15:14:56 1989
X--- tweakables.h	Fri Sep 15 07:27:41 1989
X***************
X*** 5,13 ****
X   *	the functions using them are not recompiled so be careful.
X   */
X  
X! #define VERS "1.0"		/* game version */
X  
X! #define UPDATE_TIME 1		/* 1 hour update time */
X  
X  
X  #define LOGIN_NAME_SIZE 13
X--- 5,13 ----
X   *	the functions using them are not recompiled so be careful.
X   */
X  
X! #define VERS "1.1"		/* game version */
X  
X! #define UPDATE_TIME 1		/* update time (hours) */
X  
X  
X  #define LOGIN_NAME_SIZE 13
X***************
X*** 33,54 ****
X  #define OTHER 	  9
X  #define TOXIC	 10
X  
X- #define CHAR_OWNED_THING 	'@' 
X  #define CHAR_LAND 		'*'
X- #define CHAR_OWNED_LAND 	'x' 
X  #define CHAR_SEA 		'.'
X- #define CHAR_OWNED_SEA 		'x'
X  #define CHAR_MOUNT 		'^'
X  #define CHAR_DIFFOWNED 		'?'
X  #define CHAR_PLATED 		'o'
X  #define CHAR_WASTELAND 		'%'
X- #define CHAR_OWNED_WASTELAND 	'!'
X  #define CHAR_GAS 		'~'
X- #define CHAR_OWNED_GAS 		'x'
X  #define CHAR_CLOAKED 		' '
X  #define CHAR_ICE		'#'
X- #define CHAR_OWNED_ICE		'x'
X- #define CHAR_OWNED_MOUNT 	'X'
X  
X  #define NAMESIZE 18
X  #define RNAMESIZE 35
X--- 33,47 ----
X***************
X*** 72,79 ****
X  
X  #define AUTO_TELEG_SIZE		5000
X  #define TELEGRAM_SIZE		500
X! #define MAX_TELEGRAMS		50
X! #define UNTRANS_MSG		"[untranslateable]"
X  /*#define TELEG_TRANS_APCOST	1*/
X  #define TELEG_TRANS_RPCOST	20
X  #define TELEG_TRANS_AMT		0.45
X--- 65,72 ----
X  
X  #define AUTO_TELEG_SIZE		5000
X  #define TELEGRAM_SIZE		500
X! #define MAX_TELEGRAMS		100
X! #define UNTRANS_MSG		"[ ? ]"
X  /*#define TELEG_TRANS_APCOST	1*/
X  #define TELEG_TRANS_RPCOST	20
X  #define TELEG_TRANS_AMT		0.45
X***************
X*** 107,116 ****
X  
X  #define FACTOR_FERT_SUPPORT 150
X  			       /* # of people/fert pt sector supports*/
X! #define EFF_PROD 		0.28		/* production of effcncy/pop*/
X! #define RESOURCE_PRODUCTION 	0.10		/* adjust these to change prod*/
X! #define FUEL_PRODUCTION 	0.05
X! #define DEST_PRODUCTION 	0.07
X  #define MOB_COST		0.10   /* mobiliz.c, doplanet.c cost/mob point*/
X  #define RESOURCE_DEPLETION 	0.015
X  #define FACTOR_MOBPROD 		0.06	/* mobilization production/person */
X--- 100,109 ----
X  
X  #define FACTOR_FERT_SUPPORT 150
X  			       /* # of people/fert pt sector supports*/
X! #define EFF_PROD 		0.30		/* production of effcncy/pop*/
X! #define RESOURCE_PRODUCTION 	0.05		/* adjust these to change prod*/
X! #define FUEL_PRODUCTION 	0.02
X! #define DEST_PRODUCTION 	0.05
X  #define MOB_COST		0.10   /* mobiliz.c, doplanet.c cost/mob point*/
X  #define RESOURCE_DEPLETION 	0.015
X  #define FACTOR_MOBPROD 		0.06	/* mobilization production/person */
X***************
X*** 122,128 ****
X  #define TECH_SEE_STABILITY 10	/* min tech to see star stability */
X  #define TECH_EXPLORE 	   15	/* min tech to see your whole planet */
X  
X! #define ENVIR_DAMAGE_TOX	70	/* min tox to damage planet */
X  
X  #define PLANETGRAVCONST 	0.05
X  #define SYSTEMGRAVCONST 	0.05
X--- 115,122 ----
X  #define TECH_SEE_STABILITY 10	/* min tech to see star stability */
X  #define TECH_EXPLORE 	   15	/* min tech to see your whole planet */
X  
X! #define ENVIR_DAMAGE_TOX	85
X! 	/* min tox to damage planet */
X  
X  #define PLANETGRAVCONST 	0.05
X  #define SYSTEMGRAVCONST 	0.05
X***************
X*** 134,142 ****
X  /*#define DIST_TO_BURN 50	 /* distance from sun needed to destroy ship */
X  
X  
X! #define FACTOR_DAMAGE 		688.0
X  #define FACTOR_DESTPLANET 	0.35
X! #define FACTOR_DAMAGE_DISTANCE 	1.00
X  
X  	/* various compiler options that may save cpu time/disk space */
X  #define SHELL_DOTURN 1			/* put doturn() in shell */
X--- 128,136 ----
X  /*#define DIST_TO_BURN 50	 /* distance from sun needed to destroy ship */
X  
X  
X! #define FACTOR_DAMAGE 		2.0
X  #define FACTOR_DESTPLANET 	0.35
X! #define FACTOR_DAMAGE_DISTANCE 	300.00
X  
X  	/* various compiler options that may save cpu time/disk space */
X  #define SHELL_DOTURN 1			/* put doturn() in shell */
X***************
X*** 174,180 ****
X  /* look up sector */
X  #define Sector(pl,x,y) (Smap[(x) + (y)*(pl).Maxx])
X  /* adjust temperature to displayed */
X! #define Temp(x) (((int)(x))*25)
X  
X   /* number of AP's to add to each player in ea. system */
X   /*   (look in doturn)  */
X--- 168,174 ----
X  /* look up sector */
X  #define Sector(pl,x,y) (Smap[(x) + (y)*(pl).Maxx])
X  /* adjust temperature to displayed */
X! #define Temp(x) ((int)(x))
X  
X   /* number of AP's to add to each player in ea. system */
X   /*   (look in doturn)  */
X*** ../../GB2/vars.h	Wed Jul  5 15:14:57 1989
X--- vars.h	Fri Sep 15 07:27:42 1989
X***************
X*** 14,19 ****
X--- 14,20 ----
X  #define Bzero(x)  bzero( (char *)&(x), sizeof(x) )
X  #define Malloc(x) (x *)malloc( sizeof(x) )
X  
X+ 
X  #include "files.h"
X  #include "tweakables.h"
X  #include <sys/types.h>
X***************
X*** 24,30 ****
X  #define LEVEL_UNIV 0
X  #define LEVEL_STAR 1
X  #define LEVEL_PLAN 2
X- /*#define LEVEL_MOON 3*/
X  #define LEVEL_SHIP 3
X  
X  #define MAXPLAYERS 30
X--- 25,30 ----
X***************
X*** 42,50 ****
X        unsigned numsectsowned : 10;
X        unsigned comread : 7;		/* combat readiness */
X        unsigned mob_set : 7;		/* mobilization target */
X-       /*unsigned quota_resource : 7;
X-       unsigned quota_destruct : 7;
X-       unsigned quota_fuel : 7;*/
X        unsigned explored : 1;		/* 1 bit: explored by each player */
X        unsigned autorep : 3;		/* player wants autoreport */
X        unsigned spied_on : 1;		/* spied on */
X--- 42,47 ----
X***************
X*** 68,75 ****
X  struct planet {
X      float xpos,ypos;		/* x,y relative to orbit */
X      char conditions[TOXIC+1]; /* atmospheric conditions for terraforming */
X-     /*int nummoons;*/
X-     /*int moonpos[MAXMOONS];	/* filepos moons or ast around it */
X      us ships;			/* first ship in orbit (to be changed) */
X      percent Maxx,Maxy;		/* size of map */
X      int sectormappos;		/* file posn for sector map */
X--- 65,70 ----
X***************
X*** 88,94 ****
X  struct star {
X      float xpos,ypos;
X      char stability;		/* how close to nova it is */
X!     char name[NAMESIZE];
X      char numplanets;		/* # of same */
X      char pnames[MAXPLANETS][NAMESIZE]; /* names of planets */
X      int planetpos[MAXPLANETS]; 		/* file posns of planets */
X--- 83,89 ----
X  struct star {
X      float xpos,ypos;
X      char stability;		/* how close to nova it is */
X!     char name[NAMESIZE];	/* name of star */
X      char numplanets;		/* # of same */
X      char pnames[MAXPLANETS][NAMESIZE]; /* names of planets */
X      int planetpos[MAXPLANETS]; 		/* file posns of planets */
X***************
X*** 115,121 ****
X      int snum;		/* what star system obj # (level=0) */
X      int pnum;		/* number of planet */
X      int shipno;		/* # of ship */
X-     /*int moon;		/* ptr to moon of planet obj # (lev=2)*/
X      char prompt[NAMESIZE+NAMESIZE+NAMESIZE+5];	/* just to be safe */
X      float lastx, lasty, zoom;	/* last coords for zoom */
X  } Dir;
X--- 110,115 ----
X*** ../../GB2/Docs/actionpoints.doc	Wed Jul  5 15:14:28 1989
X--- Docs/actionpoints.doc	Fri Sep 15 07:29:04 1989
X***************
X*** 16,22 ****
X  to the following formula:
X  
X    AP[player] = AP[player] + (ships in system) / 10 + 
X! 			(total system population) / 5000 + 1
X  
X    Unless that system has not been explored, in which case the player will get
X  none.  No player can have more than 99 action points in one system, or the
X--- 16,22 ----
X  to the following formula:
X  
X    AP[player] = AP[player] + (ships in system) / 10 + 
X! 			(total system population) / 3000 + 1
X  
X    Unless that system has not been explored, in which case the player will get
X  none.  No player can have more than 99 action points in one system, or the
X***************
X*** 31,35 ****
X  
X  SEE ALSO
X    cs
X- 
X  
X--- 31,34 ----
X*** ../../GB2/Docs/god.doc	Wed Jul  5 15:14:37 1989
X--- Docs/god.doc	Fri Sep 15 07:27:17 1989
X***************
X*** 2,8 ****
X  
X  
X  NAME
X!   god -- turn off deity privileges
X  
X  SYNTAX
X    god
X--- 2,8 ----
X  
X  
X  NAME
X!   god -- turn off diety priveledges
X  
X  SYNTAX
X    god
X***************
X*** 9,14 ****
X  
X  DESCRIPTION
X    
X!   If the user had deity privileges before, this revokes them, for 
X  development purposes.
X  
X--- 9,14 ----
X  
X  DESCRIPTION
X    
X!   If the user had diety priveledges before, this revokes them, for 
X  development purposes.
X  
X*** ../../GB2/Docs/map.doc	Wed Jul  5 15:14:41 1989
X--- Docs/map.doc	Fri Sep 15 07:27:22 1989
X***************
X*** 23,29 ****
X     '~' -- Gas (such as might be found on a gas giant planet)
X     '%' -- Wasteland (uninhabitable)
X     ' ' -- (Under certain circumstances the sector may be blank)
X!    'o' -- A steel (or whatever) plated sector, much like the planet
X  	    Trantor (from Asimov's _Foundation_)
X  
X  
X--- 23,29 ----
X     '~' -- Gas (such as might be found on a gas giant planet)
X     '%' -- Wasteland (uninhabitable)
X     ' ' -- (Under certain circumstances the sector may be blank)
X!    '|' -- A steel (or whatever) plated sector, much like the planet
X  	    Trantor (from Asimov's _Foundation_)
X  
X  
X***************
X*** 32,38 ****
X     'x' -- Area owned by the player
X     '?' -- Area owned by another player
X     'pscbdfgetSDM%#+mACV^ EYBG[' -- a ship of that type is landed on the sector
X!    'o' -- Area that has been developed to 100% efficiency (steel plated)
X  
X  
X  
X--- 32,38 ----
X     'x' -- Area owned by the player
X     '?' -- Area owned by another player
X     'pscbdfgetSDM%#+mACV^ EYBG[' -- a ship of that type is landed on the sector
X!    '|' -- Area that has been developed to 100% efficiency (steel plated)
X  
X  
X  
X***************
X*** 115,119 ****
X  
X  SEE ALSO
X    orbit, cs, scope
X- 
X  
X--- 115,118 ----
X*** ../../GB2/Docs/order.doc	Wed Jul  5 15:14:46 1989
X--- Docs/order.doc	Fri Sep 15 07:27:24 1989
X***************
X*** 19,25 ****
X  	specified.
X  
X    (s)peed -- Typing a '?' at this point gives help on the speed settings.
X- 	speed cannot be higher than the speed rating of the ship.
X  
X    The following order can not be made on space mirror ships:
X  
X--- 19,24 ----
X***************
X*** 38,44 ****
X--- 37,65 ----
X  
X      (i)ntensity -- change degree of focus for a space mirror.
X  
X+   The following orders can be made for most ships:
X  
X+     (n)avigate -- while this is on the destination described above is 
X+ 	ignored and instead, the ship will travel in the direction
X+ 	specified by the course. The directions are specified with
X+ 	degrees between 0 and 360 where 0 is 'up', 90 is 'right',
X+ 	180 is 'down' etc. You must also specify the number of turns
X+ 	to do the maneuver. After every move the turn count is decremented
X+ 	one until it becomes zero. After the maneuver the navigate
X+ 	setting is automatically turned off and if a destination
X+ 	has been set the ship will then proceed in that direction.
X+ 
X+     (p)rotect -- this allows a ship to protect another ship. Suppose, for
X+ 	example, ship A is set to protect ship B. If another ship C
X+ 	fires at B then both B *and* A will retaliate. This allows
X+ 	players to design their own defense networks.
X+ 
X+     p(l)anetary defense -- If this is set 'on' it will retaliate
X+ 	if the planet that it is in orbit around or landed on is
X+ 	attacked. If it is set 'off' the ship will not retaliate if
X+ 	its host planet is attacked.
X+ 
X+ 
X    Action Points are deducted from the root and each star.  No more than
X  the normal AP cost will be deducted from the root or each star, no matter
X  how many ship's orders are changed in each.
X***************
X*** 53,56 ****
X--- 74,78 ----
X  
X  SEE ALSO
X   scope, actionpoints
X+ 
X  
END_OF_FILE
if test 51327 -ne `wc -c <'patches01d'`; then
    echo shar: \"'patches01d'\" unpacked with wrong size!
fi
# end of 'patches01d'
fi
echo shar: End of archive 4 \(of 4\).
cp /dev/null ark4isdone
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