111668Smckusick #ifndef lint 2*12344Slayer static char sccsid[] = "@(#)dock.c 4.2 (Berkeley) 05/09/83"; 311668Smckusick #endif not lint 411668Smckusick 511668Smckusick # include "trek.h" 611668Smckusick 711668Smckusick /* 811668Smckusick ** DOCK TO STARBASE 911668Smckusick ** 1011668Smckusick ** The starship is docked to a starbase. For this to work you 1111668Smckusick ** must be adjacent to a starbase. 1211668Smckusick ** 1311668Smckusick ** You get your supplies replenished and your captives are 1411668Smckusick ** disembarked. Note that your score is updated now, not when 1511668Smckusick ** you actually take the captives. 1611668Smckusick ** 1711668Smckusick ** Any repairs that need to be done are rescheduled to take 1811668Smckusick ** place sooner. This provides for the faster repairs when you 1911668Smckusick ** are docked. 2011668Smckusick */ 2111668Smckusick 2211668Smckusick dock() 2311668Smckusick { 2411668Smckusick register int i, j; 2511668Smckusick int ok; 2611668Smckusick register struct event *e; 2711668Smckusick 2811668Smckusick if (Ship.cond == DOCKED) 2911668Smckusick return (printf("Chekov: But captain, we are already docked\n")); 3011668Smckusick /* check for ok to dock, i.e., adjacent to a starbase */ 3111668Smckusick ok = 0; 3211668Smckusick for (i = Ship.sectx - 1; i <= Ship.sectx + 1 && !ok; i++) 3311668Smckusick { 3411668Smckusick if (i < 0 || i >= NSECTS) 3511668Smckusick continue; 3611668Smckusick for (j = Ship.secty - 1; j <= Ship.secty + 1; j++) 3711668Smckusick { 3811668Smckusick if (j < 0 || j >= NSECTS) 3911668Smckusick continue; 4011668Smckusick if (Sect[i][j] == BASE) 4111668Smckusick { 4211668Smckusick ok++; 4311668Smckusick break; 4411668Smckusick } 4511668Smckusick } 4611668Smckusick } 4711668Smckusick if (!ok) 4811668Smckusick return (printf("Chekov: But captain, we are not adjacent to a starbase.\n")); 4911668Smckusick 5011668Smckusick /* restore resources */ 5111668Smckusick Ship.energy = Param.energy; 5211668Smckusick Ship.torped = Param.torped; 5311668Smckusick Ship.shield = Param.shield; 5411668Smckusick Ship.crew = Param.crew; 55*12344Slayer Game.captives += Param.brigfree - Ship.brigfree; 5611668Smckusick Ship.brigfree = Param.brigfree; 5711668Smckusick 5811668Smckusick /* reset ship's defenses */ 5911668Smckusick Ship.shldup = 0; 6011668Smckusick Ship.cloaked = 0; 6111668Smckusick Ship.cond = DOCKED; 6211668Smckusick Ship.reserves = Param.reserves; 6311668Smckusick 6411668Smckusick /* recalibrate space inertial navigation system */ 6511668Smckusick Ship.sinsbad = 0; 6611668Smckusick 6711668Smckusick /* output any saved radio messages */ 6811668Smckusick dumpssradio(); 6911668Smckusick 7011668Smckusick /* reschedule any device repairs */ 7111668Smckusick for (i = 0; i < MAXEVENTS; i++) 7211668Smckusick { 7311668Smckusick e = &Event[i]; 7411668Smckusick if (e->evcode != E_FIXDV) 7511668Smckusick continue; 7611668Smckusick reschedule(e, (e->date - Now.date) * Param.dockfac); 7711668Smckusick } 7811668Smckusick return; 7911668Smckusick } 8011668Smckusick 8111668Smckusick 8211668Smckusick /* 8311668Smckusick ** LEAVE A STARBASE 8411668Smckusick ** 8511668Smckusick ** This is the inverse of dock(). The main function it performs 8611668Smckusick ** is to reschedule any damages so that they will take longer. 8711668Smckusick */ 8811668Smckusick 8911668Smckusick undock() 9011668Smckusick { 9111668Smckusick register struct event *e; 9211668Smckusick register int i; 9311668Smckusick 9411668Smckusick if (Ship.cond != DOCKED) 9511668Smckusick { 9611668Smckusick printf("Sulu: Pardon me captain, but we are not docked.\n"); 9711668Smckusick return; 9811668Smckusick } 9911668Smckusick Ship.cond = GREEN; 10011668Smckusick Move.free = 0; 10111668Smckusick 10211668Smckusick /* reschedule device repair times (again) */ 10311668Smckusick for (i = 0; i < MAXEVENTS; i++) 10411668Smckusick { 10511668Smckusick e = &Event[i]; 10611668Smckusick if (e->evcode != E_FIXDV) 10711668Smckusick continue; 10811668Smckusick reschedule(e, (e->date - Now.date) / Param.dockfac); 10911668Smckusick } 11011668Smckusick return; 11111668Smckusick } 112