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

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

unix.superglobalmegacorp.com

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