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!ucbvax!okamoto From: okamoto@ucbvax.ARPA (Doctor Who) Newsgroups: net.sources.games Subject: Trek73 (part 3 of 4) Message-ID: <10401@ucbvax.ARPA> Date: Mon, 16-Sep-85 11:15:07 EDT Article-I.D.: ucbvax.10401 Posted: Mon Sep 16 11:15:07 1985 Date-Received: Wed, 18-Sep-85 02:58:03 EDT Organization: University of California at Berkeley Lines: 1115 # 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: # endgame.c # enemycom.c # firing.c # globals.c # This archive created: Mon Sep 9 12:06:55 1985 echo shar: extracting endgame.c '(4612 characters)' sed 's/^XX//' << \SHAR_EOF > endgame.c XX/* XX * TREK73: endgame.c XX * XX * prints end-of-game messages and warnings XX * XX * leftovers, final, warn XX * XX */ XX XX#includeXX#include "defines.h" XX#include "structs.h" XX XXextern char captain[]; XXextern char title[]; XXextern char science[]; XXextern char com[]; XXextern char helmsman[]; XXextern char foerace[]; XXextern char foename[]; XXextern char foestype[]; XXextern char empire[]; XXextern int reengaged; XX XXleftovers() XX{ XX extern struct list head; XX extern struct list *tail; XX register struct list *lp; XX XX for (lp = &head; lp != tail; lp = lp->fwd) { XX if (lp->type == 0) XX continue; XX if (lp->type != I_SHIP) XX return 1; XX } XX return 0; XX} XX XX XXfinal(mesg) XXint mesg; XX{ XX extern struct ship *shiplist[]; XX extern int shipnum; XX register int i; XX register int j; XX struct ship *sp; XX struct ship *ep; XX char buf[80]; XX extern char *plural(); XX XX XX sp = shiplist[0]; XX /* If we're getting that message again, ignore it. */ XX if ((mesg == 2) && (reengaged)) XX return; XX switch (mesg) { XX case 0: XX starfleet(); XX printf("We have recieved confirmation that the USS %s,\n", XX sp->name); XX printf(" captained by %s, was destroyed by %s%s\n",captain, shipnum==1 ?"a ":"", foerace); XX printf(" %s%s. May future Federation officers\n", foestype, plural(shipnum)); XX printf(" perform better in their duties.\n\n"); XX break; XX case 1: XX starfleet(); XX printf("We commend Captain %s and his crew on their\n",captain); XX printf(" fine performance against the %ss. May he\n",foerace); XX printf(" be an inspiration to future starship captains.\n"); XX break; XX case 2: XX /* XX * Give him a chance to re-engage if he wants to. If he does, XX * he has to get within a range of 3500 before he can again XX * try to dis-engage XX */ XX if (!reengaged) { XX printf("%s: %s, we are in a position to either disengage from the\n", science, title); XX printf(" %ss, or re-engage them in combat.\n", foerace); XX printf(" Do you wish to re-engage?\n"); XX printf("%s: [y or n] ", captain); XX gets(buf); XX if ((*buf == NULL) || (*buf == 'y') || (*buf == 'Y')) { XX reengaged = 1; XX return; XX } XX } XX starfleet(); XX printf("Captain %s of the starship %s has\n",captain,sp->name); XX printf(" out-maneuvered %s aggressors. We commend\n",foerace); XX printf(" his tactical ability.\n"); XX break; XX case 3: XX starfleet(); XX printf("Captain %s of the starship %s has\n",captain,sp->name); XX printf(" surrendered his vessel to the %ss. May\n",foerace); XX printf(" Captain Donsell be remembered.\n"); XX break; XX case 4: XX starfleet(); XX printf("We have recieved word from the %s that the\n",sp->name); XX printf(" %ss have surrendered.\n",foerace); XX break; XX case 5: XX starfleet(); XX printf("One of our vessels has encountered the wreckage of\n"); XX printf(" the %s and %d other %s vessel%s.\n", sp->name, XX shipnum, foerace, plural(shipnum)); XX break; XX default: XX printf("how did we get here?\n"); XX break; XX } XX printf("\n\n"); XX j = 0; XX for (i=0; i<=shipnum; i++) { XX ep = shiplist[i]; XX if (ep->status & S_DEAD) XX continue; XX if (!j) XX printf("Survivors Reported:\n"); XX j++; XX } XX if (j) { XX for (i=0; i<=shipnum; i++) { XX ep = shiplist[i]; XX if ((ep->status & S_DEAD) || (ep->crew == 0)){ XX printf(" %s -- destroyed.\n",ep->name); XX } XX else XX printf(" %s -- %d\n", ep->name, ep->crew); XX } XX } else XX printf("*** No survivors reported ***\n"); XX exit (1); XX} XX XX XX XXwarn(mesg) XXint mesg; XX{ XX extern struct ship *shiplist[]; XX static int beenhere[5] = {0, 0, 0, 0, 0}; XX struct ship *sp; XX XX if ((reengaged) && (mesg == 2)) { XX return 0; XX } XX if (beenhere[mesg]) XX return 0; XX sp = shiplist[0]; XX switch (mesg) { XX case 0: XX printf("Message to the Federation: This is Commander\n"); XX printf(" %s of the %s %s. We have defeated\n", foename, foerace, empire); XX printf(" the %s and are departing the quadrant.\n", sp->name); XX break; XX case 1: XX printf("%s: All %s vessels have been either\n", science, foerace); XX printf(" destroyed or crippled. We still, however, have\n"); XX printf(" antimatter devices to avoid.\n"); XX break; XX case 2: XX printf("%s: The %ss are falling behind and seem to\n", helmsman, foerace); XX printf(" be breaking off their attack.\n"); XX break; XX case 3: XX printf("%s: I'm informing Starfleet Command of our \n", com); XX printf(" disposition.\n"); XX break; XX case 4: XX printf("%s: Although the %ss have surrendered,\n",science, foerace); XX printf(" there are still antimatter devices floating\n"); XX printf(" around us.\n"); XX break; XX default: XX printf("how did we get here?\n"); XX break; XX } XX beenhere[mesg]++; XX return 0; XX} XX XXstarfleet() XX{ XX printf("\n\nStarfleet Command: \n"); XX sleep(3); XX printf("\n"); XX} SHAR_EOF if test 4612 -ne "`wc -c endgame.c`" then echo shar: error transmitting endgame.c '(should have been 4612 characters)' fi echo shar: extracting enemycom.c '(8299 characters)' sed 's/^XX//' << \SHAR_EOF > enemycom.c XX/* XX * TREK73: enemycom.c XX * XX * Enemy strategy sub-routines XX * XX * e_phasers, e_lockphasers, e_locktubes, e_checkprobe, e_evade, XX * e_pursue, e_launchprobe, e_destruct, e_torpedo, e_jettison, XX * e_checkarms, e_runaway, e_attack, e_loadtubes, e_closetorp XX * XX */ XX XX#include "defines.h" XX#include "structs.h" XX XXextern float fabs(); XXextern char science[]; XXextern char helmsman[]; XX XX/* XX * returns the number of banks we're going to fire XX * it also sets them up. XX */ XXint e_phasers(sp, fed) XXstruct ship *sp; XXstruct ship *fed; XX{ XX register int i; XX register int banks; XX register int hit; XX register int howmany; XX int bear; XX XX banks = 0; XX howmany = randm(2) + 2; XX sp->p_spread = 10 + randm(12); XX for (i=0; i<4; i++) { XX if (sp->phasers[i].status & P_DAMAGED) XX continue; XX if (fed != NULL) { XX if (sp->phasers[i].target == NULL) XX continue; XX bear = bearing(sp->x, fed->x, sp->y, fed->y); XX hit = phaser_hit(sp, fed->x, fed->y, &sp->phasers[i], bear); XX if (hit <= 0) XX continue; XX } XX banks++; XX sp->phasers[i].status |= P_FIRING; XX if (banks > howmany) XX break; XX } XX return banks; XX} XX XX/* XX * returns positive if we had to lock phasers XX */ XXint e_lockphasers(sp, fed) XXstruct ship *sp; XXstruct ship *fed; XX{ XX register int i; XX register int banks; XX XX banks = 0; XX for (i=0; i<4; i++) { XX if (sp->phasers[i].status & P_DAMAGED) XX continue; XX if (sp->phasers[i].target != NULL) XX continue; XX sp->phasers[i].target = fed; XX banks++; XX } XX return banks; XX} XX XX/* XX * returns positive if we had to lock tubes XX */ XXint e_locktubes(sp, fed) XXstruct ship *sp; XXstruct ship *fed; XX{ XX register int i; XX register int tubes; XX XX tubes = 0; XX for (i=0; i<4; i++) { XX if (sp->tubes[i].status & T_DAMAGED) XX continue; XX if (sp->tubes[i].target != NULL) XX continue; XX sp->tubes[i].target = fed; XX tubes++; XX } XX return tubes; XX} XX XX/* XX * returns 1 if evasive action being taken (to avoid probe) XX */ XXe_checkprobe(sp) XXstruct ship *sp; XX{ XX extern struct list head; XX extern struct list *tail; XX register struct list *lp; XX register int range; XX register struct torpedo *tp; XX XX for (lp = &head; lp != tail; lp = lp->fwd) { XX if (lp->type != I_PROBE) XX continue; XX tp = lp->data.tp; XX range = rangefind(sp->x, tp->x, sp->y, tp->y); XX if (range < 1000) { XX e_evade(sp, tp->x, tp->y, I_PROBE); XX return 1; XX } XX } XX return 0; XX} XX XX XX/* XX * advance to the rear! XX */ XXe_evade(sp, x, y, type) XXstruct ship *sp; XXint x; XXint y; XXint type; /* Currently unused */ XX{ XX register int i; XX register int newcourse; XX int bear; XX XX bear = bearing(sp->x, x, sp->y, y); XX printf("%s taking evasive action!\n", sp->name); XX i = randm(3); XX switch (i) { XX case 1: XX newcourse = rectify(bear - 90); XX break; XX case 2: XX newcourse = rectify(bear + 90); XX break; XX case 3: XX newcourse = rectify(bear + 180); XX break; XX default: XX printf("error in evade()\n"); XX break; XX } XX sp->target = NULL; XX sp->newcourse = newcourse; XX sp->newwarp = 2 + randm(8); XX if (sp->status & S_WARP) XX sp->newwarp = 1.0; XX type = type; /* LINT */ XX return 1; XX} XX XX XXe_pursue(sp, fed, speed) XXstruct ship *sp; XXstruct ship *fed; XXint speed; XX{ XX int bear; XX int coursediff; XX XX bear = bearing(sp->x, fed->x, sp->y, fed->y); XX /* XX * do a quick turn if our speed is > warp 10 and XX * (thus) we are never going to bear on the fed ship XX * speed = 7 is a magic cookie. feel free to change. XX */ XX coursediff = abs(sp->course - bear); XX if (speed >= 9 && coursediff > 10) XX speed = 5; XX sp->target = fed; XX sp->newcourse = bear; XX sp->newwarp = speed; XX if (speed > 1 && (sp->status & S_WARP)) XX sp->newwarp = 0.99; XX return 1; XX} XX XX XXint e_launchprobe(sp, fed) XXstruct ship *sp; XXstruct ship *fed; XX{ XX extern struct list *newitem(); XX register int i; XX register struct list *lp; XX register struct torpedo *tp; XX XX if ((sp->status & S_PROBE) || sp->energy <= 10) XX return 0; XX /* XX * fed ship has to be going slow before we'll launch XX * a probe at it. XX */ XX if (fabs(fed->warp) > 1.0) XX return 0; XX lp = newitem(I_PROBE); XX tp = lp->data.tp = MKNODE(struct torpedo, *, 1); XX printf("%s launching probe\n", sp->name); XX tp->speed = sp->warp; XX tp->newspeed = 3.0; XX tp->target = fed; XX tp->course = bearing(sp->x, fed->x, sp->y, fed->y); XX tp->x = sp->x; XX tp->y = sp->y; XX tp->prox = 200 + randm(200); XX tp->timedelay = 15 * 10; XX i = min(randm(15) + 10, sp->energy); XX tp->fuel = i; XX sp->energy -= i; XX sp->pods -= i; XX return 1; XX} XX XX XX/* XX * goodbye, cruel world XX */ XXint e_destruct(sp) XXstruct ship *sp; XX{ XX if (sp->delay < 5 * 9) XX return 0; XX sp->delay = 5 * 9; XX printf("%s: The %s is overloading what remains of it's\n",science, sp->name); XX printf(" antimatter pods -- obviously a suicidal gesture.\n"); XX printf(" Detonation in five seconds\n"); XX return 1; XX} XX XX XXint e_torpedo(sp) XXstruct ship *sp; XX{ XX extern struct ship *shiplist[]; XX extern int shipnum; XX register int i; XX register int tubes; XX register int howmany; XX register struct ship *sp1; XX register int range; XX XX /* XX * don't shoot if someone might be in the way XX * (i.e. proximity fuse will go off right as the XX * torps leave the tubes!) XX */ XX for (i=1; i <= shipnum; i++) { XX sp1 = shiplist[i]; XX if ((sp1->status & S_DEAD) || sp1 == sp) XX continue; XX range = rangefind(sp->x, sp1->x, sp->y, sp1->y); XX if (range <= 400) XX return 0; XX } XX tubes = 0; XX howmany = randm(2) + 1; XX for (i=0; i<4; i++) { XX if ((sp->tubes[i].status & T_DAMAGED) XX || (sp->tubes[i].load == 0)) XX continue; XX if (sp->tubes[i].target == NULL) XX continue; XX tubes++; XX sp->tubes[i].status |= T_FIRING; XX if (tubes > howmany) XX break; XX } XX return tubes; XX} XX XX XXint e_jettison(sp) XXstruct ship *sp; XX{ XX extern struct list *newitem(); XX register struct list *lp; XX register struct torpedo *tp; XX XX if (sp->status & S_ENG) XX return 0; XX if (!(shiplist[0]->status & S_SENSOR)) { XX printf("%s: Sensors indicate debris being left by\n", science); XX printf(" the %s. Insufficient mass?\n", sp->name); XX } XX lp = newitem(I_ENG); XX tp = lp->data.tp = MKNODE(struct torpedo, *, 1); XX tp->id = new_slot(); XX /* XX * ship slows to warp 1.0 when jettisonning engineering XX */ XX tp->newspeed = 0.0; XX tp->speed = sp->warp; XX tp->target = NULL; XX tp->course = sp->course; XX tp->x = sp->x; XX tp->y = sp->y; XX tp->prox = 0; XX tp->timedelay = 15 * 9; XX tp->fuel = sp->pods; XX sp->energy = sp->pods = 0; XX sp->regen = 0.0; XX tp->from = sp; XX if (sp->newwarp < -1.0) XX sp->newwarp = -0.99; XX if (sp->newwarp > 1.0) XX sp->newwarp = 0.99; XX sp->status |= S_ENG; XX sp->status |= S_WARP; XX return 1; XX} XX XXint e_checkarms(sp) XXstruct ship *sp; XX{ XX register int i; XX register int arms; XX XX arms = 0; XX for (i=0; i<4; i++) XX if (sp->phasers[i].load >= 0) XX arms++; XX for (i=0; i<6; i++) XX if (sp->tubes[i].load >= 0) XX arms++; XX return arms; XX} XX XXint e_runaway(sp, fed) XXstruct ship *sp; XXstruct ship *fed; XX{ XX register int speed; XX XX speed = randm(4) + 2; XX speed = -speed; XX e_pursue(sp, fed, speed); XX printf("%s: The %s is retreating.\n", helmsman, sp->name); XX return 1; XX} XX XXint e_attack(sp, fed) XXstruct ship *sp; XXstruct ship *fed; XX{ XX int speed; XX float tmpf; XX XX tmpf = fabs(fed->warp); XX if (sp->warp >= tmpf + 2.0 || (sp->status & S_WARP)) XX return 0; XX speed = min(11, tmpf + randm(2) + 2.0); XX e_pursue(sp, fed, speed); XX printf("%s: %s attacking.\n", helmsman, sp->name); XX return 1; XX} XX XXint e_loadtubes(sp) XXstruct ship *sp; XX{ XX register int i; XX register int j; XX register int loaded; XX register int below; XX XX below = 10; XX loaded = 0; XX for (i=0; i<6; i++) { XX if (sp->energy <= below) XX break; XX if (sp->tubes[i].status & T_DAMAGED) XX continue; XX j = min(sp->energy, 10-sp->tubes[i].load); XX if (j == 0) XX continue; XX sp->energy -= j; XX sp->pods -= j; XX sp->tubes[i].load += j; XX loaded++; XX } XX return loaded; XX} XX XXe_closetorps(sp, fed) XXstruct ship *sp; XXstruct ship *fed; XX{ XX extern struct list head; XX extern struct list *tail; XX register struct list *lp; XX register int range; XX register struct torpedo *tp; XX struct torpedo *bad; XX XX bad = NULL; XX for (lp = &head; lp != tail; lp = lp->fwd) { XX if (lp->type != I_TORPEDO) XX continue; XX tp = lp->data.tp; XX if (tp->from != fed) XX continue; XX range = rangefind(sp->x, tp->x, sp->y, tp->y); XX if (range < 1200) { XX bad = tp; XX /* XX * fire phasers - hope they're pointing in XX * the right direction! XX */ XX if (e_phasers(sp, (struct ship *) NULL)) XX return 1; XX return 1; XX } XX } XX /* XX * we can't get a phaser shot off. XX * try and evade (although hopeless) XX */ XX if (bad != NULL) { XX e_evade(sp, tp->x, tp->y, I_TORPEDO); XX return 1; XX } XX return 0; XX} SHAR_EOF if test 8299 -ne "`wc -c enemycom.c`" then echo shar: error transmitting enemycom.c '(should have been 8299 characters)' fi echo shar: extracting firing.c '(5253 characters)' sed 's/^XX//' << \SHAR_EOF > firing.c XX/* XX * TREK73: firing.c XX * XX * Take care of firing phasers and torpedos for both enemy XX * and fed ships. XX * XX * phaser_firing, torpedo_firing, ship_detonate, torp_detonate XX * XX */ XX XX#include "defines.h" XX#include "structs.h" XX XXextern struct ship *shiplist[]; XXextern char shutup[]; XX XXphaser_firing(sp) XXstruct ship *sp; XX{ XX extern struct list head; XX extern struct list *tail; XX extern struct damage p_damage; XX register int i; XX register int j; XX int hit; XX struct ship *ep; XX struct torpedo *tp; XX int s; XX int x, y; XX struct ship *target; XX struct list *lp; XX int bear; XX struct ship *fed; XX XX XX fed = shiplist[0]; XX for (i=0; i<4; i++) { XX if (sp->phasers[i].status & P_FIRING) XX break; XX } XX if (i == 4) XX return 0; XX sp->phasers[i].status &= ~P_FIRING; XX target = sp->phasers[i].target; XX /* XX * Put in j the exact bearing of the phasers relative to XX * the ship XX */ XX if (target == NULL) { XX bear = sp->phasers[i].bearing + sp->course; XX j = sp->phasers[i].bearing; XX } else { XX bear = bearing(sp->x, target->x, sp->y, target->y); XX j = bear - sp->course; XX } XX j = rectify(j); XX if (j > 125 && j < 235 && !(sp->status & S_ENG)) XX return 0; XX if (target != NULL && (target->status & S_DEAD)) { XX if ((sp = fed) && (!shutup[PHASERS+j])&& !(sp->status & S_DEAD)) XX printf("%s phaser %d disengaging\n", sp->name, i+1); XX sp->phasers[i].target = NULL; XX shutup[PHASERS+j]++; XX return 0; XX } XX if (target != NULL) XX sp->phasers[i].bearing = j; XX printf(" <%s frng phasers>\n", sp->name); XX for (lp = &head; lp != tail; lp = lp->fwd) { XX if (lp->type == 0) XX continue; XX ep = NULL; XX tp = NULL; XX if (lp->type == I_SHIP) { XX ep = lp->data.sp; XX if (ep == sp) XX continue; XX x = ep->x; XX y = ep->y; XX } else { XX tp = lp->data.tp; XX x = tp->x; XX y = tp->y; XX } XX hit = phaser_hit(sp, x, y, &sp->phasers[i], bear); XX if (hit == 0) XX continue; XX if (tp) { XX if (tp->timedelay > 2) { XX switch (lp->type) { XX default: XX case I_SHIP: XX printf("oops...\n"); XX break; XX case I_TORPEDO: XX printf("hit on torpedo %d\n", XX tp->id); XX break; XX case I_ENG: XX printf("%s's engineering hit.\n", XX tp->from->name); XX break; XX case I_PROBE: XX printf("hit on probe %d\n", XX tp->id); XX break; XX } XX tp->timedelay = 2; XX } XX tp->fuel -= hit/2; XX if (tp->fuel < 0) XX tp->fuel = 0; XX continue; XX } XX /* XX * Determine which shield was hit XX */ XX j = rectify(bearing(x, sp->x, y, sp->y) - ep->course); XX if (j > 315 || j < 45) XX s = 1; XX else if (j < 135) XX s = 2; XX else if (j < 225) XX s = 3; XX else XX s = 4; XX damage(hit, ep, s, &p_damage); XX } XX /* XX * Reduce the load by the firing percentage XX */ XX sp->phasers[i].load = sp->phasers[i].load XX - sp->phasers[i].load * sp->p_percent / 100; XX return 0; XX} XX XXtorpedo_firing(sp) XXstruct ship *sp; XX{ XX extern struct damage a_damage; XX extern struct list *newitem(); XX register int i; XX register int j; XX register int th; XX struct torpedo *tp; XX struct ship *target; XX struct list *lp; XX int bear; XX struct ship *fed; XX XX XX fed = shiplist[0]; XX for (i=0; i<6; i++) { XX if (sp->tubes[i].status & T_FIRING) XX break; XX } XX if (i == 6) XX return 0; XX sp->tubes[i].status &= ~T_FIRING; XX th = sp->tubes[i].load; XX if (th == 0) XX return 0; XX target = sp->tubes[i].target; XX /* XX * Put in j the relative bearing of the tube XX */ XX if (target == NULL) { XX bear = sp->tubes[i].bearing + sp->course; XX j = sp->tubes[i].bearing; XX } else { XX bear = bearing(sp->x, target->x, sp->y, target->y); XX j = bear - sp->course; XX } XX j = rectify(j); XX if (j > 125 && j < 235 && !(sp->status & S_ENG)) XX return 0; XX if (target != NULL && (target->status & S_DEAD)) { XX if ((sp = fed) && (!shutup[TUBES+j])&&!(sp->status & S_DEAD)) XX printf(" tube %d disengaging\n", i+1); XX sp->tubes[i].target = NULL; XX shutup[TUBES+j]++; XX return 0; XX } XX if (target != NULL) XX sp->tubes[i].bearing = j; XX sp->tubes[i].load = 0; XX lp = newitem(I_TORPEDO); XX lp->type = I_TORPEDO; XX lp->data.tp = MKNODE(struct torpedo, *, 1); XX tp = lp->data.tp; XX tp->from = sp; XX tp->x = sp->x; XX tp->y = sp->y; XX tp->target = NULL; XX tp->course = rectify(bear); XX tp->fuel = th; XX tp->speed = sp->t_lspeed + sp->warp; XX tp->newspeed = tp->speed; XX tp->timedelay = sp->t_delay * 10; XX tp->prox = sp->t_prox; XX tp->id = new_slot(); XX printf(" <<%s frng torpedo %d>>\n", sp->name, tp->id); XX return 1; XX} XX XXint ship_detonate(sp, lp) XXstruct ship *sp; XXstruct list *lp; XX{ XX register int fuel; XX register int i; XX XX fuel = 0; XX printf("++%s++ destruct.\n", sp->name); XX for (i=0; i<4; i++) XX if (sp->phasers[i].status & ~P_DAMAGED) XX fuel += min(sp->phasers[i].load, 10); XX for (i=0; i<6; i++) XX if (sp->tubes[i].status & ~T_DAMAGED) XX fuel += min(sp->tubes[i].load, 10); XX fuel += sp->pods; XX antimatter_hit((char *) sp, sp->x, sp->y, fuel); XX lp->type = 0; XX sp->status |= S_DEAD; XX} XX XX XXint torp_detonate(tp, lp) XXstruct torpedo *tp; XXstruct list *lp; XX{ XX XX switch (lp->type) { XX case I_SHIP: XX printf("we aren't supposed to be here \n"); XX break; XX case I_TORPEDO: XX printf(":: torp %d ::\n", tp->id); XX break; XX case I_PROBE: XX printf("** probe %d **\n", tp->id); XX break; XX case I_ENG: XX printf("## %s engineering ##\n", tp->from->name); XX break; XX default: XX printf("what the heck is this\n"); XX break; XX } XX antimatter_hit((char *) tp, tp->x, tp->y, tp->fuel); XX return_slot(tp->id); XX delitem(lp); XX} SHAR_EOF if test 5253 -ne "`wc -c firing.c`" then echo shar: error transmitting firing.c '(should have been 5253 characters)' fi echo shar: extracting globals.c '(6478 characters)' sed 's/^XX//' << \SHAR_EOF > globals.c XX/* XX * XX * TREK73: globals.c XX * XX * Global variable declarations XX * XX */ XX#include "defines.h" XX#include "structs.h" XX XXextern int fire_phasers(), fire_tubes(), lock_phasers(), lock_tubes(), XX turn_phasers(), turn_tubes(), load_tubes(), phaser_status(), XX tube_status(), launch_probe(), probe_control(), pos_report(), XX pos_display(), pursue(), elude(), helm(), self_scan(), scan(), XX alter_power(), jettison_engineering(), detonate_engineering(), XX alterpntparams(), play_dead(), corbomite_bluff(), surrender_ship(), XX request_surrender(), self_destruct(), abort_self_destruct(), XX survivors(), help(); XX XXextern int XX standard_strategy(); XX XX XXchar *statmsg[] = { XX "computer inoperable", XX "sensors annihilated", XX "probe launcher shot off", XX "warp drive disabled", XX "engineering jettisoned", XX} ; XX XXstruct damage p_damage = { XX 50, 2, 20, 3, 10, 3, XX 1000, "Computer destroyed.", XX 500, "Sensors demolished.", XX 100, "Probe launcher crushed.", XX 50, "Warp drive destroyed.", XX} ; XX XXstruct damage a_damage = { XX 100, 3, 10, 2, 7, 6, XX 1500, "Computer banks pierced.", XX 750, "Sensors smashed.", XX 150, "Probe launcher shot off.", XX 75, "Warp drive disabled.", XX} ; XX XX XXchar *baddies[MAXFOERACES][MAXBADS] = { XX /* Klingons*/ XX "Annihilation", "Crusher", "Devastator", "Merciless", "Nemesis", XX "Pitiliess", "Ruthless", "Savage", "Vengeance", XX /* Romulan */ XX "Avenger", "Defiance", "Fearless", "Harrower", "Intrepid", XX "Relentless", "Seeker", "Torch", "Vigilant", XX /* Kzinti */ XX "Black Hole", "Comet", "Ecliptic", "Galaxy", "Meteor", XX "Nova", "Pulsar", "Quasar", "Satellite", XX /* Gorn */ XX "Chimericon", "Dragonicon", "Ornithocon", "Predatoricon", "Reptilicon", XX "Serpenticon", "Tyranicon", "Vipericon", "Wyvericon", XX /* Orion */ XX "Arrogant", "Boisterous", "Daring", "Flamboyant", "Heavensent", XX "Jolly Tar", "Magnificent", "Resplendent", "Stupendous", XX /* Hydran */ XX "Baron", "Chancellor", "Dictator", "Emperor", "Lord", XX "Monarch", "President", "Shogun", "Viscount", XX /* Lyran */ XX "Bandit", "Claw", "Dangerous", "Fury", "Mysterious", XX "Sleek", "Tiger", "Vicious", "Wildcat", XX /* Tholian */ XX "Bismark", "Centaur", "Draddock", "Forbin", "Kreiger", XX "Shlurg", "Trakka", "Varnor", "Warrior", XX /* Monty Python */ XX "Blancmange", "Spam", "R.J. Gumby", "Lumberjack", "Dennis Moore", XX "Ministry of Silly Walks", "Argument Clinic", "Piranha Brothers", XX "Upper Class Twit of the Year", XX} ; XX XXchar *feds[] = { XX "Constitution", "Enterprise", "Hornet", "Lexington", "Potempkin", XX "Hood", "Kongo", "Republic", "Yorktown", XX} ; XX XXchar *foeraces[] = { XX "Klingon", "Romulan", "Kzinti", "Gorn", "Orion", "Hydran", XX "Lyran", "Tholian", "Monty Python", XX} ; XX XXchar *foeempire[] = { XX "Empire", "Star Empire", "Hegemony", "Confederation", "Pirates", XX "Monarchy", "Something", "Holdfast", "Flying Circus", XX}; XX XXchar *foeshiptype[] = { XX "D-7 Battle Cruiser", "Sparrowhawk", "Strike Cruiser", XX "Heavy Cruiser", "Raider Cruiser", "Ranger-class Cruiser", XX "Tiger-class Cruiser", "Patrol Cruiser", "Thingee", XX}; XX XXchar *foecaps[] = { XX "Bolak", "Kang", "Koloth", "Kor", "Korax", "Krulix", "Quarlo", XX "Tal", "Troblak" XX}; XX XXint init_p_turn[] = { XX -90, 0, 0, 90 XX}; XX XXint init_t_turn[] = { XX -120, -60, 0, 0, 60, 120 XX}; XX XX/* XX * for the linked list of items in space XX */ XXstruct list head; XXstruct list *tail; XX XX/* XX * Global definitions XX */ XXfloat segment = 0.2; /* Segment time */ XXfloat timeperturn = 2.0; /* Seconds per turn */ XX XXstruct ship *shiplist[10]; /* All the ships in the battle */ XX XXchar captain[30]; /* captain's name */ XXchar science[30]; /* science officer's name */ XXchar engineer[30]; /* engineer's name */ XXchar com[30]; /* communications officer's name */ XXchar nav[30]; /* navigation officer's name */ XXchar helmsman[30]; /* helmsman's name */ XXchar title[9]; /* captain's title */ XXchar foerace[11]; /* enemy's race */ XXchar foename[9]; /* enemy's captain's name */ XXchar foestype[30]; /* enemy's ship type */ XXchar empire[30]; /* What the enemy's empire is called */ XXint shipnum; /* number of ships this time out */ XXint terse = 0; /* print out initial description? */ XXint silly = 0; /* Use the Monty Python's Flying Curcus? */ XXint defenseless = 0; /* defensless ruse status */ XXint corbomite = 0; /* corbomite bluff status */ XXint surrender = 0; /* surrender offered by federation? */ XXint surrenderp = 0; /* Did we request that the enemy surrenders? */ XXchar shutup[HIGHSHUTUP]; /* Turn off messages after first printing */ XXchar slots[300]; /* Id slots */ XXint global = NORMAL; /* Situation status */ XXchar **argp = NULL; /* Argument list for parsit() routine */ XXchar options[100]; /* Environment variable */ XXchar sex[20]; /* From environment */ XXchar shipbuf[10]; /* From environment */ XXchar shipname[20]; /* From environment */ XXchar racename[20]; /* From environment */ XXint reengaged = 0; /* Re-engaging far-off ships? */ XX XXstruct cmd cmds[] = { XX { fire_phasers, "1", "Fire phasers", 1 }, XX { fire_tubes, "2", "Fire photon torpedoes", 1 }, XX { lock_phasers, "3", "Lock phasers onto target", 1 }, XX { lock_tubes, "4", "Lock tubes onto target", 1 }, XX { turn_phasers, "5", "Manually rotate phasers", 1 }, XX { turn_tubes, "6", "Manually rotate tubes", 1 }, XX { phaser_status, "7", "Phaser status", 1 }, XX { tube_status, "8", "Tube status", 1 }, XX { load_tubes, "9", "Load/unload torpedo tubes", 1 }, XX { launch_probe, "10", "Launch antimatter probe", 1 }, XX { probe_control, "11", "Probe control", 1 }, XX { pos_report, "12", "Position report", 0 }, XX { pos_display, "13", "Position display", 0 }, XX { pursue, "14", "Pursue an enemy vessel", 1 }, XX { elude, "15", "Elude an enemy vessel", 1 }, XX { helm, "16", "Manually change course and speed", 1 }, XX { self_scan, "17", "Damage report", 1 }, XX { scan, "18", "Scan enemy (enemy Damage report)", 1 }, XX { alter_power, "19", "Alter power distribution", 1 }, XX { jettison_engineering, "20", "Jettison engineering", 1 }, XX { detonate_engineering, "21", "Detonate engineering", 1 }, XX { alterpntparams, "22", "Alter firing parameters", 1}, XX { play_dead, "23", "Attempt defenseless ruse", 1 }, XX { corbomite_bluff, "24", "Attempt corbomite bluff(s)", 1 }, XX { surrender_ship, "25", "Surrender", 1 }, XX { request_surrender, "26", "Ask enemy to surrender", 1 }, XX { self_destruct, "27", "Initiate self-destruct sequence", 1 }, XX { abort_self_destruct, "28", "Abort self-destruct", 1 }, XX { survivors, "29", "Survivors report", 0 }, XX { help, "30", "Reprints above list", 0 }, XX { NULL, NULL, NULL, 1 }, XX} ; XX XX/* Strategy table */ XXint (*strategies[])() = { XX standard_strategy XX}; SHAR_EOF if test 6478 -ne "`wc -c globals.c`" then echo shar: error transmitting globals.c '(should have been 6478 characters)' fi # End of shell archive exit 0