1: /*
   2:  * Copyright (c) 1980 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: static char sccsid[] = "@(#)abandon.c	5.1 (Berkeley) 5/30/85";
   9: #endif not lint
  10: 
  11: # include   "trek.h"
  12: 
  13: /*
  14: **  Abandon Ship
  15: **
  16: **	The ship is abandoned.  If your current ship is the Faire
  17: **	Queene, or if your shuttlecraft is dead, you're out of
  18: **	luck.  You need the shuttlecraft in order for the captain
  19: **	(that's you!!) to escape.
  20: **
  21: **	Your crew can beam to an inhabited starsystem in the
  22: **	quadrant, if there is one and if the transporter is working.
  23: **	If there is no inhabited starsystem, or if the transporter
  24: **	is out, they are left to die in outer space.
  25: **
  26: **	These currently just count as regular deaths, but they
  27: **	should count very heavily against you.
  28: **
  29: **	If there are no starbases left, you are captured by the
  30: **	Klingons, who torture you mercilessly.  However, if there
  31: **	is at least one starbase, you are returned to the
  32: **	Federation in a prisoner of war exchange.  Of course, this
  33: **	can't happen unless you have taken some prisoners.
  34: **
  35: **	Uses trace flag 40
  36: */
  37: 
  38: abandon()
  39: {
  40:     register struct quad    *q;
  41:     register int        i;
  42:     int         j;
  43:     register struct event   *e;
  44: 
  45:     if (Ship.ship == QUEENE)
  46:         return (printf("You may not abandon ye Faire Queene\n"));
  47:     if (Ship.cond != DOCKED)
  48:     {
  49:         if (damaged(SHUTTLE))
  50:             return (out(SHUTTLE));
  51:         printf("Officers escape in shuttlecraft\n");
  52:         /* decide on fate of crew */
  53:         q = &Quad[Ship.quadx][Ship.quady];
  54:         if (q->qsystemname == 0 || damaged(XPORTER))
  55:         {
  56:             printf("Entire crew of %d left to die in outer space\n",
  57:                 Ship.crew);
  58:             Game.deaths += Ship.crew;
  59:         }
  60:         else
  61:         {
  62:             printf("Crew beams down to planet %s\n", systemname(q));
  63:         }
  64:     }
  65:     /* see if you can be exchanged */
  66:     if (Now.bases == 0 || Game.captives < 20 * Game.skill)
  67:         lose(L_CAPTURED);
  68:     /* re-outfit new ship */
  69:     printf("You are hereby put in charge of an antiquated but still\n");
  70:     printf("  functional ship, the Fairie Queene.\n");
  71:     Ship.ship = QUEENE;
  72:     Ship.shipname = "Fairie Queene";
  73:     Param.energy = Ship.energy = 3000;
  74:     Param.torped = Ship.torped = 6;
  75:     Param.shield = Ship.shield = 1250;
  76:     Ship.shldup = 0;
  77:     Ship.cloaked = 0;
  78:     Ship.warp = 5.0;
  79:     Ship.warp2 = 25.0;
  80:     Ship.warp3 = 125.0;
  81:     Ship.cond = GREEN;
  82:     /* clear out damages on old ship */
  83:     for (i = 0; i < MAXEVENTS; i++)
  84:     {
  85:         e = &Event[i];
  86:         if (e->evcode != E_FIXDV)
  87:             continue;
  88:         unschedule(e);
  89:     }
  90:     /* get rid of some devices and redistribute probabilities */
  91:     i = Param.damprob[SHUTTLE] + Param.damprob[CLOAK];
  92:     Param.damprob[SHUTTLE] = Param.damprob[CLOAK] = 0;
  93:     while (i > 0)
  94:         for (j = 0; j < NDEV; j++)
  95:         {
  96:             if (Param.damprob[j] != 0)
  97:             {
  98:                 Param.damprob[j] += 1;
  99:                 i--;
 100:                 if (i <= 0)
 101:                     break;
 102:             }
 103:         }
 104:     /* pick a starbase to restart at */
 105:     i = ranf(Now.bases);
 106:     Ship.quadx = Now.base[i].x;
 107:     Ship.quady = Now.base[i].y;
 108:     /* setup that quadrant */
 109:     while (1)
 110:     {
 111:         initquad(1);
 112:         Sect[Ship.sectx][Ship.secty] = EMPTY;
 113:         for (i = 0; i < 5; i++)
 114:         {
 115:             Ship.sectx = Etc.starbase.x + ranf(3) - 1;
 116:             if (Ship.sectx < 0 || Ship.sectx >= NSECTS)
 117:                 continue;
 118:             Ship.secty = Etc.starbase.y + ranf(3) - 1;
 119:             if (Ship.secty < 0 || Ship.secty >= NSECTS)
 120:                 continue;
 121:             if (Sect[Ship.sectx][Ship.secty] == EMPTY)
 122:             {
 123:                 Sect[Ship.sectx][Ship.secty] = QUEENE;
 124:                 dock();
 125:                 compkldist(0);
 126:                 return;
 127:             }
 128:         }
 129:     }
 130: }

Defined functions

abandon defined in line 38; used 2 times

Defined variables

sccsid defined in line 8; never used
Last modified: 1985-05-30
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 660
Valid CSS Valid XHTML 1.0 Strict