1 /* 2 * Copyright (c) 1980 Regents of the University of California. 3 * All rights reserved. The Berkeley software License Agreement 4 * specifies the terms and conditions for redistribution. 5 */ 6 7 #ifndef lint 8 static char sccsid[] = "@(#)initquad.c 5.1 (Berkeley) 05/30/85"; 9 #endif not lint 10 11 # include "trek.h" 12 13 /* 14 ** Paramize Quadrant Upon Entering 15 ** 16 ** A quadrant is initialized from the information held in the 17 ** Quad matrix. Basically, everything is just initialized 18 ** randomly, except for the starship, which goes into a fixed 19 ** sector. 20 ** 21 ** If there are Klingons in the quadrant, the captain is informed 22 ** that the condition is RED, and he is given a chance to put 23 ** his shields up if the computer is working. 24 ** 25 ** The flag `f' is set to disable the check for condition red. 26 ** This mode is used in situations where you know you are going 27 ** to be docked, i.e., abandon() and help(). 28 */ 29 30 initquad(f) 31 int f; 32 { 33 register int i, j; 34 int rx, ry; 35 int nbases, nstars; 36 register struct quad *q; 37 int nholes; 38 39 q = &Quad[Ship.quadx][Ship.quady]; 40 41 /* ignored supernova'ed quadrants (this is checked again later anyway */ 42 if (q->stars < 0) 43 return; 44 Etc.nkling = q->klings; 45 nbases = q->bases; 46 nstars = q->stars; 47 nholes = q->holes; 48 49 /* have we blundered into a battle zone w/ shields down? */ 50 if (Etc.nkling > 0 && !f) 51 { 52 printf("Condition RED\n"); 53 Ship.cond = RED; 54 if (!damaged(COMPUTER)) 55 shield(1); 56 } 57 58 /* clear out the quadrant */ 59 for (i = 0; i < NSECTS; i++) 60 for (j = 0; j < NSECTS; j++) 61 Sect[i][j] = EMPTY; 62 63 /* initialize Enterprise */ 64 Sect[Ship.sectx][Ship.secty] = Ship.ship; 65 66 /* initialize Klingons */ 67 for (i = 0; i < Etc.nkling; i++) 68 { 69 sector(&rx, &ry); 70 Sect[rx][ry] = KLINGON; 71 Etc.klingon[i].x = rx; 72 Etc.klingon[i].y = ry; 73 Etc.klingon[i].power = Param.klingpwr; 74 Etc.klingon[i].srndreq = 0; 75 } 76 compkldist(1); 77 78 /* initialize star base */ 79 if (nbases > 0) 80 { 81 sector(&rx, &ry); 82 Sect[rx][ry] = BASE; 83 Etc.starbase.x = rx; 84 Etc.starbase.y = ry; 85 } 86 87 /* initialize inhabited starsystem */ 88 if (q->qsystemname != 0) 89 { 90 sector(&rx, &ry); 91 Sect[rx][ry] = INHABIT; 92 nstars -= 1; 93 } 94 95 /* initialize black holes */ 96 for (i = 0; i < nholes; i++) 97 { 98 sector(&rx, &ry); 99 Sect[rx][ry] = HOLE; 100 } 101 102 /* initialize stars */ 103 for (i = 0; i < nstars; i++) 104 { 105 sector(&rx, &ry); 106 Sect[rx][ry] = STAR; 107 } 108 Move.newquad = 1; 109 } 110 111 112 sector(x, y) 113 int *x, *y; 114 { 115 register int i, j; 116 117 do 118 { 119 i = ranf(NSECTS); 120 j = ranf(NSECTS); 121 } while (Sect[i][j] != EMPTY); 122 *x = i; 123 *y = j; 124 return; 125 } 126