1 #ifndef lint 2 static char sccsid[] = "@(#)capture.c 4.2 (Berkeley) 05/09/83"; 3 #endif not lint 4 5 # include "trek.h" 6 7 /* 8 ** Ask a Klingon To Surrender 9 ** 10 ** (Fat chance) 11 ** 12 ** The Subspace Radio is needed to ask a Klingon if he will kindly 13 ** surrender. A random Klingon from the ones in the quadrant is 14 ** chosen. 15 ** 16 ** The Klingon is requested to surrender. The probability of this 17 ** is a function of that Klingon's remaining power, our power, 18 ** etc. 19 */ 20 21 capture() 22 { 23 register int i; 24 register struct kling *k; 25 float x; 26 extern struct kling *selectklingon(); 27 28 /* check for not cloaked */ 29 if (Ship.cloaked) 30 { 31 printf("Ship-ship communications out when cloaked\n"); 32 return; 33 } 34 if (damaged(SSRADIO)) 35 return (out(SSRADIO)); 36 /* find out if there are any at all */ 37 if (Etc.nkling <= 0) 38 { 39 printf("Uhura: Getting no response, sir\n"); 40 return; 41 } 42 43 /* if there is more than one Klingon, find out which one */ 44 k = selectklingon(); 45 Move.free = 0; 46 Move.time = 0.05; 47 48 /* check out that Klingon */ 49 k->srndreq++; 50 x = Param.klingpwr; 51 x *= Ship.energy; 52 x /= k->power * Etc.nkling; 53 x *= Param.srndrprob; 54 i = x; 55 # ifdef xTRACE 56 if (Trace) 57 printf("Prob = %d (%.4f)\n", i, x); 58 # endif 59 if (i > ranf(100)) 60 { 61 /* guess what, he surrendered!!! */ 62 printf("Klingon at %d,%d surrenders\n", k->x, k->y); 63 i = ranf(Param.klingcrew); 64 printf("%d klingons commit suicide rather than be taken captive\n", 65 Param.klingcrew - i); 66 if (i > Ship.brigfree) 67 i = Ship.brigfree; 68 Ship.brigfree -= i; 69 printf("%d captives taken\n", i); 70 killk(k->x, k->y); 71 return; 72 } 73 74 /* big surprise, he refuses to surrender */ 75 printf("Fat chance, captain\n"); 76 return; 77 } 78 79 80 /* 81 ** SELECT A KLINGON 82 ** 83 ** Cruddy, just takes one at random. Should ask the captain. 84 */ 85 86 struct kling *selectklingon() 87 { 88 register int i; 89 90 if (Etc.nkling < 2) 91 i = 0; 92 else 93 i = ranf(Etc.nkling); 94 return (&Etc.klingon[i]); 95 } 96