home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / games / trek / dock.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-08  |  4.1 KB  |  145 lines

  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[] = "@(#)dock.c    5.4 (Berkeley) 6/1/90";
  36. #endif /* not lint */
  37.  
  38. # include    "trek.h"
  39.  
  40. /*
  41. **  DOCK TO STARBASE
  42. **
  43. **    The starship is docked to a starbase.  For this to work you
  44. **    must be adjacent to a starbase.
  45. **
  46. **    You get your supplies replenished and your captives are
  47. **    disembarked.  Note that your score is updated now, not when
  48. **    you actually take the captives.
  49. **
  50. **    Any repairs that need to be done are rescheduled to take
  51. **    place sooner.  This provides for the faster repairs when you
  52. **    are docked.
  53. */
  54.  
  55. dock()
  56. {
  57.     register int        i, j;
  58.     int            ok;
  59.     register struct event    *e;
  60.  
  61.     if (Ship.cond == DOCKED)
  62.         return (printf("Chekov: But captain, we are already docked\n"));
  63.     /* check for ok to dock, i.e., adjacent to a starbase */
  64.     ok = 0;
  65.     for (i = Ship.sectx - 1; i <= Ship.sectx + 1 && !ok; i++)
  66.     {
  67.         if (i < 0 || i >= NSECTS)
  68.             continue;
  69.         for (j = Ship.secty - 1; j <= Ship.secty + 1; j++)
  70.         {
  71.             if (j  < 0 || j >= NSECTS)
  72.                 continue;
  73.             if (Sect[i][j] == BASE)
  74.             {
  75.                 ok++;
  76.                 break;
  77.             }
  78.         }
  79.     }
  80.     if (!ok)
  81.         return (printf("Chekov: But captain, we are not adjacent to a starbase.\n"));
  82.  
  83.     /* restore resources */
  84.     Ship.energy = Param.energy;
  85.     Ship.torped = Param.torped;
  86.     Ship.shield = Param.shield;
  87.     Ship.crew = Param.crew;
  88.     Game.captives += Param.brigfree - Ship.brigfree;
  89.     Ship.brigfree = Param.brigfree;
  90.  
  91.     /* reset ship's defenses */
  92.     Ship.shldup = 0;
  93.     Ship.cloaked = 0;
  94.     Ship.cond = DOCKED;
  95.     Ship.reserves = Param.reserves;
  96.  
  97.     /* recalibrate space inertial navigation system */
  98.     Ship.sinsbad = 0;
  99.  
  100.     /* output any saved radio messages */
  101.     dumpssradio();
  102.  
  103.     /* reschedule any device repairs */
  104.     for (i = 0; i < MAXEVENTS; i++)
  105.     {
  106.         e = &Event[i];
  107.         if (e->evcode != E_FIXDV)
  108.             continue;
  109.         reschedule(e, (e->date - Now.date) * Param.dockfac);
  110.     }
  111.     return;
  112. }
  113.  
  114.  
  115. /*
  116. **  LEAVE A STARBASE
  117. **
  118. **    This is the inverse of dock().  The main function it performs
  119. **    is to reschedule any damages so that they will take longer.
  120. */
  121.  
  122. undock()
  123. {
  124.     register struct event    *e;
  125.     register int        i;
  126.  
  127.     if (Ship.cond != DOCKED)
  128.     {
  129.         printf("Sulu: Pardon me captain, but we are not docked.\n");
  130.         return;
  131.     }
  132.     Ship.cond = GREEN;
  133.     Move.free = 0;
  134.  
  135.     /* reschedule device repair times (again) */
  136.     for (i = 0; i < MAXEVENTS; i++)
  137.     {
  138.         e = &Event[i];
  139.         if (e->evcode != E_FIXDV)
  140.             continue;
  141.         reschedule(e, (e->date - Now.date) / Param.dockfac);
  142.     }
  143.     return;
  144. }
  145.