|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted provided ! 6: * that: (1) source distributions retain this entire copyright notice and ! 7: * comment, and (2) distributions including binaries display the following ! 8: * acknowledgement: ``This product includes software developed by the ! 9: * University of California, Berkeley and its contributors'' in the ! 10: * documentation or other materials provided with the distribution and in ! 11: * all advertising materials mentioning features or use of this software. ! 12: * Neither the name of the University nor the names of its contributors may ! 13: * be used to endorse or promote products derived from this software without ! 14: * specific prior written permission. ! 15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED ! 16: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF ! 17: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 18: */ ! 19: ! 20: #ifndef lint ! 21: static char sccsid[] = "@(#)nova.c 5.4 (Berkeley) 6/1/90"; ! 22: #endif /* not lint */ ! 23: ! 24: # include "trek.h" ! 25: ! 26: /* ! 27: ** CAUSE A NOVA TO OCCUR ! 28: ** ! 29: ** A nova occurs. It is the result of having a star hit with ! 30: ** a photon torpedo. There are several things which may happen. ! 31: ** The star may not be affected. It may go nova. It may turn ! 32: ** into a black hole. Any (yummy) it may go supernova. ! 33: ** ! 34: ** Stars that go nova cause stars which surround them to undergo ! 35: ** the same probabilistic process. Klingons next to them are ! 36: ** destroyed. And if the starship is next to it, it gets zapped. ! 37: ** If the zap is too much, it gets destroyed. ! 38: */ ! 39: ! 40: nova(x, y) ! 41: int x, y; ! 42: { ! 43: register int i, j; ! 44: register int se; ! 45: ! 46: if (Sect[x][y] != STAR || Quad[Ship.quadx][Ship.quady].stars < 0) ! 47: return; ! 48: if (ranf(100) < 15) ! 49: { ! 50: printf("Spock: Star at %d,%d failed to nova.\n", x, y); ! 51: return; ! 52: } ! 53: if (ranf(100) < 5) ! 54: return (snova(x, y)); ! 55: printf("Spock: Star at %d,%d gone nova\n", x, y); ! 56: ! 57: if (ranf(4) != 0) ! 58: Sect[x][y] = EMPTY; ! 59: else ! 60: { ! 61: Sect[x][y] = HOLE; ! 62: Quad[Ship.quadx][Ship.quady].holes += 1; ! 63: } ! 64: Quad[Ship.quadx][Ship.quady].stars -= 1; ! 65: Game.kills += 1; ! 66: for (i = x - 1; i <= x + 1; i++) ! 67: { ! 68: if (i < 0 || i >= NSECTS) ! 69: continue; ! 70: for (j = y - 1; j <= y + 1; j++) ! 71: { ! 72: if (j < 0 || j >= NSECTS) ! 73: continue; ! 74: se = Sect[i][j]; ! 75: switch (se) ! 76: { ! 77: ! 78: case EMPTY: ! 79: case HOLE: ! 80: break; ! 81: ! 82: case KLINGON: ! 83: killk(i, j); ! 84: break; ! 85: ! 86: case STAR: ! 87: nova(i, j); ! 88: break; ! 89: ! 90: case INHABIT: ! 91: kills(i, j, -1); ! 92: break; ! 93: ! 94: case BASE: ! 95: killb(i, j); ! 96: Game.killb += 1; ! 97: break; ! 98: ! 99: case ENTERPRISE: ! 100: case QUEENE: ! 101: se = 2000; ! 102: if (Ship.shldup) ! 103: if (Ship.shield >= se) ! 104: { ! 105: Ship.shield -= se; ! 106: se = 0; ! 107: } ! 108: else ! 109: { ! 110: se -= Ship.shield; ! 111: Ship.shield = 0; ! 112: } ! 113: Ship.energy -= se; ! 114: if (Ship.energy <= 0) ! 115: lose(L_SUICID); ! 116: break; ! 117: ! 118: default: ! 119: printf("Unknown object %c at %d,%d destroyed\n", ! 120: se, i, j); ! 121: Sect[i][j] = EMPTY; ! 122: break; ! 123: } ! 124: } ! 125: } ! 126: return; ! 127: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.