|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)kill.c 4.2 (Berkeley) 5/27/83"; ! 3: #endif not lint ! 4: ! 5: # include "trek.h" ! 6: ! 7: /* ! 8: ** KILL KILL KILL !!! ! 9: ** ! 10: ** This file handles the killing off of almost anything. ! 11: */ ! 12: ! 13: /* ! 14: ** Handle a Klingon's death ! 15: ** ! 16: ** The Klingon at the sector given by the parameters is killed ! 17: ** and removed from the Klingon list. Notice that it is not ! 18: ** removed from the event list; this is done later, when the ! 19: ** the event is to be caught. Also, the time left is recomputed, ! 20: ** and the game is won if that was the last klingon. ! 21: */ ! 22: ! 23: killk(ix, iy) ! 24: int ix, iy; ! 25: { ! 26: register int i, j; ! 27: ! 28: printf(" *** Klingon at %d,%d destroyed ***\n", ix, iy); ! 29: ! 30: /* remove the scoundrel */ ! 31: Now.klings -= 1; ! 32: Sect[ix][iy] = EMPTY; ! 33: Quad[Ship.quadx][Ship.quady].klings -= 1; ! 34: /* %%% IS THIS SAFE???? %%% */ ! 35: Quad[Ship.quadx][Ship.quady].scanned -= 100; ! 36: Game.killk += 1; ! 37: ! 38: /* find the Klingon in the Klingon list */ ! 39: for (i = 0; i < Etc.nkling; i++) ! 40: if (ix == Etc.klingon[i].x && iy == Etc.klingon[i].y) ! 41: { ! 42: /* purge him from the list */ ! 43: Etc.nkling -= 1; ! 44: for (; i < Etc.nkling; i++) ! 45: bmove(&Etc.klingon[i+1], &Etc.klingon[i], sizeof Etc.klingon[i]); ! 46: break; ! 47: } ! 48: ! 49: /* find out if that was the last one */ ! 50: if (Now.klings <= 0) ! 51: win(); ! 52: ! 53: /* recompute time left */ ! 54: Now.time = Now.resource / Now.klings; ! 55: return; ! 56: } ! 57: ! 58: ! 59: /* ! 60: ** handle a starbase's death ! 61: */ ! 62: ! 63: killb(qx, qy) ! 64: int qx, qy; ! 65: { ! 66: register struct quad *q; ! 67: register struct xy *b; ! 68: ! 69: q = &Quad[qx][qy]; ! 70: ! 71: if (q->bases <= 0) ! 72: return; ! 73: if (!damaged(SSRADIO)) ! 74: /* then update starchart */ ! 75: if (q->scanned < 1000) ! 76: q->scanned -= 10; ! 77: else ! 78: if (q->scanned > 1000) ! 79: q->scanned = -1; ! 80: q->bases = 0; ! 81: Now.bases -= 1; ! 82: for (b = Now.base; ; b++) ! 83: if (qx == b->x && qy == b->y) ! 84: break; ! 85: bmove(&Now.base[Now.bases], b, sizeof *b); ! 86: if (qx == Ship.quadx && qy == Ship.quady) ! 87: { ! 88: Sect[Etc.starbase.x][Etc.starbase.y] = EMPTY; ! 89: if (Ship.cond == DOCKED) ! 90: undock(); ! 91: printf("Starbase at %d,%d destroyed\n", Etc.starbase.x, Etc.starbase.y); ! 92: } ! 93: else ! 94: { ! 95: if (!damaged(SSRADIO)) ! 96: { ! 97: printf("Uhura: Starfleet command reports that the starbase in\n"); ! 98: printf(" quadrant %d,%d has been destroyed\n", qx, qy); ! 99: } ! 100: else ! 101: schedule(E_KATSB | E_GHOST, 1e50, qx, qy, 0); ! 102: } ! 103: } ! 104: ! 105: ! 106: /** ! 107: ** kill an inhabited starsystem ! 108: **/ ! 109: ! 110: kills(x, y, f) ! 111: int x, y; /* quad coords if f == 0, else sector coords */ ! 112: int f; /* f != 0 -- this quad; f < 0 -- Enterprise's fault */ ! 113: { ! 114: register struct quad *q; ! 115: register struct event *e; ! 116: register char *name; ! 117: char *systemname(); ! 118: ! 119: if (f) ! 120: { ! 121: /* current quadrant */ ! 122: q = &Quad[Ship.quadx][Ship.quady]; ! 123: Sect[x][y] = EMPTY; ! 124: name = systemname(q); ! 125: if (name == 0) ! 126: return; ! 127: printf("Inhabited starsystem %s at %d,%d destroyed\n", ! 128: name, x, y); ! 129: if (f < 0) ! 130: Game.killinhab += 1; ! 131: } ! 132: else ! 133: { ! 134: /* different quadrant */ ! 135: q = &Quad[x][y]; ! 136: } ! 137: if (q->qsystemname & Q_DISTRESSED) ! 138: { ! 139: /* distressed starsystem */ ! 140: e = &Event[q->qsystemname & Q_SYSTEM]; ! 141: printf("Distress call for %s invalidated\n", ! 142: Systemname[e->systemname]); ! 143: unschedule(e); ! 144: } ! 145: q->qsystemname = 0; ! 146: q->stars -= 1; ! 147: } ! 148: ! 149: ! 150: /** ! 151: ** "kill" a distress call ! 152: **/ ! 153: ! 154: killd(x, y, f) ! 155: int x, y; /* quadrant coordinates */ ! 156: int f; /* set if user is to be informed */ ! 157: { ! 158: register struct event *e; ! 159: register int i; ! 160: register struct quad *q; ! 161: ! 162: q = &Quad[x][y]; ! 163: for (i = 0; i < MAXEVENTS; i++) ! 164: { ! 165: e = &Event[i]; ! 166: if (e->x != x || e->y != y) ! 167: continue; ! 168: switch (e->evcode) ! 169: { ! 170: case E_KDESB: ! 171: if (f) ! 172: { ! 173: printf("Distress call for starbase in %d,%d nullified\n", ! 174: x, y); ! 175: unschedule(e); ! 176: } ! 177: break; ! 178: ! 179: case E_ENSLV: ! 180: case E_REPRO: ! 181: if (f) ! 182: { ! 183: printf("Distress call for %s in quadrant %d,%d nullified\n", ! 184: Systemname[e->systemname], x, y); ! 185: q->qsystemname = e->systemname; ! 186: unschedule(e); ! 187: } ! 188: else ! 189: { ! 190: e->evcode |= E_GHOST; ! 191: } ! 192: } ! 193: } ! 194: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.