billr@saab.CNA.TEK.COM (Bill Randle) (09/15/89)
Submitted-by: VANCLEEF@mps.ohio-state.edu Posting-number: Volume 8, Issue 28 Archive-name: GB2/Patch1c Patch-To: GB2: Volume 7, Issue 44-51 #! /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 3 (of 4)." # Contents: patches01c # Wrapped by billr@saab on Fri Sep 15 08:34:48 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'patches01c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'patches01c'\" else echo shar: Extracting \"'patches01c'\" \(50119 characters\) sed "s/^X//" >'patches01c' <<'END_OF_FILE' X*** ../../GB2/load.c Thu Jul 6 07:18:13 1989 X--- load.c Fri Sep 15 07:28:12 1989 X*************** X*** 41,47 **** X if (!getship(load_shdata,&s,shipno)) { X load_handler(); X } X! if (s->owner!=Playernum || s->is_dead) { X DontOwnErr(shipno); X printf("(%d)\n",s->owner); X free(s); X--- 41,47 ---- X if (!getship(load_shdata,&s,shipno)) { X load_handler(); X } X! if (s->owner!=Playernum || !s->is_alive) { X DontOwnErr(shipno); X printf("(%d)\n",s->owner); X free(s); X*************** X*** 64,78 **** X X proc = 0; X X! if (s->type == OTYPE_TRANSDEV && s->orders.object.number > 0) { X! Locks(1); X! if (!getship(load_shdata,&s2, s->orders.object.number)) { X printf("The hopper seems to be blocked.\n"); X load_handler(); X } X- Locks(0); X X! if (s2->is_dead) { X printf("The target device does not exist.\n"); X load_handler(); X } X--- 64,76 ---- X X proc = 0; X X! if (s->type == OTYPE_TRANSDEV && s->object.number > 0) { X! if (!getship(load_shdata,&s2, s->object.number)) { X printf("The hopper seems to be blocked.\n"); X load_handler(); X } X X! if (!s2->is_alive) { X printf("The target device does not exist.\n"); X load_handler(); X } X*************** X*** 101,109 **** X if (s->whatdest==LEVEL_PLAN) X printf("Ship #%d at %.0f,%.0f\n", shipno,s->xpos, s->ypos); X else { X! Locks(1); X! if (!getship(load_shdata, &s2, s->destshipno) || s2->is_dead || X! !(s2->is_docked && s2->whatdest==LEVEL_SHIP X && s2->destshipno==shipno) ) { X /* the ship it was docked with died or X undocked with it or something. */ X--- 99,108 ---- X if (s->whatdest==LEVEL_PLAN) X printf("Ship #%d at %.0f,%.0f\n", shipno,s->xpos, s->ypos); X else { X! if (!getship(load_shdata, &s2, s->destshipno) X! || !s2->is_alive X! || !s->object.number4 && X! !(s2->is_docked && s2->whatdest==LEVEL_SHIP X && s2->destshipno==shipno) ) { X /* the ship it was docked with died or X undocked with it or something. */ X*************** X*** 115,121 **** X printf("ship #%u is not docked.\n", s->destshipno); X load_handler(); X } X- Locks(0); X printf("Ship #%d docked with %s #%d\n", shipno, X Shipnames[s2->type], s->destshipno); X sh = 1; X--- 114,119 ---- X*************** X*** 359,366 **** X X putship(load_shdata,s,shipno); X X! if (s->type==OTYPE_TRANSDEV && s->orders.object.number > 0) { X X printf("Zap\007!\n"); X X /* send stuff to other ship (could be transport device) */ X--- 357,364 ---- X X putship(load_shdata,s,shipno); X X! if (s->type==OTYPE_TRANSDEV && s->object.number > 0) { X X printf("Zap\007!\n"); X X /* send stuff to other ship (could be transport device) */ X*************** X*** 412,418 **** X if (s2->owner!=s->owner) { X teleg_add("", telegram_buf); X teleg_add("BULLETIN!\n\n Audio-vibatory-physio-molecular transport device #",telegram_buf); X! sprintf(buf,"%d just gave your ship #%d the following:\n", shipno, s->orders.object.number); X teleg_add(buf,telegram_buf); X teleg_add(bufr,telegram_buf); X teleg_add(bufd,telegram_buf); X--- 410,416 ---- X if (s2->owner!=s->owner) { X teleg_add("", telegram_buf); X teleg_add("BULLETIN!\n\n Audio-vibatory-physio-molecular transport device #",telegram_buf); X! sprintf(buf,"%d just gave your ship #%d the following:\n", shipno, s->object.number); X teleg_add(buf,telegram_buf); X teleg_add(bufr,telegram_buf); X teleg_add(bufd,telegram_buf); X*************** X*** 422,428 **** X } X X putship(load_shdata,s,shipno); X! putship(load_shdata, s2, s->orders.object.number); X X X } else if (sh) { X--- 420,426 ---- X } X X putship(load_shdata,s,shipno); X! putship(load_shdata, s2, s->object.number); X X X } else if (sh) { X*************** X*** 454,460 **** X if (s2->owner!=s->owner) { X teleg_add("", telegram_buf); X teleg_add("BULLETIN!\n\n Audio-vibatory-physio-molecular transport device #",telegram_buf); X! sprintf(buf,"%d just gave your ship #%d the following:\n", shipno, s->orders.object.number); X teleg_add(buf,telegram_buf); X teleg_add(bufr,telegram_buf); X teleg_add(bufd,telegram_buf); X--- 452,458 ---- X if (s2->owner!=s->owner) { X teleg_add("", telegram_buf); X teleg_add("BULLETIN!\n\n Audio-vibatory-physio-molecular transport device #",telegram_buf); X! sprintf(buf,"%d just gave your ship #%d the following:\n", shipno, s->object.number); X teleg_add(buf,telegram_buf); X teleg_add(bufr,telegram_buf); X teleg_add(bufd,telegram_buf); X*** ../../GB2/makeplanet.c Wed Jul 5 15:15:31 1989 X--- makeplanet.c Fri Sep 15 07:28:14 1989 X*************** X*** 69,75 **** X s = &Sector(planet,x,y); X s->des = DES_GAS; /* for gasgiant */ X s->fert = int_rand(35,55); X! s->resource = int_rand(3,20); X } X if (planet.Maxx > MAP_GASGIANT_BANDMIN) { X int nbands; X--- 69,75 ---- X s = &Sector(planet,x,y); X s->des = DES_GAS; /* for gasgiant */ X s->fert = int_rand(35,55); X! s->resource = int_rand(20,40); X } X if (planet.Maxx > MAP_GASGIANT_BANDMIN) { X int nbands; X*************** X*** 79,86 **** X for (x=0; x<planet.Maxx; x++) { X s = &Sector(planet,x,y); X s->des = DES_SEA; /* make random bands of water */ X! s->fert += int_rand(10,24); X! s->resource += int_rand(30,40); X } X } X for (i=0; i<=MAP_ISLANDS*2; i++) { X--- 79,86 ---- X for (x=0; x<planet.Maxx; x++) { X s = &Sector(planet,x,y); X s->des = DES_SEA; /* make random bands of water */ X! s->fert += int_rand(20,30); X! s->resource += int_rand(40,60); X } X } X for (i=0; i<=MAP_ISLANDS*2; i++) { X*************** X*** 88,94 **** X x=int_rand(1,planet.Maxx-2); X s = &Sector(planet,x,y); X s->des = DES_SEA; /* make random spots of water */ X! s->fert += int_rand(12,24); X } X } else { X for (i=0; i<MAP_ISLANDS*2; i++) { X--- 88,94 ---- X x=int_rand(1,planet.Maxx-2); X s = &Sector(planet,x,y); X s->des = DES_SEA; /* make random spots of water */ X! s->fert += int_rand(20,30); X } X } else { X for (i=0; i<MAP_ISLANDS*2; i++) { X*************** X*** 100,106 **** X s->fert = int_rand(10,21); X } else { X s->des=DES_SEA; X! s->fert=int_rand(10,22); X } X } X Smashup(&planet,int_rand(2,4),DES_SEA,0,0,0); X--- 100,106 ---- X s->fert = int_rand(10,21); X } else { X s->des=DES_SEA; X! s->fert=int_rand(20,30); X } X } X Smashup(&planet,int_rand(2,4),DES_SEA,0,0,0); X*** ../../GB2/map.c Wed Jul 5 15:15:33 1989 X--- map.c Fri Sep 15 07:28:16 1989 X*************** X*** 3,13 **** X--- 3,21 ---- X * map.c -- display sector map of current planet X */ X X+ #define S_X (stdscr->_maxx - NAMESIZE) X+ #define S_Y (stdscr->_maxy - 1) X+ #define Midx ((S_X - NAMESIZE)/2.0) X+ #define Midy (S_Y /2.0) X+ X #include "vars.h" X #include "ships.h" X #include "races.h" X+ #include <curses.h> X extern float compatibility(); X+ int owned(); X char desshow(); X+ char Digits[]={'0','1','2','3','4','5','6','7','8','9'}; X X map(APcount, argn,args) X int APcount; X*************** X*** 18,38 **** X planettype *p; X placetype where; X X! Locks(1); X where = Getplace(args[1],0); X! Locks(0); X if (where.err) return; X X if (where.level==LEVEL_PLAN) { X openpdata(&map_pdata); X- Locks(1); X getplanet(map_pdata,&p,Stars[where.snum]->planetpos[where.pnum]); X- Locks(0); X close(map_pdata); X! X show_map(p,1); /* 1 means display data */ X X free(p); X X if (Stars[where.snum]->stability > 50) X printf("WARNING! This planet's primary is unstable.\n"); X--- 26,46 ---- X planettype *p; X placetype where; X X! X where = Getplace(args[1],0); X! X if (where.err) return; X X if (where.level==LEVEL_PLAN) { X+ X openpdata(&map_pdata); X getplanet(map_pdata,&p,Stars[where.snum]->planetpos[where.pnum]); X close(map_pdata); X! X show_map(p,1); /* 1 means display data */ X X free(p); X+ printf("\n `%s' \n\n",Stars[where.snum]->pnames[where.pnum]); X X if (Stars[where.snum]->stability > 50) X printf("WARNING! This planet's primary is unstable.\n"); X*************** X*** 50,59 **** X planettype *p; X register int show; X { X! register int x,y,i,f; X int sh,iq,map_sectdata,map_shdata; X shiptype *s; X! char shiplocs[MAX_X][MAX_Y]; X X bzero((char *)shiplocs, sizeof(shiplocs)); X X--- 58,67 ---- X planettype *p; X register int show; X { X! register int x,y,i,f,address,owned1; X int sh,iq,map_sectdata,map_shdata; X shiptype *s; X! char shiplocs[MAX_X][MAX_Y],dummy; X X bzero((char *)shiplocs, sizeof(shiplocs)); X X*************** X*** 62,68 **** X close(map_sectdata); X X openshdata(&map_shdata); X- Locks(1); X /* traverse ship list on planet. */ X sh = p->ships; X iq = 0; X--- 70,75 ---- X*************** X*** 79,85 **** X sh = p->ships; X while (sh) { X (void)getship(map_shdata,&s, sh); X! if (!s->is_dead && s->is_docked && s->whatdest==LEVEL_PLAN && X s->xpos < p->Maxx && s->xpos >= 0 && X s->ypos < p->Maxy && s->ypos >= 0 && X ( (s->owner == Playernum) || (iq == 1) ) ) X--- 86,92 ---- X sh = p->ships; X while (sh) { X (void)getship(map_shdata,&s, sh); X! if (s->is_alive && s->is_docked && s->whatdest==LEVEL_PLAN && X s->xpos < p->Maxx && s->xpos >= 0 && X s->ypos < p->Maxy && s->ypos >= 0 && X ( (s->owner == Playernum) || (iq == 1) ) ) X*************** X*** 87,161 **** X sh = s->nextship; X free(s); X } X- Locks(0); X close(map_shdata); X X X! printf(" "); X! for (x=0; x<p->Maxx; x++) X! printf("%d",x/10); X! if (show) X! printf(" Sects %s: %d", Race->Thing ? "covered" : "owned", X p->info[Playernum-1].numsectsowned); X! printf("\n "); X! for (x=0; x<p->Maxx; x++) X! printf("%d",x%10); X! if (show) { X! int i,f=0; X! printf(" Aliens:"); X if (p->is_explored || Race->tech >= TECH_EXPLORE) { X for (i=1; i<MAXPLAYERS; i++) X if (p->info[i-1].numsectsowned && i!=Playernum) { X f=1; X! printf("%c%d", isset(Race->atwar,i) ? '*' : ' ', i); X } X! if (!f) printf("(none)"); X! } else printf("???"); X! } X! putchr('\n'); X X! for (y=0; y<p->Maxy; y++) { X! printf("%2d ",y); X! for (x=0; x<p->Maxx; x++) { X! if (shiplocs[x][y]) X! putchr(shiplocs[x][y]); X! else X! putchr(desshow(p, x, y)); X! } X! if (show) X! switch (y) { /* give stockpile info */ X! case 0: printf("| Combat readiness: %u", p->info[Playernum-1].comread); X! break; X! case 1: printf("| Compatibility: %.2f%s",compatibility(p,Race), X! p->conditions[TOXIC] > 50 ? "(TOXIC)" : ""); X! break; X! case 3:printf("| Resource stockpile:%u",p->info[Playernum-1].resource); X! break; X! case 4: printf("| Fuel stockpile: %u",p->info[Playernum-1].fuel); X! break; X! case 5:printf("| Destruct cap: %u",p->info[Playernum-1].destruct); X! break; X! case 6:printf("| %s: %u (%u)", Race->Thing ? "Tons of biomass" : X! "Total Population", p->popn, p->maxpopn); X! break; X! /*case 7: X! break; X! case 8: X! break; X! case 9: X! break; X! case 10: X! break;*/ X! default: printf("|"); X! break; X! } X! putchr('\n'); X } X X- X } X X X char desshow(p,x,y) X register planettype *p; X register int x,y; X--- 94,181 ---- X sh = s->nextship; X free(s); X } X close(map_shdata); X X+ clear(); X X! for (y=0; y<2; y++){ X! for (x=0; x<p->Maxx; x++) { X! if(y==0)address = x/10; X! if(y==1)address = x-10 * (x/10); X! mvaddch(y,x+3,Digits[address]); X! } X! } X! X! for (y=0; y<p->Maxy; y++) { X! address = y/10; X! mvaddch(y+2,0,Digits[address]); X! address = y - 10*(y/10); X! mvaddch(y+2,1,Digits[address]); X! for (x=0; x<p->Maxx; x++) { X! owned1=owned(p,x,y); X! if (shiplocs[x][y]) X! { X! if(owned1)standout(); X! mvaddch(y+2,x+3,shiplocs[x][y]); X! if(owned1)standend(); X! } X! else X! { X! if(owned1)standout(); X! mvaddch(y+2,x+3, desshow(p,x,y)); X! if(owned1)standend(); X! } X! } X! } X! X! if (show){ X! X! move(p->Maxy+3,0); X! printw(" Sects %s: %u", Race->Thing ? "covered" : "owned", X p->info[Playernum-1].numsectsowned); X! printw(" Aliens:"); X if (p->is_explored || Race->tech >= TECH_EXPLORE) { X for (i=1; i<MAXPLAYERS; i++) X if (p->info[i-1].numsectsowned && i!=Playernum) { X f=1; X! printw("%c%d", isset(Race->atwar,i) ? '*' : ' ', i); X } X! if (!f) printw("(none)"); X! } else printw("???"); X X! move(p->Maxy+4,0); X! printw(" Mobilization : %d (%d)", p->info[Playernum-1].comread, X! p->info[Playernum-1].mob_set); X! printw(" Compatibility: %.2f",compatibility(p,Race)); X! if(p->conditions[TOXIC]>50) X! printw(" %u percent TOXIC",p->conditions[TOXIC]); X! move(p->Maxy+5,0); X! printw(" Resource stockpile:%d",p->info[Playernum-1].resource); X! printw(" Fuel stockpile: %d",p->info[Playernum-1].fuel); X! move(p->Maxy+6,0); X! printw(" Destruct cap: %d",p->info[Playernum-1].destruct); X! printw(" %s: %d (%d)", Race->Thing ? "Tons of biomass" : X! "Total Population", p->popn, X! round_rand(.01*(100.-p->conditions[TOXIC])*p->maxpopn) ); X } X+ move(p->Maxy+7, 0); X+ refresh(); X X } X+ int owned(p,x,y) X+ register planettype *p; X+ register int x,y; X+ { X+ register sectortype *s; X+ register int owned0; X X+ owned0=0; X+ s = &Sector(*p,x,y); X X+ if(s->owner==Playernum)owned0=1; X+ return owned0; X+ } X+ X char desshow(p,x,y) X register planettype *p; X register int x,y; X*************** X*** 170,220 **** X if (s->amoeba) X return Shipltrs[OTYPE_AMOEBA]; X X X- /* owned by you */ X- if (s->owner==Playernum) { X X- if (Race->Thing) X- return CHAR_OWNED_THING; X if (s->is_wasted) X! return CHAR_OWNED_WASTELAND; X switch (s->des) { X! case DES_SEA: return CHAR_OWNED_SEA; X! case DES_LAND: return CHAR_OWNED_LAND; X! case DES_MOUNT: return CHAR_OWNED_MOUNT; X! case DES_GAS: return CHAR_OWNED_GAS; X case DES_PLATED: return CHAR_PLATED; X! case DES_ICE: return CHAR_OWNED_ICE; X default: return('!'); X } X X- /* un-owned by anybody */ X- X- } else if (!s->owner) { X- if (!p->is_explored && Race->tech < TECH_EXPLORE) { X- if ( !( (x>0 && (s-1)->owner==Playernum) || X- (x<p->Maxx-1 && (s+1)->owner==Playernum) || X- (y>0 && (s-p->Maxx)->owner==Playernum) || X- (y<p->Maxy-1 && (s+p->Maxx)->owner==Playernum) ) ) X- return CHAR_CLOAKED; X- } X- X- if (s->is_wasted) X- return(CHAR_WASTELAND); X- X- switch (s->des) { X- case DES_SEA: return(CHAR_SEA); X- case DES_LAND: return(CHAR_LAND); X- case DES_MOUNT: return(CHAR_MOUNT); X- case DES_GAS: return(CHAR_GAS); X- case DES_ICE: return CHAR_ICE; X- case DES_PLATED: return(CHAR_PLATED); X- default: return('!'); X- } X- X- /* different owner */ X- X- } else X- return CHAR_DIFFOWNED; X X } X--- 190,211 ---- X if (s->amoeba) X return Shipltrs[OTYPE_AMOEBA]; X X+ if (s->owner != Playernum && s->owner > 0) X+ /* return CHAR_DIFFOWNED; */ X+ return (Digits[s->owner % 10]); X X X if (s->is_wasted) X! return CHAR_WASTELAND; X switch (s->des) { X! case DES_SEA: return CHAR_SEA; X! case DES_LAND: return CHAR_LAND; X! case DES_MOUNT: return CHAR_MOUNT; X! case DES_GAS: return CHAR_GAS; X case DES_PLATED: return CHAR_PLATED; X! case DES_ICE: return CHAR_ICE; X default: return('!'); X } X X X } X*** ../../GB2/max.c Wed Jul 5 15:15:34 1989 X--- max.c Fri Sep 15 07:28:18 1989 X*************** X*** 20,25 **** X--- 20,26 ---- X reg sectortype *p; X float c; /* (compatibility) */ X { X+ X return X (int)( X ( powscale(p->eff)*FACTOR_FERT_SUPPORT * p->fert + 1.0) * X*** ../../GB2/misc.c Wed Jul 5 15:15:35 1989 X--- misc.c Fri Sep 15 07:28:19 1989 X*************** X*** 18,21 **** X return (x+5.0) / (x+10.0); X } X X- X--- 18,20 ---- X*** ../../GB2/moveplanet.c Wed Jul 5 15:15:37 1989 X--- moveplanet.c Fri Sep 15 07:28:24 1989 X*************** X*** 48,54 **** X X sh = planet->ships; X while (sh) { X! if ( (ship = ships[sh]) && !ship->is_dead) X /* don't do landed ships */ X if (!(ship->is_docked && ship->whatdest==LEVEL_PLAN)) { X printf(" orb sh #%d\n",sh); X--- 48,55 ---- X X sh = planet->ships; X while (sh) { X! printf("# %d\n",sh); X! if ( (ship = ships[sh]) && ship->is_alive) X /* don't do landed ships */ X if (!(ship->is_docked && ship->whatdest==LEVEL_PLAN)) { X printf(" orb sh #%d\n",sh); X*************** X*** 57,63 **** X } X sh = ship->nextship; X } X! X X planet->xpos += xadd; X planet->ypos += yadd; X--- 58,64 ---- X } X sh = ship->nextship; X } X! printf("**** \n"); X X planet->xpos += xadd; X planet->ypos += yadd; X*** ../../GB2/moveship.c Wed Jul 5 15:15:38 1989 X--- moveship.c Fri Sep 15 07:28:27 1989 X*************** X*** 29,37 **** X int shipno; X shiptype *s; X { X! double heading,stardist,movedist,truedist,dist,xdest,ydest,sn,cs; X char buf[200]; X! float fuse,mfactor; X int destlevel,deststar=0,destpnum=0; X bool move_err = 0; X shiptype *dsh; X--- 29,37 ---- X int shipno; X shiptype *s; X { X! double stardist,movedist,truedist,dist,xdest,ydest,sn,cs; X char buf[200]; X! float fuse,mfactor,heading; X int destlevel,deststar=0,destpnum=0; X bool move_err = 0; X shiptype *dsh; X*************** X*** 39,48 **** X planettype *opl,*dpl; X X X- printf("moving ship #%d\n",shipno); X X! if (speed_rating(s) && !s->is_docked && !s->is_dead && s->whatdest!=LEVEL_UNIV) { X X /* subtract fuel from the ship */ X fuse = FuelConsts[s->speed] * FUEL_USE; X X--- 39,50 ---- X planettype *opl,*dpl; X X X X! if (s->speed && !s->is_docked && s->is_alive && (s->whatdest!=LEVEL_UNIV X! || s->navigate.on) ) { X X+ printf("moving ship #%d\n",shipno); X+ X /* subtract fuel from the ship */ X fuse = FuelConsts[s->speed] * FUEL_USE; X X*************** X*** 60,71 **** X } X return; X } X X- X /******* move the ship towards dest ******/ X X X X switch (s->whatdest) { X case LEVEL_STAR: X destlevel = LEVEL_STAR; X--- 62,88 ---- X } X return; X } X+ if(s->navigate.turns == 0) s->navigate.on = 0; X X /******* move the ship towards dest ******/ X+ if(s->navigate.on){ /* follow navigational orders */ X+ heading = .0174329252*s->navigate.bearing; X+ mfactor = .01 * (100 - s->damage) * SpeedConsts[s->speed] * MoveConsts[s->whatorbits] X+ / (logscale((int)s->mass) ); X+ s->fuel -= fuse; X+ s->mass -= fuse * MASS_FUEL; X X+ sn = sin(heading); X+ cs = cos(heading); X+ xdest = sn * mfactor; X+ ydest = cs * mfactor; X X+ s->xpos += xdest; X+ s->ypos -= ydest; X X+ s->navigate.turns --; X+ X+ } else { /* navigate is off */ X switch (s->whatdest) { X case LEVEL_STAR: X destlevel = LEVEL_STAR; X*************** X*** 102,108 **** X /* update new xpos,ypos */ X heading = atan2( xdest-s->xpos, X ((ydest - s->ypos)==0.0) ? 0.000001 : (ydest-s->ypos) ); X! mfactor = SpeedConsts[s->speed] * MoveConsts[s->whatorbits] X / (logscale((int)s->mass) ); X X X--- 119,125 ---- X /* update new xpos,ypos */ X heading = atan2( xdest-s->xpos, X ((ydest - s->ypos)==0.0) ? 0.000001 : (ydest-s->ypos) ); X! mfactor = .01 * (100 - s->damage) * SpeedConsts[s->speed] * MoveConsts[s->whatorbits] X / (logscale((int)s->mass) ); X X X*************** X*** 126,135 **** X X if (s->whatdest==LEVEL_SHIP && s->owner!=ships[s->destshipno]->owner X && !isset(races[s->owner]->allied, ships[s->destshipno]->owner) X! && truedist > SYSTEMSIZE*2.0) { X /* (an allied ship lets you follow it..) */ X /* we lost sight of the destination ship. */ X! /* should change SYSTEMSIZE*2.0 to calculated gun range.. */ X s->whatdest = LEVEL_UNIV; X teleg_add("",telegram_buf); X sprintf(buf,"Telecomm from ship #%d at %s\n\n", X--- 143,152 ---- X X if (s->whatdest==LEVEL_SHIP && s->owner!=ships[s->destshipno]->owner X && !isset(races[s->owner]->allied, ships[s->destshipno]->owner) X! && truedist > SYSTEMSIZE*4.0) { X /* (an allied ship lets you follow it..) */ X /* we lost sight of the destination ship. */ X! /* should change SYSTEMSIZE*1.0 to calculated gun range.. */ X s->whatdest = LEVEL_UNIV; X teleg_add("",telegram_buf); X sprintf(buf,"Telecomm from ship #%d at %s\n\n", X*************** X*** 246,251 **** X--- 263,270 ---- X X } X X+ } /* if 'destination' orders */ X+ X } X X X*************** X*** 263,269 **** X int shipno; X { X X! if (!s->is_dead) X switch (s->whatorbits) { X case LEVEL_UNIV: X s->nextship = sdata->ships; X--- 282,288 ---- X int shipno; X { X X! if (s->is_alive) X switch (s->whatorbits) { X case LEVEL_UNIV: X s->nextship = sdata->ships; X*** ../../GB2/orbit.c Wed Jul 5 15:15:41 1989 X--- orbit.c Fri Sep 15 07:28:33 1989 X*************** X*** 19,27 **** X--- 19,29 ---- X #define Midx ((S_X - NAMESIZE)/2.0) X #define Midy (S_Y /2.0) X X+ X #include "vars.h" X #include "ships.h" X #include <curses.h> X+ #include <stdio.h> X extern char Shipltrs[]; X float Lastx, Lasty, Zoom; X extern int God; X*************** X*** 93,101 **** X openshdata(&orbit_shdata); X X while (sh) { X- Locks(1); X (void)getship(orbit_shdata, &s, sh); X- Locks(0); X if (DontDispNum != sh) X DispShip(&where, s, sh, NULL ); X sh = s->nextship; X--- 95,101 ---- X*************** X*** 114,122 **** X X for (i=0; i<Stars[where.snum]->numplanets; i++) { X if (DontDispNum!=i) { X- Locks(1); X getplanet(orbit_pdata,&p,Stars[where.snum]->planetpos[i]); X- Locks(0); X DispPlanet(LEVEL_STAR,p,Stars[where.snum]->pnames[i],DontDispPlanets); X free(p); X } X--- 114,120 ---- X*************** X*** 129,137 **** X if(sh = Stars[where.snum]->ships){ X openshdata(&orbit_shdata); X while (sh) { X- Locks(1); X (void)getship(orbit_shdata, &s, sh); X- Locks(0); X if(s->owner == Playernum && s->popn) X iq = 1; /* you are there to sight, need a crew */ X sh = s->nextship; X--- 127,133 ---- X*************** X*** 145,153 **** X openshdata(&orbit_shdata); X X while (sh) { X- Locks(1); X (void)getship(orbit_shdata, &s, sh); X- Locks(0); X if (DontDispNum != sh && !(s->owner != Playernum && s->type == STYPE_MINE) ) { X X if((s->owner == Playernum) || (iq == 1)) X--- 141,147 ---- X*************** X*** 163,171 **** X case LEVEL_PLAN: X X openpdata(&orbit_pdata); X- Locks(1); X getplanet(orbit_pdata,&p,Stars[where.snum]->planetpos[where.pnum]); X- Locks(0); X close(orbit_pdata); X DispPlanet(LEVEL_PLAN, p, Stars[where.snum]->pnames[where.pnum], DontDispPlanets); X X--- 157,163 ---- X*************** X*** 176,184 **** X if(sh = p->ships){ X openshdata(&orbit_shdata); X while (sh) { X- Locks(1); X (void)getship(orbit_shdata, &s, sh); X- Locks(0); X if(s->owner == Playernum && s->popn) X iq = 1; /* you are there to sight, need a crew */ X sh = s->nextship; X--- 168,174 ---- X*************** X*** 192,200 **** X if (!DontDispShips && (sh = p->ships)) { X openshdata(&orbit_shdata); X while (sh) { X- Locks(1); X (void)getship(orbit_shdata, &s, sh); X- Locks(0); X if (DontDispNum != sh) { X if( !(s->is_docked && s->whatdest==LEVEL_PLAN) ) { X if((s->owner == Playernum) || (iq ==1)) X--- 182,188 ---- X*************** X*** 365,371 **** X startype *star; X int DontDispStars; X { X! int x,y; X register int x2,y2; X float fac; X char *c; X--- 353,360 ---- X startype *star; X int DontDispStars; X { X! planettype *p; X! int x,y,i,col,orbit_pdata; X register int x2,y2; X float fac; X char *c; X*************** X*** 372,378 **** X X if (level==LEVEL_UNIV) { X fac = 1.0; X! x = (int)(Midx+(star->xpos-Lastx)*(Midx/UNIVSIZE) / Zoom)*1.1; X y = (int)(Midy+(star->ypos-Lasty)*(Midy/UNIVSIZE) / Zoom); X } else if (level==LEVEL_STAR) { X fac = 1000.0; X--- 361,367 ---- X X if (level==LEVEL_UNIV) { X fac = 1.0; X! x = (int)(Midx+(star->xpos-Lastx)*(Midx/UNIVSIZE) / Zoom); X y = (int)(Midy+(star->ypos-Lasty)*(Midy/UNIVSIZE) / Zoom); X } else if (level==LEVEL_STAR) { X fac = 1000.0; X*************** X*** 383,392 **** X DispArray(x, y, 11,7, Novae[star->nova_stage-1], fac); X else if (y>=0 && y<=S_Y && x>=0 && x<=S_X) { X move(y,x); X addch('*'); X if (!DontDispStars) { X move(y, x+2); X! addstr(star->name); X } X } X X--- 372,393 ---- X DispArray(x, y, 11,7, Novae[star->nova_stage-1], fac); X else if (y>=0 && y<=S_Y && x>=0 && x<=S_X) { X move(y,x); X+ /* check to see if any of its planets are colonized by the player */ X+ openpdata(&orbit_pdata); X+ col=0; X+ for (i=0; i<star->numplanets; i++) { X+ getplanet(orbit_pdata,&p,star->planetpos[i]); X+ if(p->info[Playernum-1].numsectsowned >0) col =1; X+ free(p); X+ } X+ close(orbit_pdata); X+ X+ if(col)standout(); X addch('*'); X+ if(col)standend(); X if (!DontDispStars) { X move(y, x+2); X! addstr (star->name); X } X } X X*************** X*** 409,415 **** X--- 410,418 ---- X x = (int)(Midx +(-Lastx)*(Midx/PLORBITSIZE) / Zoom); X } X if (x>=0 && x<=S_X && y>=0 && y<=S_Y) { X+ if(p->info[Playernum-1].numsectsowned >0)standout(); X mvaddch(y,x,'@'); X+ standend(); X if (!DontDispPlanets) { X addch(' '); X addstr(name); X*************** X*** 430,480 **** X X " ", X " ", X! "\\===m===/", X " ", X " ", X X! " | ", X! " \\\\ ", X! " m ", X " \\\\ ", X! " \\__", X X " / ", X " || ", X- " m ", X " || ", X " \\ ", X X " __", X " // ", X! " m ", X! " // ", X " | ", X X " ", X " ", X! "/===m===\\", /* cc thinks this is a quoted " w/o the \ */ X " ", X " ", X X "__ ", X " \\\\ ", /* weird stuff again */ X! " m ", X! " \\\\ ", X! " | ", X X " \\ ", X " || ", X- " m ", X " || ", X " / ", X X! " | ", X! " // ", X! " m ", X "__// ", X " " X }; X X X--- 433,484 ---- X X " ", X " ", X! "\\=======/", X " ", X " ", X X! " | ", X! " \\ ", X! " \\\\ ", X " \\\\ ", X! " \\\\__", X X " / ", X " || ", X " || ", X+ " || ", X " \\ ", X X " __", X " // ", X! " // ", X! " / ", X " | ", X X " ", X " ", X! "/=======\\", /* cc thinks this is a quoted " w/o the \ */ X " ", X " ", X X "__ ", X " \\\\ ", /* weird stuff again */ X! " \\\\ ", X! " \\\\ ", X! " | ", X X " \\ ", X " || ", X " || ", X+ " || ", X " / ", X X! " | ", X! " // ", X! " // ", X "__// ", X " " X+ X }; X X X*************** X*** 490,496 **** X float xt,yt,slope; X char *c; X X! if (ship->is_dead) X return; X X switch (where->level) { X--- 494,500 ---- X float xt,yt,slope; X char *c; X X! if (!ship->is_alive) X return; X X switch (where->level) { X*************** X*** 514,539 **** X switch (ship->type) { X X case STYPE_MIRROR: X! if (ship->orders.aimed_at.level==LEVEL_STAR) { X! xt = Stars[ship->orders.aimed_at.snum]->xpos; X! yt = Stars[ship->orders.aimed_at.snum]->ypos; X! } else if (ship->orders.aimed_at.level==LEVEL_PLAN) { X if (where->level==LEVEL_PLAN && X! ship->orders.aimed_at.pnum == where->pnum) { X /* same planet */ X! xt = Stars[ship->orders.aimed_at.snum]->xpos + pl->xpos; X! yt = Stars[ship->orders.aimed_at.snum]->ypos + pl->ypos; X } else { /* different planet */ X openpdata(&pdata); X getplanet(pdata,&apl,Stars[where->snum]->planetpos[where->pnum]); X close(pdata); X! xt = Stars[ship->orders.aimed_at.snum]->xpos + apl->xpos; X! yt = Stars[ship->orders.aimed_at.snum]->ypos + apl->ypos; X free(apl); X } X! } else if (ship->orders.aimed_at.level==LEVEL_SHIP) { X openshdata(&shipdata); X! if (getship(shipdata,&aship,ship->orders.aimed_at.shipno)) { X xt = aship->xpos; X yt = aship->ypos; X } else X--- 518,543 ---- X switch (ship->type) { X X case STYPE_MIRROR: X! if (ship->aimed_at.level==LEVEL_STAR) { X! xt = Stars[ship->aimed_at.snum]->xpos; X! yt = Stars[ship->aimed_at.snum]->ypos; X! } else if (ship->aimed_at.level==LEVEL_PLAN) { X if (where->level==LEVEL_PLAN && X! ship->aimed_at.pnum == where->pnum) { X /* same planet */ X! xt = Stars[ship->aimed_at.snum]->xpos + pl->xpos; X! yt = Stars[ship->aimed_at.snum]->ypos + pl->ypos; X } else { /* different planet */ X openpdata(&pdata); X getplanet(pdata,&apl,Stars[where->snum]->planetpos[where->pnum]); X close(pdata); X! xt = Stars[ship->aimed_at.snum]->xpos + apl->xpos; X! yt = Stars[ship->aimed_at.snum]->ypos + apl->ypos; X free(apl); X } X! } else if (ship->aimed_at.level==LEVEL_SHIP) { X openshdata(&shipdata); X! if (getship(shipdata,&aship,ship->aimed_at.shipno)) { X xt = aship->xpos; X yt = aship->ypos; X } else X*************** X*** 543,604 **** X } else X xt = yt = 0.0; X X! slope = (xt - ship->xpos) / (yt - ship->ypos); X X! if (yt - ship->ypos > 0) { X! if (slope > 0) { X! if (slope > 1) { X! if (slope > 2) X! wm = 0; X! else X! wm = 1; X! } else { X! if (slope > .5) X! wm = 1; X! else X! wm = 2; X! } X } else { X! if (slope < -1) { X! if (slope < -2) X! wm = 0; X! else X! wm = 7; X! } else { X! if (slope < .5) X! wm = 7; X! else X! wm = 6; X! } X! } X! } else { X! if (slope > 0) { X! if (slope > 1) { X! if (slope > 2) X! wm = 4; X! else X! wm = 5; X! } else { X! if (slope > .5) X! wm = 5; X! else X! wm = 6; X! } X! } else { X! if (slope < -1) { X! if (slope < -2) X! wm = 4; X! else X! wm = 3; X! } else { X! if (slope < .5) X! wm = 3; X! else X! wm = 2; X! } X } X- } X X DispArray(x,y, 9,5, Mirror[wm], X ship->whatorbits==LEVEL_UNIV ? (float)100.0 : X (ship->whatorbits==LEVEL_STAR ? (float)10.0 : X--- 547,583 ---- X } else X xt = yt = 0.0; X X! wm=0; X X! if(xt == ship->xpos){ X! wm=0; X! if(yt > ship->ypos)wm=4; X } else { X! slope = (yt - ship->ypos) / (xt - ship->xpos); X! if(yt == ship->ypos){ X! wm=6; X! if(xt > ship->xpos)wm=2; X! } X! X! if(yt > ship->ypos) { X! if(slope < -2.414)wm=4; X! if(slope > -2.414)wm=5; X! if(slope > -0.414)wm=6; X! if(slope > 0.000)wm=2; X! if(slope > 0.414)wm=3; X! if(slope > 2.414)wm=4; X! } X! if(yt < ship->ypos) { X! if(slope < -2.414)wm=0; X! if(slope > -2.414)wm=1; X! if(slope > -0.414)wm=2; X! if(slope > 0.000)wm=6; X! if(slope > 0.414)wm=7; X! if(slope > 2.414)wm=0; X! } X } X X+ X DispArray(x,y, 9,5, Mirror[wm], X ship->whatorbits==LEVEL_UNIV ? (float)100.0 : X (ship->whatorbits==LEVEL_STAR ? (float)10.0 : X*************** X*** 605,612 **** X (ship->whatorbits==LEVEL_PLAN ? (float)1.0 :0))); X /* (magnification) */ X if (x>=0 && x<=S_X && y>=0 && y<=S_Y) { X move(y,x+1); X! printw("%d",shipno); X } X break; X X--- 584,593 ---- X (ship->whatorbits==LEVEL_PLAN ? (float)1.0 :0))); X /* (magnification) */ X if (x>=0 && x<=S_X && y>=0 && y<=S_Y) { X+ if(ship->owner==Playernum)standout(); X move(y,x+1); X! printw("m%d",shipno); X! standend(); X } X break; X X*************** X*** 626,641 **** X register float fac; X /* make a cloud of Von Neumann machines */ X if (ship->whatorbits!=LEVEL_UNIV || (ship->owner == Playernum || God)) { X! fac = ship->orders.object.number / X ((ship->whatorbits==LEVEL_UNIV ? 100.0 : X (ship->whatorbits==LEVEL_STAR ? 30.0 : 4.0)) * Zoom); X! for (n=1; n<=ship->orders.object.number && n<267; n++) { X xa = int_rand(x - (int)fac, x + (int)fac); X ya = int_rand(y - (int)(fac*S_Y/S_X), X y + (int)(fac*S_Y/S_X)); X if (xa>=0 && xa<=S_X && ya>=0 && ya<=S_Y) { X mvaddch(ya,xa, Shipltrs[ship->type]); X printw("%d",shipno); X } X } X } X--- 607,624 ---- X register float fac; X /* make a cloud of Von Neumann machines */ X if (ship->whatorbits!=LEVEL_UNIV || (ship->owner == Playernum || God)) { X! fac = ship->object.number / X ((ship->whatorbits==LEVEL_UNIV ? 100.0 : X (ship->whatorbits==LEVEL_STAR ? 30.0 : 4.0)) * Zoom); X! for (n=1; n<=ship->object.number && n<267; n++) { X xa = int_rand(x - (int)fac, x + (int)fac); X ya = int_rand(y - (int)(fac*S_Y/S_X), X y + (int)(fac*S_Y/S_X)); X if (xa>=0 && xa<=S_X && ya>=0 && ya<=S_Y) { X+ if(ship->owner==Playernum)standout(); X mvaddch(ya,xa, Shipltrs[ship->type]); X printw("%d",shipno); X+ standend(); X } X } X } X*************** X*** 646,653 **** X--- 629,638 ---- X /* other ships can only be seen when in system */ X if (ship->whatorbits!=LEVEL_UNIV || (ship->owner == Playernum || God)) X if (x>=0 && x<=S_X && y>=0 && y<=S_Y) { X+ if(ship->owner==Playernum)standout(); X mvaddch(y,x, Shipltrs[ship->type]); X printw("%d",shipno); X+ standend(); X } X break; X } X*** ../../GB2/order.c Wed Jul 5 15:15:42 1989 X--- order.c Fri Sep 15 07:28:38 1989 X*************** X*** 33,39 **** X first = 1; X prerror = 0; X X- clear(); move(0,0); X X if (argn>=2) { X if (args[1][0]=='#') { X--- 33,38 ---- X*************** X*** 84,92 **** X } X X } X- /* move to bottom of screen */ X- move(stdscr->_maxy-2,0); X- refresh(); X X } X X--- 83,88 ---- X*************** X*** 93,103 **** X X /* various prompt locations so we don't have to remember the #'s */ X #define Opromptx 19 X! #define Oprompty 7 X #define Erry (Oprompty+1) X #define Spromptx (25+PLACENAMESIZE) X #define Sprompty 2 X! #define Tpromptx Spromptx X #define Tprompty 4 X #define Dprompty 2 X #define Dpromptx 15 X--- 89,100 ---- X X /* various prompt locations so we don't have to remember the #'s */ X #define Opromptx 19 X! #define Oprompty 12 X! #define Lprompty 8 X #define Erry (Oprompty+1) X #define Spromptx (25+PLACENAMESIZE) X #define Sprompty 2 X! #define Tpromptx 15 X #define Tprompty 4 X #define Dprompty 2 X #define Dpromptx 15 X*************** X*** 104,111 **** X #define SWprompty 5 X #define SWpromptx 2 X #define Bprompty 6 X X- X int give_orders(APcount, shipno, nextship) X int APcount; X int shipno; X--- 101,112 ---- X #define SWprompty 5 X #define SWpromptx 2 X #define Bprompty 6 X+ #define Nprompty 3 X+ #define Cpromptx 18 X+ #define Trnpromptx 44 X+ #define Pprompty 7 X+ #define Ppromptx 18 X X int give_orders(APcount, shipno, nextship) X int APcount; X int shipno; X*************** X*** 116,121 **** X--- 117,127 ---- X int i = 0; X shiptype *ship, *oldship, ship2; X char c,s[PLACENAMESIZE]; X+ X+ clear(); move(0,0); X+ /* move to bottom of screen */ X+ move(stdscr->_maxy-2,0); X+ refresh(); X X openshdata(&order_shdata); X if (!getship(order_shdata,&ship,shipno)) { X*************** X*** 126,132 **** X X if (ship->owner==Playernum) { X X! if (ship->is_dead) { X printw("%s #%d has been destroyed.\n", Shipnames[ship->type], shipno); X i = 1; X } else { X--- 132,138 ---- X X if (ship->owner==Playernum) { X X! if (!ship->is_alive) { X printw("%s #%d has been destroyed.\n", Shipnames[ship->type], shipno); X i = 1; X } else { X*************** X*** 166,172 **** X } X X move(0,0); X! printw("%13s #%-4d at '%s'. (%2d APs)", X Shipnames[ship->type], shipno, prin_ship_orbits(ship), X ship->whatorbits==LEVEL_UNIV ? Sdata.AP[Playernum] : X Stars[ship->storbits]->AP[Playernum]); X--- 172,181 ---- X } X X move(0,0); X! standout(); X! printw(" %s ",ship->name); X! standend(); X! printw(" (%s) #%-4d at '%s'. (%2d APs)", X Shipnames[ship->type], shipno, prin_ship_orbits(ship), X ship->whatorbits==LEVEL_UNIV ? Sdata.AP[Playernum] : X Stars[ship->storbits]->AP[Playernum]); X*************** X*** 181,211 **** X printw("(s)peed: %d\n",ship->speed); X } X } X if (can_aim(ship)) { X was_obj = 1; X move(4,0); X printw("(a)imed at: %s", prin_aimed_at(ship)); X if (ship->type==STYPE_MIRROR) X! printw("\n (i)ntensity: %3d",ship->orders.aimed_at.intensity); X } else if (ship->type==OTYPE_TRANSDEV) { X move(Tprompty,Tpromptx-18); X! printw("(t)arget ship #%d", ship->orders.object.number); X } else if (ship->type==STYPE_MINE) { X move(Tprompty,Tpromptx-18); X! printw("(t)rigger radius: %d", ship->orders.object.number); X } else if (can_bombard(ship)) { X was_obj = 0; X move(Bprompty,0); clrtoeol(); X! if (ship->orders.o.bombard) X if (ship->whatdest==LEVEL_PLAN) X! printw("(b)OMBARD planet %s", X ship->whatdest==LEVEL_PLAN ? X prin_ship_dest(ship) : "" ); X else X! printw("(b)OMBARD ON (no planet specified)"); X else X printw("(b)ombard off"); X } X if (has_switch(ship)) { X move(SWprompty,SWpromptx); X printw("(o)%s", ship->on ? "n" : "ff"); X--- 190,254 ---- X printw("(s)peed: %d\n",ship->speed); X } X } X+ if (can_navigate(ship)) { X+ move(3,0); clrtoeol(); X+ if (ship->navigate.on) X+ printw("(n)avigate on: (c)ourse %3u (#) of turns %3u", X+ ship->navigate.bearing, X+ ship->navigate.turns); X+ else X+ printw("(n)avigate off"); X+ } X if (can_aim(ship)) { X was_obj = 1; X move(4,0); X printw("(a)imed at: %s", prin_aimed_at(ship)); X if (ship->type==STYPE_MIRROR) X! printw("\n (i)ntensity: %3d",ship->aimed_at.intensity); X } else if (ship->type==OTYPE_TRANSDEV) { X move(Tprompty,Tpromptx-18); X! printw("(t)arget ship #%d", ship->object.number); X } else if (ship->type==STYPE_MINE) { X move(Tprompty,Tpromptx-18); X! printw("(t)rigger radius: %d", ship->object.number); X! move(Tprompty+1,Tpromptx-18); X! if(!ship->mine.mode)printw("(m)ode: radiation"); X! if(ship->mine.mode)printw("(m)ode: explosive"); X } else if (can_bombard(ship)) { X was_obj = 0; X move(Bprompty,0); clrtoeol(); X! if (ship->bombard) X if (ship->whatdest==LEVEL_PLAN) X! printw("(b)ombard planet %s", X ship->whatdest==LEVEL_PLAN ? X prin_ship_dest(ship) : "" ); X else X! printw("(b)ombard on (no planet specified)"); X else X printw("(b)ombard off"); X } X+ if (can_bombard(ship) || ship->type==OTYPE_GR) { X+ move(Pprompty,0); clrtoeol(); X+ if (ship->protect.on) X+ { X+ printw("(p)rotect ship #%d",ship->protect.ship); X+ clrtoeol(); X+ } else { X+ printw("(p)rotect off"); X+ clrtoeol(); X+ } X+ } X+ if (can_bombard(ship) || ship->type==OTYPE_GR) { X+ move(Lprompty,0); clrtoeol(); X+ if (ship->protect.planet) X+ { X+ printw("p(l)anetary defense on"); X+ clrtoeol(); X+ } else { X+ printw("p(l)anetary defense off"); X+ clrtoeol(); X+ } X+ } X if (has_switch(ship)) { X move(SWprompty,SWpromptx); X printw("(o)%s", ship->on ? "n" : "ff"); X*************** X*** 220,226 **** X ship->type==STYPE_MIRROR ? "i" : ""); X else X printw("%s%s ESC?):", has_switch(ship) ? "o" : "", X! ship->type==STYPE_MINE ? "t" : "", ship->type==OTYPE_TRANSDEV ? "t" : "" ); X X } X X--- 263,271 ---- X ship->type==STYPE_MIRROR ? "i" : ""); X else X printw("%s%s ESC?):", has_switch(ship) ? "o" : "", X! ship->type==STYPE_MINE ? "t" : "", X! ship->type==STYPE_MINE ? "m" : "", X! ship->type==OTYPE_TRANSDEV ? "t" : "" ); X X } X X*************** X*** 241,247 **** X--- 286,371 ---- X Mod=0; X touchwin(stdscr); X } break; X+ case 'p': X+ /* toggle protect option */ X+ if(can_bombard(ship) || ship->type==OTYPE_GR) { X+ ship->protect.on = !ship->protect.on; X+ move(Pprompty,0); X+ if(ship->protect.on) X+ { X+ printw("(p)rotect s(h)ip #%d", X+ ship->protect.ship); clrtoeol(); X+ } else { X+ printw("(p)rotect off"); clrtoeol(); X+ } X+ } X+ break; X X+ case 'l': X+ /* toggle protect option */ X+ if(can_bombard(ship) || ship->type == OTYPE_GR) { X+ ship->protect.planet = !ship->protect.planet; X+ move(Lprompty,0); X+ if(ship->protect.planet) X+ { X+ printw("p(l)anetary defense on"); X+ clrtoeol(); X+ } else { X+ printw("p(l)anetary defense off"); X+ clrtoeol(); X+ } X+ } X+ break; X+ case 'h': X+ if(ship->protect.on) { X+ unsigned i; X+ move(Pprompty,Ppromptx); refresh(); X+ tty_off(); X+ scanw("%u",&i); X+ if(i != shipno) X+ ship->protect.ship = i; X+ else X+ printf("you can't `protect' yourself!\n"); X+ tty_on(); X+ } X+ break; X+ case 'n': X+ /* toggle navigate option */ X+ if(can_navigate(ship)) { X+ ship->navigate.on = !ship->navigate.on; X+ move(Nprompty,0); X+ printw("(n)avigate o%s ",ship->navigate.on ? "n : " : "ff"); X+ clrtoeol(); X+ if(ship->navigate.on)printw(" (c)ourse %3u (#) of turns %3u", X+ ship->navigate.bearing, X+ ship->navigate.turns); X+ X+ } X+ break; X+ X+ case '#': X+ /* set number of turns for navigate option */ X+ if(ship->navigate.on) { X+ unsigned i; X+ move(Nprompty,Trnpromptx+6); refresh(); X+ tty_off(); X+ scanw("%u",&i); X+ ship->navigate.turns = i; X+ tty_on(); X+ } X+ break; X+ X+ case 'c': X+ /* set course for navigate option */ X+ if(ship->navigate.on) { unsigned i; X+ move(Nprompty,Cpromptx+10); refresh(); X+ tty_off(); X+ scanw("%u",&i); X+ ship->navigate.bearing = i; X+ tty_on(); X+ } X+ break; X+ X case 'o': X /* on/off switch */ X if (has_switch(ship)) { X*************** X*** 281,289 **** X ungetc(c,stdin); X scanw("%43s",s); X move(Erry,0); refresh(); X- Locks(1); X where = Getplace(s, 1); X- Locks(0); X if (!where.err) { X if (where.level==LEVEL_SHIP) { X ship->destshipno = where.shipno; X--- 405,411 ---- X*************** X*** 347,352 **** X--- 469,483 ---- X } else X makerr(c); X break; X+ case 'm': X+ if (ship->type==STYPE_MINE) { X+ move(Tprompty+1,Tpromptx-18); X+ clrtoeol(); X+ refresh(); X+ if(!ship->mine.mode)printw("(m)ode: radiation"); X+ if(ship->mine.mode)printw("(m)ode: explosive"); X+ ship->mine.mode = !ship->mine.mode; X+ } X X case 't': X if (ship->type==STYPE_MINE) { X*************** X*** 353,366 **** X move(Tprompty,Tpromptx); clrtoeol(); X refresh(); tty_off(); X X! ship->orders.object.number = 0; X X! scanw("%hd", &ship->orders.object.number); X tty_on(); X! if (ship->orders.object.number < 0) X! ship->orders.object.number = 0; X move(Tprompty,Tpromptx); X! printw("%d",ship->orders.object.number); clrtoeol(); X X } else if (ship->type==OTYPE_TRANSDEV) { X X--- 484,497 ---- X move(Tprompty,Tpromptx); clrtoeol(); X refresh(); tty_off(); X X! ship->object.number = 0; X X! scanw("%hd", &ship->object.number); X tty_on(); X! if (ship->object.number < 0) X! ship->object.number = 0; X move(Tprompty,Tpromptx); X! printw("%d",ship->object.number); clrtoeol(); X X } else if (ship->type==OTYPE_TRANSDEV) { X X*************** X*** 367,378 **** X move(Tprompty,Tpromptx); clrtoeol(); X refresh(); tty_off(); X X! ship->orders.object.number = 0; X X! scanw("%hd", &ship->orders.object.number); X tty_on(); X move(Tprompty,Tpromptx); X! printw("%d",ship->orders.object.number); clrtoeol(); X X } else X makerr(c); X--- 498,509 ---- X move(Tprompty,Tpromptx); clrtoeol(); X refresh(); tty_off(); X X! ship->object.number = 0; X X! scanw("%hd", &ship->object.number); X tty_on(); X move(Tprompty,Tpromptx); X! printw("%d",ship->object.number); clrtoeol(); X X } else X makerr(c); X*************** X*** 393,402 **** X if (pl.err) { X break; X } else { X! ship->orders.aimed_at.level = pl.level; X! ship->orders.aimed_at.pnum = pl.pnum; X! ship->orders.aimed_at.snum = pl.snum; X! ship->orders.aimed_at.shipno = pl.shipno; X if (ship->type!=OTYPE_TRACT && X ship->type!=OTYPE_GTELE) X ship->fuel -= FUEL_MANEUVER; X--- 524,533 ---- X if (pl.err) { X break; X } else { X! ship->aimed_at.level = pl.level; X! ship->aimed_at.pnum = pl.pnum; X! ship->aimed_at.snum = pl.snum; X! ship->aimed_at.shipno = pl.shipno; X if (ship->type!=OTYPE_TRACT && X ship->type!=OTYPE_GTELE) X ship->fuel -= FUEL_MANEUVER; X*************** X*** 423,437 **** X if ((c=getchr())!='\n') { X ungetc(c,stdin); X scanw("%u",&i); X! ship->orders.aimed_at.intensity = i; X Mod=1; X! if (ship->orders.aimed_at.intensity>100) X! ship->orders.aimed_at.intensity=100; X! else if (ship->orders.aimed_at.intensity<0) X! ship->orders.aimed_at.intensity=0; X } X move(5,14); X! printw("%3d",ship->orders.aimed_at.intensity); X tty_on(); X } else X makerr(c); X--- 554,568 ---- X if ((c=getchr())!='\n') { X ungetc(c,stdin); X scanw("%u",&i); X! ship->aimed_at.intensity = i; X Mod=1; X! if (ship->aimed_at.intensity>100) X! ship->aimed_at.intensity=100; X! else if (ship->aimed_at.intensity<0) X! ship->aimed_at.intensity=0; X } X move(5,14); X! printw("%3d",ship->aimed_at.intensity); X tty_on(); X } else X makerr(c); X*************** X*** 441,449 **** X if (can_bombard(ship)) { X move(Bprompty,0); X clrtoeol(); X! ship->orders.o.bombard = !ship->orders.o.bombard; X Mod=1; X! if (ship->orders.o.bombard) X if (ship->whatdest==LEVEL_PLAN) X printw("(b)OMBARD planet %s", X ship->whatdest==LEVEL_PLAN ? X--- 572,580 ---- X if (can_bombard(ship)) { X move(Bprompty,0); X clrtoeol(); X! ship->bombard = !ship->bombard; X Mod=1; X! if (ship->bombard) X if (ship->whatdest==LEVEL_PLAN) X printw("(b)OMBARD planet %s", X ship->whatdest==LEVEL_PLAN ? X*************** X*** 469,474 **** X--- 600,606 ---- X printw(" o -- turn object on/off\n"); X if (ship->type==STYPE_MINE) X printw(" t -- trigger radius\n"); X+ printw(" m -- change combat mode\n"); X if (ship->type==OTYPE_TRANSDEV) X printw(" t -- transporter target\n"); X if (can_bombard(ship)) X*************** X*** 519,529 **** X planettype *p; X int plan_give_orders_pdata,Planmod=0; X X- Locks(1); /* we are only looking up data unchanged by the shell */ X openpdata(&plan_give_orders_pdata); X getplanet(plan_give_orders_pdata,&p,filepos); X close(plan_give_orders_pdata); X- Locks(0); X X sh = p->ships; X while (sh) X--- 651,659 ---- X*************** X*** 562,571 **** X { X placetype targ; X X! targ.level = ship->orders.aimed_at.level; X! targ.snum = ship->orders.aimed_at.snum; X! targ.pnum = ship->orders.aimed_at.pnum; X! targ.shipno = ship->orders.aimed_at.shipno; X return Dispplace(&targ); X } X X--- 692,701 ---- X { X placetype targ; X X! targ.level = ship->aimed_at.level; X! targ.snum = ship->aimed_at.snum; X! targ.pnum = ship->aimed_at.pnum; X! targ.shipno = ship->aimed_at.shipno; X return Dispplace(&targ); X } X X*************** X*** 609,615 **** X int sdata,pdata; X float xf,yf; X X! str = Stars[s->orders.aimed_at.snum]; X X if (s->is_docked && s->whatdest==LEVEL_PLAN) { X openpdata(&pdata); X--- 739,745 ---- X int sdata,pdata; X float xf,yf; X X! str = Stars[s->aimed_at.snum]; X X if (s->is_docked && s->whatdest==LEVEL_PLAN) { X openpdata(&pdata); X*************** X*** 623,629 **** X yf = s->ypos; X } X X! switch (s->orders.aimed_at.level) { X case LEVEL_UNIV: X move(Erry,0); X printw("There is nothing out here to aim at."); X--- 753,759 ---- X yf = s->ypos; X } X X! switch (s->aimed_at.level) { X case LEVEL_UNIV: X move(Erry,0); X printw("There is nothing out here to aim at."); X*************** X*** 633,641 **** X printw("Star %s ", prin_aimed_at(s)); X if ((dist=sqrt(Distsq(xf, yf, str->xpos, str->ypos))) <= tele_range(Race, s) ) { X openstardata(&sdata); X! getstar(sdata, &str, s->orders.aimed_at.snum); X setbit(str->explored,Playernum); X! putstar(sdata, str, s->orders.aimed_at.snum); X close(sdata); /* don't need to care about Stars */ X printw("has been surveyed, distance %g.\n",dist); X } else { X--- 763,771 ---- X printw("Star %s ", prin_aimed_at(s)); X if ((dist=sqrt(Distsq(xf, yf, str->xpos, str->ypos))) <= tele_range(Race, s) ) { X openstardata(&sdata); X! getstar(sdata, &str, s->aimed_at.snum); X setbit(str->explored,Playernum); X! putstar(sdata, str, s->aimed_at.snum); X close(sdata); /* don't need to care about Stars */ X printw("has been surveyed, distance %g.\n",dist); X } else { X*************** X*** 647,657 **** X move(Erry,0); X printw("Planet %s ", prin_aimed_at(s)); X openpdata(&pdata); X! getplanet(pdata, &p, str->planetpos[s->orders.aimed_at.pnum]); X if ((dist=sqrt(Distsq(xf, yf, str->xpos+p->xpos, str->ypos+p->ypos))) <= tele_range(Race, s) ) { X setbit(str->explored,Playernum); X p->info[Playernum-1].explored = 1; X! putplanet(pdata, p, str->planetpos[s->orders.aimed_at.pnum]); X free(p); X printw("has been surveyed, distance %g.\n", dist); X } else { X--- 777,787 ---- X move(Erry,0); X printw("Planet %s ", prin_aimed_at(s)); X openpdata(&pdata); X! getplanet(pdata, &p, str->planetpos[s->aimed_at.pnum]); X if ((dist=sqrt(Distsq(xf, yf, str->xpos+p->xpos, str->ypos+p->ypos))) <= tele_range(Race, s) ) { X setbit(str->explored,Playernum); X p->info[Playernum-1].explored = 1; X! putplanet(pdata, p, str->planetpos[s->aimed_at.pnum]); X free(p); X printw("has been surveyed, distance %g.\n", dist); X } else { X*** /dev/null Fri Sep 15 08:30:02 1989 X--- patchlevel.h Fri Sep 15 08:33:35 1989 X*************** X*** 0 **** X--- 1 ---- X+ #define PATCHLEVEL 1 END_OF_FILE if test 50119 -ne `wc -c <'patches01c'`; then echo shar: \"'patches01c'\" unpacked with wrong size! fi # end of 'patches01c' fi echo shar: End of archive 3 \(of 4\). cp /dev/null ark3isdone 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