Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.3 4.3bsd-beta 6/6/85; site ucbvax.ARPA Path: utzoo!watmath!clyde!burl!ulysses!allegra!mit-eddie!genrad!decvax!decwrl!ucbvax!okamoto From: okamoto@ucbvax.ARPA (Doctor Who) Newsgroups: net.sources.games Subject: Trek73 (part 5 of 4) Message-ID: <10411@ucbvax.ARPA> Date: Tue, 17-Sep-85 10:41:47 EDT Article-I.D.: ucbvax.10411 Posted: Tue Sep 17 10:41:47 1985 Date-Received: Thu, 19-Sep-85 04:30:45 EDT Organization: University of California at Berkeley Lines: 478 Here is the Makefile for trek73 and the missing file. Sorry for any problems. Jeff Okamoto # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. -----cut here-----cut here-----cut here-----cut here----- #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # Makefile # subs.c # This archive created: Tue Sep 17 07:39:18 1985 echo shar: extracting Makefile '(709 characters)' sed 's/^XX//' << \SHAR_EOF > Makefile XX# XX# makefile for trek73 XX# XX XXCFLAGS=-O XXOBJECTS= cmds1.o cmds2.o cmds3.o cmds4.o dist.o endgame.o enemycom.o\ XX firing.o globals.o main.o misc.o mission.o moveships.o\ XX parseopts.o strat1.o subs.o XXCFILES= cmds1.c cmds2.c cmds3.c cmds4.c dist.c endgame.c enemycom.c\ XX firing.c globals.c main.c misc.c mission.c moveships.c\ XX parseopts.c strat1.c subs.c XXHEADS= structs.h defines.h XXLIBS= -lm XX XXall: trek73 XX XXtrek73: ${OBJECTS} parsit.o XX cc ${CFLAGS} ${OBJECTS} parsit.o ${LIBS} XX install a.out trek73 XX XX${OBJECTS}: ${HEADS} XX XXparsit.o: parsit.c XX cc -O -c parsit.c XX XXtags: ${CFILES} XX ctags ${CFILES} ${HEADS} XX XXlint: XX lint -za ${CFILES} > lint.out XX XXclean: XX rm -f ${OBJECTS} parsit.o trek73 make.out errs core lint.out a.out SHAR_EOF if test 709 -ne "`wc -c Makefile`" then echo shar: error transmitting Makefile '(should have been 709 characters)' fi echo shar: extracting subs.c '(7513 characters)' sed 's/^XX//' << \SHAR_EOF > subs.c XX/* XX * TREK73: subs.c XX * XX * Miscellaneous Subroutines XX * XX * ship_name, newitem, delitem, rangefind, bearing, phaser_hit, XX * torpedo_hit, damage, antimatter_hit, recitfy XX */ XX XX#include "defines.h" XX#include "structs.h" XX#include XX#include XX XXextern struct ship *shiplist[]; XXextern char science[]; XX XXstruct ship *ship_name(name, start) XXchar *name; XXint start; XX{ XX extern int shipnum; XX register int i; XX register int j; XX register int len; XX XX if (islower(*name)) { XX *name = toupper(*name); XX } XX j = shipnum; XX len = strlen(name); XX for (i=start; i<=j; i++) { XX if (shiplist[i]->name[0] == NULL) XX continue; XX if (strncmp(name, shiplist[i]->name, len) == 0) XX return shiplist[i]; XX } XX printf("%s: I am unable to find the %s\n", science, name); XX return NULL; XX} XX XX XXstruct list *newitem(item) XXint item; XX{ XX extern struct list head; XX extern struct list *tail; XX register struct list *new; XX register struct list *newtail; XX XX /* XX * if there's no "tail" node, make one (only happens at init) XX */ XX if (tail == NULL) { XX new = MKNODE(struct list, *, 1); XX new->back = &head; XX new->fwd = NULL; XX new->data.tp = NULL; XX head.fwd = new; XX tail = new; XX } XX new = tail; XX /* XX * now make the new tail node XX */ XX newtail = MKNODE(struct list, *, 1); XX newtail->back = new; XX newtail->fwd = NULL; XX newtail->data.tp = NULL; XX newtail->type = 0; XX tail = newtail; XX /* XX * link the old tail node to the new one XX */ XX new->type = item; XX new->fwd = newtail; XX return new; XX} XX XX XXint delitem(item) XXstruct list *item; XX{ XX extern struct list *tail; XX extern struct list head; XX register struct list *bp; XX register struct list *fp; XX XX bp = item->back; XX fp = item->fwd; XX if (item->data.tp != NULL) XX free((char *) item->data.tp); XX /* XX * re-arrange pointers on both the next and the previous XX * nodes; if no forward pointer, we were the tail so make XX * the bp the new tail node. XX */ XX if (fp != NULL) { XX bp->fwd = fp; XX fp->back = bp; XX } else { XX tail = bp; XX bp->fwd = NULL; XX } XX free((char *) item); XX} XX XXint rangefind(x1, x2, y1, y2) XXint x1; XXint x2; XXint y1; XXint y2; XX{ XX extern double sqrt(); XX extern double atan(); XX register int i; XX register int x, y; XX double d1, d2; XX XX x = x2 - x1; XX y = y2 - y1; XX /* XX * Both x and y must be cast as double else overflow XX * may occur. XX */ XX d1 = (double) x * (double) x + (double) y * (double) y; XX d2 = sqrt(d1); XX i = d2; XX return i; XX} XX XX/* XX * This routine finds the bearing of (x2,y2) from (x1,y1) XX */ XXint bearing(x1, x2, y1, y2) XXint x1; XXint x2; XXint y1; XXint y2; XX{ XX extern double atan(); XX float x; XX float y; XX register int bear; XX double d1; XX double d2; XX XX x = x2 - x1; XX y = y2 - y1; XX if (x == 0.0) XX bear = 90; XX else { XX d1 = y/x; XX d2 = atan(d1) * 57.2958; XX bear = d2; XX } XX if (x < 0.0 || y < 0.0) { XX bear += 180; XX if (x >= 0.0) XX bear += 180; XX } XX return bear; XX} XX XXint phaser_hit(sp, x, y, bank, true_bear) XXstruct ship *sp; XXint x; XXint y; XXstruct phaser *bank; XXint true_bear; XX{ XX extern double sqrt(); XX register int hit; XX int i; XX int spread; XX int bear; XX double d1; XX double d2; XX XX hit = 0; XX i = rangefind(sp->x, x, sp->y, y); XX if (i < 1000) { XX bear = bearing(sp->x, x, sp->y, y); XX spread = rectify(true_bear - bear); XX /* XX * Check if a target is within the phaser spread XX */ XX if (spread > sp->p_spread && 360-spread > sp->p_spread) XX return 0; XX d1 = 1.0 - (float)i/1000.0; XX d2 = (float)bank->load * sqrt(d1) * sp->p_percent / 100; XX d2 = (float)bank->load * d2 * 45.0/(float)sp->p_spread * sp->p_percent / 100; XX hit = d2/10.0; XX } XX return hit; XX} XX XXint torpedo_hit(fuel, x, y, tx, ty) XXint fuel; XXint x; XXint y; XXint tx; XXint ty; XX{ XX extern double sqrt(); XX register int hit; XX int i; XX double d1; XX double d2; XX float f1; XX float f2; XX XX hit = 0; XX i = rangefind(x, tx, y, ty); XX f1 = fuel * 5.0; XX f2 = f1 * 10.0; XX if (i < f2) { XX d1 = 1.0 - (float)i/f2; XX d2 = (float)f1 * sqrt(d1); XX hit = d2; XX } XX return hit; XX} XX XX XXdamage(hit, ep, s, dam) XXint hit; XXstruct ship *ep; XXint s; XXstruct damage *dam; XX{ XX register int i; XX register int j; XX register int k; XX float f1; XX float f2; XX struct ship *fed; XX XX fed = shiplist[0]; XX printf("hit %d on %s's shield %d\n", hit, ep->name, s); XX s--; XX /* XX * Note that if the shield is at 100% efficiency, no XX * damage at all will be taken XX */ XX f1 = hit * (1.0 - ep->shields[s].eff * ep->shields[s].drain); XX if (f1 < 0) XX return 0; XX ep->eff += f1/dam->eff; XX ep->pods -= f1/dam->fuel; XX ep->energy -= f1/dam->fuel; XX ep->regen -= f1/dam->regen; XX if (ep->regen < 0.0) XX ep->regen = 0.0; XX if (ep->pods < 0.0) XX ep->pods = 0.0; XX if (ep->energy < 0.0) XX ep->energy = 0.0; XX if (ep->pods < ep->energy) XX ep->energy = ep->pods; XX f2 = dam->shield * 100; XX if (s == 0) XX f2 *= 1.5; XX ep->shields[s].eff -= max(hit/f2, 0); XX if (ep->shields[s].eff < 0.0) XX ep->shields[s].eff = 0.0; XX j = f1 * dam->crew; XX if (j > 0) XX ep->crew -= max(randm(j), 0); XX if (ep->crew < 0) XX ep->crew = 0; XX j = f1/dam->weapon; XX for(i=0; iphasers[k].status & P_DAMAGED) XX continue; XX ep->phasers[k].status |= P_DAMAGED; XX /* XX * Reroute the energy XX * back to the engines XX */ XX ep->energy = min(ep->pods, ep->energy XX + ep->phasers[k].load); XX ep->phasers[k].load = 0; XX ep->phasers[k].drain = 0; XX k++; XX if (ep == fed) XX printf(" phaser %d damaged.\n", k); XX } else { XX k -= 5; XX if (ep->tubes[k].status & T_DAMAGED) XX continue; XX /* XX * If tubes are damaged, reroute the pods XX * back to the engines XX */ XX ep->pods += ep->tubes[k].load; XX ep->energy += ep->tubes[k].load; XX ep->tubes[k].load = 0; XX ep->tubes[k].status |= T_DAMAGED; XX k++; XX if (ep == fed) XX printf(" tube %d damaged\n", k); XX } XX } XX for (i=0; i<4; i++) { XX if (ep->status & 1<stats[i].roll) < f1) { XX ep->status |= 1<stats[i].mesg); XX } XX } XX#ifdef HISTORICAL XX /* XX * Historically, if more than 43 points of damage were done XX * to the ship, it would destroy itself. This led to much XX * abuse of probes and thus has been enclosed inside of XX * an #ifdef XX */ XX if (f1 > 43) XX ep->delay = 1; XX#endif XX return 0; XX} XX XX XXantimatter_hit(ptr, x, y, fuel) XXchar *ptr; XXint x; XXint y; XXint fuel; XX{ XX extern struct list head; XX extern struct list *tail; XX extern struct damage a_damage; XX register struct list *lp; XX register int hit; XX int tarx, tary; XX int s; XX int bear; XX struct torpedo *tp; XX struct ship *sp; XX XX for (lp = &head; lp != tail; lp = lp->fwd) { XX if (lp->type == 0) XX continue; XX sp = NULL; XX tp = NULL; XX if (lp->type == I_SHIP) { XX sp = lp->data.sp; XX tarx = sp->x; XX tary = sp->y; XX } else { XX tp = lp->data.tp; XX tarx = tp->x; XX tary = tp->y; XX } XX if (sp == (struct ship *) ptr || tp == (struct torpedo *) ptr) XX continue; XX hit = torpedo_hit(fuel, x, y, tarx, tary); XX if (hit <= 0) XX continue; XX if (sp) { XX /* XX * Determine which shield is hit XX */ XX bear = rectify(bearing(tarx, x, tary, y) - sp->course); XX if (bear < 45 || bear > 315) XX s = 1; XX else if (bear < 135) XX s = 2; XX else if (bear < 225) XX s = 3; XX else XX s = 4; XX damage(hit, sp, s, &a_damage); XX } else { XX if (tp->timedelay <= 2) XX continue; XX tp->timedelay = 2; XX switch (lp->type) { XX case I_TORPEDO: XX printf("hit on torpedo %d\n", XX tp->id); XX break; XX case I_PROBE: XX printf("hit on probe %d\n", XX tp->id); XX break; XX case I_ENG: XX printf("hit on %s engineering\n", XX tp->from->name); XX break; XX } XX } XX } XX} XX XXint rectify(x) XXint x; XX{ XX register int ret; XX XX ret = x; XX if (ret < 0) XX ret += 360; XX else if (ret > 360) XX ret -= 360; XX return ret; XX} SHAR_EOF if test 7513 -ne "`wc -c subs.c`" then echo shar: error transmitting subs.c '(should have been 7513 characters)' fi # End of shell archive exit 0