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, §, 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, §, 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(§data);
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