Annotation of 43BSDReno/games/trek/kill.c, revision 1.1.1.1

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[] = "@(#)kill.c     5.4 (Berkeley) 6/1/90";
                     22: #endif /* not lint */
                     23: 
                     24: # include      "trek.h"
                     25: 
                     26: /*
                     27: **  KILL KILL KILL !!!
                     28: **
                     29: **     This file handles the killing off of almost anything.
                     30: */
                     31: 
                     32: /*
                     33: **  Handle a Klingon's death
                     34: **
                     35: **     The Klingon at the sector given by the parameters is killed
                     36: **     and removed from the Klingon list.  Notice that it is not
                     37: **     removed from the event list; this is done later, when the
                     38: **     the event is to be caught.  Also, the time left is recomputed,
                     39: **     and the game is won if that was the last klingon.
                     40: */
                     41: 
                     42: killk(ix, iy)
                     43: int    ix, iy;
                     44: {
                     45:        register int            i, j;
                     46: 
                     47:        printf("   *** Klingon at %d,%d destroyed ***\n", ix, iy);
                     48: 
                     49:        /* remove the scoundrel */
                     50:        Now.klings -= 1;
                     51:        Sect[ix][iy] = EMPTY;
                     52:        Quad[Ship.quadx][Ship.quady].klings -= 1;
                     53:        /* %%% IS THIS SAFE???? %%% */
                     54:        Quad[Ship.quadx][Ship.quady].scanned -= 100;
                     55:        Game.killk += 1;
                     56: 
                     57:        /* find the Klingon in the Klingon list */
                     58:        for (i = 0; i < Etc.nkling; i++)
                     59:                if (ix == Etc.klingon[i].x && iy == Etc.klingon[i].y)
                     60:                {
                     61:                        /* purge him from the list */
                     62:                        Etc.nkling -= 1;
                     63:                        for (; i < Etc.nkling; i++)
                     64:                                bmove(&Etc.klingon[i+1], &Etc.klingon[i], sizeof Etc.klingon[i]);
                     65:                        break;
                     66:                }
                     67: 
                     68:        /* find out if that was the last one */
                     69:        if (Now.klings <= 0)
                     70:                win();
                     71: 
                     72:        /* recompute time left */
                     73:        Now.time = Now.resource / Now.klings;
                     74:        return;
                     75: }
                     76: 
                     77: 
                     78: /*
                     79: **  handle a starbase's death
                     80: */
                     81: 
                     82: killb(qx, qy)
                     83: int    qx, qy;
                     84: {
                     85:        register struct quad    *q;
                     86:        register struct xy      *b;
                     87: 
                     88:        q = &Quad[qx][qy];
                     89: 
                     90:        if (q->bases <= 0)
                     91:                return;
                     92:        if (!damaged(SSRADIO))
                     93:                /* then update starchart */
                     94:                if (q->scanned < 1000)
                     95:                        q->scanned -= 10;
                     96:                else
                     97:                        if (q->scanned > 1000)
                     98:                                q->scanned = -1;
                     99:        q->bases = 0;
                    100:        Now.bases -= 1;
                    101:        for (b = Now.base; ; b++)
                    102:                if (qx == b->x && qy == b->y)
                    103:                        break;
                    104:        bmove(&Now.base[Now.bases], b, sizeof *b);
                    105:        if (qx == Ship.quadx && qy == Ship.quady)
                    106:        {
                    107:                Sect[Etc.starbase.x][Etc.starbase.y] = EMPTY;
                    108:                if (Ship.cond == DOCKED)
                    109:                        undock();
                    110:                printf("Starbase at %d,%d destroyed\n", Etc.starbase.x, Etc.starbase.y);
                    111:        }
                    112:        else
                    113:        {
                    114:                if (!damaged(SSRADIO))
                    115:                {
                    116:                        printf("Uhura: Starfleet command reports that the starbase in\n");
                    117:                        printf("   quadrant %d,%d has been destroyed\n", qx, qy);
                    118:                }
                    119:                else
                    120:                        schedule(E_KATSB | E_GHOST, 1e50, qx, qy, 0);
                    121:        }
                    122: }
                    123: 
                    124: 
                    125: /**
                    126:  **    kill an inhabited starsystem
                    127:  **/
                    128: 
                    129: kills(x, y, f)
                    130: int    x, y;   /* quad coords if f == 0, else sector coords */
                    131: int    f;      /* f != 0 -- this quad;  f < 0 -- Enterprise's fault */
                    132: {
                    133:        register struct quad    *q;
                    134:        register struct event   *e;
                    135:        register char           *name;
                    136:        char                    *systemname();
                    137: 
                    138:        if (f)
                    139:        {
                    140:                /* current quadrant */
                    141:                q = &Quad[Ship.quadx][Ship.quady];
                    142:                Sect[x][y] = EMPTY;
                    143:                name = systemname(q);
                    144:                if (name == 0)
                    145:                        return;
                    146:                printf("Inhabited starsystem %s at %d,%d destroyed\n",
                    147:                        name, x, y);
                    148:                if (f < 0)
                    149:                        Game.killinhab += 1;
                    150:        }
                    151:        else
                    152:        {
                    153:                /* different quadrant */
                    154:                q = &Quad[x][y];
                    155:        }
                    156:        if (q->qsystemname & Q_DISTRESSED)
                    157:        {
                    158:                /* distressed starsystem */
                    159:                e = &Event[q->qsystemname & Q_SYSTEM];
                    160:                printf("Distress call for %s invalidated\n",
                    161:                        Systemname[e->systemname]);
                    162:                unschedule(e);
                    163:        }
                    164:        q->qsystemname = 0;
                    165:        q->stars -= 1;
                    166: }
                    167: 
                    168: 
                    169: /**
                    170:  **    "kill" a distress call
                    171:  **/
                    172: 
                    173: killd(x, y, f)
                    174: int    x, y;           /* quadrant coordinates */
                    175: int    f;              /* set if user is to be informed */
                    176: {
                    177:        register struct event   *e;
                    178:        register int            i;
                    179:        register struct quad    *q;
                    180: 
                    181:        q = &Quad[x][y];
                    182:        for (i = 0; i < MAXEVENTS; i++)
                    183:        {
                    184:                e = &Event[i];
                    185:                if (e->x != x || e->y != y)
                    186:                        continue;
                    187:                switch (e->evcode)
                    188:                {
                    189:                  case E_KDESB:
                    190:                        if (f)
                    191:                        {
                    192:                                printf("Distress call for starbase in %d,%d nullified\n",
                    193:                                        x, y);
                    194:                                unschedule(e);
                    195:                        }
                    196:                        break;
                    197: 
                    198:                  case E_ENSLV:
                    199:                  case E_REPRO:
                    200:                        if (f)
                    201:                        {
                    202:                                printf("Distress call for %s in quadrant %d,%d nullified\n",
                    203:                                        Systemname[e->systemname], x, y);
                    204:                                q->qsystemname = e->systemname;
                    205:                                unschedule(e);
                    206:                        }
                    207:                        else
                    208:                        {
                    209:                                e->evcode |= E_GHOST;
                    210:                        }
                    211:                }
                    212:        }
                    213: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.