xref: /csrg-svn/games/trek/srscan.c (revision 60859)
125995Smckusick /*
2*60859Sbostic  * Copyright (c) 1980, 1993
3*60859Sbostic  *	The Regents of the University of California.  All rights reserved.
434205Sbostic  *
542606Sbostic  * %sccs.include.redist.c%
625995Smckusick  */
725995Smckusick 
811699Smckusick #ifndef lint
9*60859Sbostic static char sccsid[] = "@(#)srscan.c	8.1 (Berkeley) 05/31/93";
1034205Sbostic #endif /* not lint */
1111699Smckusick 
1211699Smckusick # include	"trek.h"
1311699Smckusick # include	"getpar.h"
1411699Smckusick 
1511699Smckusick /*
1611699Smckusick **  SHORT RANGE SENSOR SCAN
1711699Smckusick **
1811699Smckusick **	A short range scan is taken of the current quadrant.  If the
1911699Smckusick **	flag 'f' is one, it is an "auto srscan", which is not done
2011699Smckusick **	unless in 'fast' mode.  It does a status report and a srscan.
2111699Smckusick **	If 'f' is -1, you get a status report only.  If it is zero,
2211699Smckusick **	you get a srscan and an optional status report.  The status
2311699Smckusick **	report is taken if you enter "srscan yes"; for all srscans
2411699Smckusick **	thereafter you get a status report with your srscan until
2511699Smckusick **	you type "srscan no".  It defaults to on.
2611699Smckusick **
2711699Smckusick **	The current quadrant is filled in on the computer chart.
2811699Smckusick */
2911699Smckusick 
3012738Slayer char	*Color[4] =
3111699Smckusick {
3211699Smckusick 	"GREEN",
3311699Smckusick 	"DOCKED",
3411699Smckusick 	"YELLOW",
3511699Smckusick 	"RED"
3611699Smckusick };
3711699Smckusick 
srscan(f)3811699Smckusick srscan(f)
3911699Smckusick int	f;
4011699Smckusick {
4111699Smckusick 	register int		i, j;
4211699Smckusick 	register int		statinfo;
4311699Smckusick 	char			*s;
4411699Smckusick 	int			percent;
4511699Smckusick 	struct quad		*q;
4611699Smckusick 	extern struct cvntab	Skitab[];
4711699Smckusick 	extern struct cvntab	Lentab[];
4811699Smckusick 	struct cvntab		*p;
4911699Smckusick 
5011699Smckusick 	if (f >= 0 && check_out(SRSCAN))
5111699Smckusick 	{
5211699Smckusick 		return;
5311699Smckusick 	}
5411699Smckusick 	if (f)
5511699Smckusick 		statinfo = 1;
5611699Smckusick 	else
5711699Smckusick 	{
5811699Smckusick 		if (!testnl())
5911699Smckusick 			Etc.statreport = getynpar("status report");
6011699Smckusick 		statinfo = Etc.statreport;
6111699Smckusick 	}
6211699Smckusick 	if (f > 0)
6311699Smckusick 	{
6411699Smckusick 		Etc.statreport = 1;
6511699Smckusick 		if (!Etc.fast)
6611699Smckusick 			return;
6711699Smckusick 	}
6811699Smckusick 	if (f >= 0)
6911699Smckusick 	{
7011699Smckusick 		printf("\nShort range sensor scan\n");
7111699Smckusick 		q = &Quad[Ship.quadx][Ship.quady];
7211699Smckusick 		q->scanned = q->klings * 100 + q->bases * 10 + q->stars;
7311699Smckusick 		printf("  ");
7411699Smckusick 		for (i = 0; i < NSECTS; i++)
7511699Smckusick 		{
7611699Smckusick 			printf("%d ", i);
7711699Smckusick 		}
7811699Smckusick 		printf("\n");
7911699Smckusick 	}
8011699Smckusick 
8111699Smckusick 	for (i = 0; i < NSECTS; i++)
8211699Smckusick 	{
8311699Smckusick 		if (f >= 0)
8411699Smckusick 		{
8511699Smckusick 			printf("%d ", i);
8611699Smckusick 			for (j = 0; j < NSECTS; j++)
8711699Smckusick 				printf("%c ", Sect[i][j]);
8811699Smckusick 			printf("%d", i);
8911699Smckusick 			if (statinfo)
9011699Smckusick 				printf("   ");
9111699Smckusick 		}
9211699Smckusick 		if (statinfo)
9311699Smckusick 			switch (i)
9411699Smckusick 			{
9511699Smckusick 			  case 0:
9611699Smckusick 				printf("stardate      %.2f", Now.date);
9711699Smckusick 				break;
9811699Smckusick 			  case 1:
9911699Smckusick 				printf("condition     %s", Color[Ship.cond]);
10011699Smckusick 				if (Ship.cloaked)
10111699Smckusick 					printf(", CLOAKED");
10211699Smckusick 				break;
10311699Smckusick 			  case 2:
10411699Smckusick 				printf("position      %d,%d/%d,%d",Ship.quadx, Ship.quady, Ship.sectx, Ship.secty);
10511699Smckusick 				break;
10611699Smckusick 			  case 3:
10711699Smckusick 				printf("warp factor   %.1f", Ship.warp);
10811699Smckusick 				break;
10911699Smckusick 			  case 4:
11011699Smckusick 				printf("total energy  %d", Ship.energy);
11111699Smckusick 				break;
11211699Smckusick 			  case 5:
11311699Smckusick 				printf("torpedoes     %d", Ship.torped);
11411699Smckusick 				break;
11511699Smckusick 			  case 6:
11611699Smckusick 				s = "down";
11711699Smckusick 				if (Ship.shldup)
11811699Smckusick 					s = "up";
11911699Smckusick 				if (damaged(SHIELD))
12011699Smckusick 					s = "damaged";
12111699Smckusick 				percent = 100.0 * Ship.shield / Param.shield;
12211699Smckusick 				printf("shields       %s, %d%%", s, percent);
12311699Smckusick 				break;
12411699Smckusick 			  case 7:
12511699Smckusick 				printf("Klingons left %d", Now.klings);
12611699Smckusick 				break;
12711699Smckusick 			  case 8:
12811699Smckusick 				printf("time left     %.2f", Now.time);
12911699Smckusick 				break;
13011699Smckusick 			  case 9:
13111699Smckusick 				printf("life support  ");
13211699Smckusick 				if (damaged(LIFESUP))
13311699Smckusick 				{
13411699Smckusick 					printf("damaged, reserves = %.2f", Ship.reserves);
13511699Smckusick 					break;
13611699Smckusick 				}
13711699Smckusick 				printf("active");
13811699Smckusick 				break;
13911699Smckusick 			}
14011699Smckusick 		printf("\n");
14111699Smckusick 	}
14211699Smckusick 	if (f < 0)
14311699Smckusick 	{
14411699Smckusick 		printf("current crew  %d\n", Ship.crew);
14511699Smckusick 		printf("brig space    %d\n", Ship.brigfree);
14611699Smckusick 		printf("Klingon power %d\n", Param.klingpwr);
14711699Smckusick 		p = &Lentab[Game.length - 1];
14811699Smckusick 		if (Game.length > 2)
14911699Smckusick 			p--;
15011699Smckusick 		printf("Length, Skill %s%s, ", p->abrev, p->full);
15111699Smckusick 		p = &Skitab[Game.skill - 1];
15211699Smckusick 		printf("%s%s\n", p->abrev, p->full);
15311699Smckusick 		return;
15411699Smckusick 	}
15511699Smckusick 	printf("  ");
15611699Smckusick 	for (i = 0; i < NSECTS; i++)
15711699Smckusick 		printf("%d ", i);
15811699Smckusick 	printf("\n");
15911699Smckusick 
16012738Slayer 	if (q->qsystemname & Q_DISTRESSED)
16111699Smckusick 		printf("Distressed ");
16212738Slayer 	if (q->qsystemname)
16311699Smckusick 		printf("Starsystem %s\n", systemname(q));
16411699Smckusick }
165