Annotation of 43BSD/games/trek/kill.c, revision 1.1

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

unix.superglobalmegacorp.com

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