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, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. All advertising materials mentioning features or use of this software 14 * must display the following acknowledgement: 15 * This product includes software developed by the University of 16 * California, Berkeley and its contributors. 17 * 4. Neither the name of the University nor the names of its contributors 18 * may be used to endorse or promote products derived from this software 19 * without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 */ 33 34 #ifndef lint 35 /*static char sccsid[] = "from: @(#)dock.c 5.4 (Berkeley) 6/1/90";*/ 36 static char rcsid[] = "$Id: dock.c,v 1.2 1993/08/01 18:50:40 mycroft Exp $"; 37 #endif /* not lint */ 38 39 # include "trek.h" 40 41 /* 42 ** DOCK TO STARBASE 43 ** 44 ** The starship is docked to a starbase. For this to work you 45 ** must be adjacent to a starbase. 46 ** 47 ** You get your supplies replenished and your captives are 48 ** disembarked. Note that your score is updated now, not when 49 ** you actually take the captives. 50 ** 51 ** Any repairs that need to be done are rescheduled to take 52 ** place sooner. This provides for the faster repairs when you 53 ** are docked. 54 */ 55 56 dock() 57 { 58 register int i, j; 59 int ok; 60 register struct event *e; 61 62 if (Ship.cond == DOCKED) 63 return (printf("Chekov: But captain, we are already docked\n")); 64 /* check for ok to dock, i.e., adjacent to a starbase */ 65 ok = 0; 66 for (i = Ship.sectx - 1; i <= Ship.sectx + 1 && !ok; i++) 67 { 68 if (i < 0 || i >= NSECTS) 69 continue; 70 for (j = Ship.secty - 1; j <= Ship.secty + 1; j++) 71 { 72 if (j < 0 || j >= NSECTS) 73 continue; 74 if (Sect[i][j] == BASE) 75 { 76 ok++; 77 break; 78 } 79 } 80 } 81 if (!ok) 82 return (printf("Chekov: But captain, we are not adjacent to a starbase.\n")); 83 84 /* restore resources */ 85 Ship.energy = Param.energy; 86 Ship.torped = Param.torped; 87 Ship.shield = Param.shield; 88 Ship.crew = Param.crew; 89 Game.captives += Param.brigfree - Ship.brigfree; 90 Ship.brigfree = Param.brigfree; 91 92 /* reset ship's defenses */ 93 Ship.shldup = 0; 94 Ship.cloaked = 0; 95 Ship.cond = DOCKED; 96 Ship.reserves = Param.reserves; 97 98 /* recalibrate space inertial navigation system */ 99 Ship.sinsbad = 0; 100 101 /* output any saved radio messages */ 102 dumpssradio(); 103 104 /* reschedule any device repairs */ 105 for (i = 0; i < MAXEVENTS; i++) 106 { 107 e = &Event[i]; 108 if (e->evcode != E_FIXDV) 109 continue; 110 reschedule(e, (e->date - Now.date) * Param.dockfac); 111 } 112 return; 113 } 114 115 116 /* 117 ** LEAVE A STARBASE 118 ** 119 ** This is the inverse of dock(). The main function it performs 120 ** is to reschedule any damages so that they will take longer. 121 */ 122 123 undock() 124 { 125 register struct event *e; 126 register int i; 127 128 if (Ship.cond != DOCKED) 129 { 130 printf("Sulu: Pardon me captain, but we are not docked.\n"); 131 return; 132 } 133 Ship.cond = GREEN; 134 Move.free = 0; 135 136 /* reschedule device repair times (again) */ 137 for (i = 0; i < MAXEVENTS; i++) 138 { 139 e = &Event[i]; 140 if (e->evcode != E_FIXDV) 141 continue; 142 reschedule(e, (e->date - Now.date) / Param.dockfac); 143 } 144 return; 145 } 146