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

unix.superglobalmegacorp.com

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