|
|
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[] = "@(#)shield.c 5.5 (Berkeley) 6/1/90"; ! 22: #endif /* not lint */ ! 23: ! 24: # include "trek.h" ! 25: # include "getpar.h" ! 26: ! 27: /* ! 28: ** SHIELD AND CLOAKING DEVICE CONTROL ! 29: ** ! 30: ** 'f' is one for auto shield up (in case of Condition RED), ! 31: ** zero for shield control, and negative one for cloaking ! 32: ** device control. ! 33: ** ! 34: ** Called with an 'up' or 'down' on the same line, it puts ! 35: ** the shields/cloak into the specified mode. Otherwise it ! 36: ** reports to the user the current mode, and asks if she wishes ! 37: ** to change. ! 38: ** ! 39: ** This is not a free move. Hits that occur as a result of ! 40: ** this move appear as though the shields are half up/down, ! 41: ** so you get partial hits. ! 42: */ ! 43: ! 44: struct cvntab Udtab[] = ! 45: { ! 46: "u", "p", (int (*)())1, 0, ! 47: "d", "own", 0, 0, ! 48: 0 ! 49: }; ! 50: ! 51: shield(f) ! 52: int f; ! 53: { ! 54: register int i; ! 55: char c; ! 56: struct cvntab *r; ! 57: char s[100]; ! 58: char *device, *dev2, *dev3; ! 59: int ind; ! 60: char *stat; ! 61: ! 62: if (f > 0 && (Ship.shldup || damaged(SRSCAN))) ! 63: return; ! 64: if (f < 0) ! 65: { ! 66: /* cloaking device */ ! 67: if (Ship.ship == QUEENE) ! 68: return (printf("Ye Faire Queene does not have the cloaking device.\n")); ! 69: device = "Cloaking device"; ! 70: dev2 = "is"; ! 71: ind = CLOAK; ! 72: dev3 = "it"; ! 73: stat = &Ship.cloaked; ! 74: } ! 75: else ! 76: { ! 77: /* shields */ ! 78: device = "Shields"; ! 79: dev2 = "are"; ! 80: dev3 = "them"; ! 81: ind = SHIELD; ! 82: stat = &Ship.shldup; ! 83: } ! 84: if (damaged(ind)) ! 85: { ! 86: if (f <= 0) ! 87: out(ind); ! 88: return; ! 89: } ! 90: if (Ship.cond == DOCKED) ! 91: { ! 92: printf("%s %s down while docked\n", device, dev2); ! 93: return; ! 94: } ! 95: if (f <= 0 && !testnl()) ! 96: { ! 97: r = getcodpar("Up or down", Udtab); ! 98: i = (int) r->value; ! 99: } ! 100: else ! 101: { ! 102: if (*stat) ! 103: (void)sprintf(s, "%s %s up. Do you want %s down", device, dev2, dev3); ! 104: else ! 105: (void)sprintf(s, "%s %s down. Do you want %s up", device, dev2, dev3); ! 106: if (!getynpar(s)) ! 107: return; ! 108: i = !*stat; ! 109: } ! 110: if (*stat == i) ! 111: { ! 112: printf("%s already ", device); ! 113: if (i) ! 114: printf("up\n"); ! 115: else ! 116: printf("down\n"); ! 117: return; ! 118: } ! 119: if (i) ! 120: if (f >= 0) ! 121: Ship.energy -= Param.shupengy; ! 122: else ! 123: Ship.cloakgood = 0; ! 124: Move.free = 0; ! 125: if (f >= 0) ! 126: Move.shldchg = 1; ! 127: *stat = i; ! 128: return; ! 129: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.