|
|
researchv10 Norman
# include "trek.h"
/**
** Handle a Klingon's death
**/
killk(ix, iy)
int ix, iy;
{
register int i;
printf(" *** Klingon at %d,%d destroyed ***\n", ix, iy);
Status.kling =- 1;
Sect[ix][iy] = EMPTY;
Quad[Quadx][Quady].qkling =- 1;
Quad[Quadx][Quady].scanned =- 100;
Game.gkillk =+ 1;
for (i = 0; i < Nkling; i++)
if (ix == Kling[i].x && iy == Kling[i].y)
{
Nkling =- 1;
for (; i < Nkling; i++)
bmove(&Kling[i+1], &Kling[i], sizeof Kling[i]);
break;
}
if (Status.kling <= 0)
win();
Status.time = Status.resource / Status.kling;
}
/**
** handle a starbase's death
**/
killb(qx, qy)
int qx, qy;
{
register QUAD *q;
register XY *b;
q = &Quad[qx][qy];
if (q->bases <= 0)
return;
q->bases = 0;
Status.bases =- 1;
for (b = Base; ; b++)
if (qx == b->x && qy == b->y)
break;
bmove(&Base[Status.bases], b, sizeof *b);
if (qx == Quadx && qy == Quady)
{
Sect[Starbase.x][Starbase.y] = EMPTY;
if (Status.cond == DOCKED)
undock();
printf("Starbase at %d,%d destroyed\n", Starbase.x, Starbase.y);
} else if(!Damage[SSRADIO]) {
printf("Uhura:\tStarfleet command reports that the starbase in\n");
printf("\tquadrant %d,%d has been destroyed\n", qx, qy);
}
if(!Damage[SSRADIO]) {
/* then update starchart */
if (q->scanned < 1000)
q->scanned =- 10;
else
if (q->scanned > 1000)
q->scanned = -1;
}
}
/**
** kill an inhabited starsystem
**/
kills(x, y, f)
int x, y; /* quad coords if f == 0, else sector coords */
int f; /* f != 0 -- this quad; f < 0 -- Enterprise's fault */
{
register QUAD *q;
register EVENT *e;
register int i;
if (f)
{
/* current quadrant */
q = &Quad[Quadx][Quady];
Sect[x][y] = EMPTY;
i = getqname(q);
if(i==0) return;
printf("Inhabited starsystem %s at %d,%d destroyed\n",
Systemname[i], x, y);
if (f < 0)
Game.killinhab =+ 1;
}
else
{
/* different quadrant */
q = &Quad[x][y];
}
if (q->systemname&Q_DISTRESS)
{
/* distressed starsystem */
e = &Event[q->systemname&Q_STARNAME];
printf("Distress call for %s invalidated\n",
Systemname[e->evdata]);
unschedule(e);
}
q->systemname = 0;
q->stars =- 1;
}
/**
** "kill" a distress call
**/
killd(x, y)
int x, y; /* quadrant coordinates */
{
register EVENT *e;
register int i;
register QUAD *q;
q = &Quad[x][y];
for (i = 0; i < MAXEVENTS; i++)
{
e = &Event[i];
if (e->x != x || e->y != y)
continue;
switch (e->evcode)
{
case E_KDESB:
printf("Distress call for starbase in %d,%d nullified\n",
x, y);
unschedule(e);
break;
case E_ENSLV:
case E_REPRO:
printf("Distress call for %s in quadrant %d,%d nullified\n",
Systemname[e->evdata], x, y);
q->systemname = e->evdata;
unschedule(e);
}
}
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.