DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T c

⟦120b5b66b⟧ TextFile

    Length: 6408 (0x1908)
    Types: TextFile
    Names: »cmds3.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Trek73/src/cmds3.c« 

TextFile

#ident "@(#) TREK73 $Header: cmds3.c,v 1.1 87/10/09 11:02:23 okamoto Exp $"
/*
 * $Source: /ccc/okamoto/src/trek/src/RCS/cmds3.c,v $
 *
 * $Header: cmds3.c,v 1.1 87/10/09 11:02:23 okamoto Exp $
 *
 * $Log:	cmds3.c,v $
 * Revision 1.1  87/10/09  11:02:23  11:02:23  okamoto (Jeff Okamoto)
 * Initial revision
 * 
 */
/*
 * TREK73: cmds3.c
 *
 * User Commands
 *
 * jettison_engineering, detonate_engineering, phaser_status, tube_status,
 * survivors, alter_power
 *
 * (do_jettison)
 *
 */

#include "externs.h"
#include <ctype.h>


int
jettison_engineering(sp)
struct ship *sp;
{

	printf("   Mr. %s, jettison our engineering section!\n", engineer);
	if (is_dead(sp, S_ENG)) {
		printf("%s:  But Captain, it's already jettisonned.\n", engineer);
		return 0;
	}
	do_jettison(sp);
	printf("%s:  Aye, %s.  Jettisoning engineering.\n", 
	    engineer, title);
	return 1;
}

int
do_jettison(sp)
struct ship *sp;
{
	register struct list *lp;
	register struct torpedo *tp;

	lp = newitem(I_ENG);
	tp = lp->data.tp = MKNODE(struct torpedo, *, 1);
	if (tp == (struct torpedo *)NULL) {
		fprintf(stderr, "do_jettison: malloc failed\n");
		exit(2);
	}
	tp->target = NULL;
	tp->speed = sp->warp;
	tp->newspeed = 0.0;
	tp->x = sp->x;
	tp->y = sp->y;
	tp->course = sp->course;
	/* This is correct */
	tp->fuel = sp->energy;
	tp->timedelay = 10.;
	tp->prox = 0;
	tp->from = sp;
	tp->id = new_slot();
	tp->type = TP_ENGINEERING;
	sp->energy = sp->pods = 0.;
	sp->newwarp = (sp->warp < 0.0) ? -0.99 : 0.99;
	sp->regen = 0.0;
	sp->status[S_ENG] = 100;	/* Set these as destroyed */
	sp->status[S_WARP] = 100;
	sp->max_speed = 1.0;
	sp->cloaking = C_NONE;
	sp->t_blind_left = sp->t_blind_right =
	    sp->p_blind_left = sp->p_blind_right = 180;
}

int
detonate_engineering(sp)
struct ship *sp;
{
	register struct list *lp;
	register struct torpedo *tp;
	register int found;
	char buf[10];

	found = 0;
	printf("   Mr. %s, detonate engineering!\n", engineer);
	if (!is_dead(sp, S_ENG)) {
		printf("%s: But %s, it's still attached.\n",engineer,title);
		printf("   Detonate anyway? ");
		printf("%s:  [yes or no] ", captain);
		(void) Gets(buf, sizeof(buf));
		if ((buf[0] == NULL)
		    || ((buf[0] != 'y') && (buf[0] != 'Y')))
			return 0;
		else 
			do_jettison(sp);
	}
	for (lp = &head; lp != tail; lp = lp->fwd) {
		if (lp->type != I_ENG)
			continue;
		tp = lp->data.tp;
		if (tp->from != sp)
			continue;
		found++;
		tp->timedelay = 0.;
		break;
	}
	if (found)
		printf("%s:  Aye, %s.\n",engineer, title);
	else
		printf("%s:  Ours has already detonated.\n", engineer);
	return 1;
}


int
phaser_status(sp)
struct ship *sp;
{
	register int i;

	puts("Phasers\n");
	printf("Control: ");
	for (i=0; i<sp->num_phasers; i++) {
		if (sp->phasers[i].status & P_DAMAGED)
			printf("\tdamaged");
		else if (sp->phasers[i].target == NULL)
			printf("\tmanual");
		else
			printf("\t%.7s", sp->phasers[i].target->name);
	}
	printf("\n Turned: ");
	for (i=0; i<sp->num_phasers; i++)
		if (sp->phasers[i].status & P_DAMAGED)
			putchar('\t');
		else if (sp->phasers[i].target == NULL)
			printf("\t%3.0f", sp->phasers[i].bearing);
		else
			printf("\tLOCKED");
	printf("\n  Level: ");
	for (i=0; i<sp->num_phasers; i++) {
		if (sp->phasers[i].status & P_DAMAGED)
			putchar('\t');
		else
			printf("\t%d", sp->phasers[i].load);
	}
	printf("\n  Drain: ");
	for (i=0; i<sp->num_phasers; i++) {
		if (sp->phasers[i].status & P_DAMAGED)
			putchar('\t');
		else
			printf("\t%d", sp->phasers[i].drain);
	}
	printf("\n\nFiring percentage: %d\n",sp->p_percent);
	printf("\nFiring angles: ");
	if (is_dead(sp, S_ENG)) {
		printf("unrestricted.\n");
	} else {
		printf("0 - %d and %d - 360.\n",
		    sp->p_blind_left, sp->p_blind_right);
	}
	return 1;
}

int
tube_status(sp)
struct ship *sp;
{
	register int i;

	puts("Torpedos\n");
	printf("Control: ");
	for (i=0; i<sp->num_tubes; i++) {
		if (sp->tubes[i].status & T_DAMAGED)
			printf("\tdamaged");
		else if (sp->tubes[i].target == NULL)
			printf("\tmanual");
		else
			printf("\t%.7s", sp->tubes[i].target->name);
	}
	printf("\n Turned: ");
	for (i=0; i<sp->num_tubes; i++)
		if (sp->tubes[i].status & T_DAMAGED)
			putchar('\t');
		else if (sp->tubes[i].target == NULL)
			printf("\t%.0f", sp->tubes[i].bearing);
		else
			printf("\tLOCKED");
	printf("\n  Level: ");
	for (i=0; i<sp->num_tubes; i++) {
		if (sp->tubes[i].status & T_DAMAGED)
			putchar('\t');
		else
			printf("\t%d", sp->tubes[i].load);
	}
	printf("\n\nLaunch speed: %d\n", sp->t_lspeed);
	printf("  Time delay: %d\n", sp->t_delay);
	printf("  Prox delay: %d\n", sp->t_prox);
	printf("\nFiring angles: ");
	if (is_dead(sp, S_ENG)) {
		printf("unrestricted.\n");
	} else {
		printf("0 - %d and %d - 360.\n",sp->t_blind_left, sp->t_blind_right);
	}
	return 1;
}

int
survivors(sp)
struct ship *sp;
{
	struct ship *ep;
	register int i;

	printf("\nSurvivors reported:\n");
	for (i=0; i<=shipnum; i++) {
		ep = shiplist[i];
		if (sp->complement < 0)
			printf("   %s -- destructed", sp->name);
		else if (cantsee(ep))
			printf("   %s -- ???\n", ep->name);
		else
			printf("   %s -- %d\n", ep->name, ep->complement);
	}
	sp = sp;		/* LINT */
}

int
alter_power()
{
	register int i;
	float j;
	char buf1[20];

	printf("\n%s:  Regeneration rate is %5.2f.\n",engineer, shiplist[0]->regen);
	for (i=0; i<SHIELDS; i++) {
		printf("%s:  Shield %d drain is [0.0 to 1.0] ",
		    captain, i + 1);
		(void) Gets(buf1, sizeof(buf1));
		j = (float) atof(buf1);
		if (buf1[strlen(buf1) - 1] == '*') {
			if ((j < 0.0) || (j > 1.0))
				goto badparam;
			for (; i<SHIELDS; i++)
				shiplist[0]->shields[i].attemp_drain =j;
			break;
		} else if ((j < 0.0) || (j > 1.0))
			goto badparam;
		else
			shiplist[0]->shields[i].attemp_drain = j;
	}				
	printf("\n");
	for (i=0; i<shiplist[0]->num_phasers; i++) {
		printf("%s:  Phaser %d drain is [%.0f to %.0f] ",
		    captain, i + 1, MIN_PHASER_DRAIN, MAX_PHASER_DRAIN);
		(void) Gets(buf1, sizeof(buf1));
		j = (float) atof(buf1);
		if (buf1[strlen(buf1) - 1] == '*') {
			if ((j < MIN_PHASER_DRAIN)
			    || (j > MAX_PHASER_DRAIN))
				goto badparam;
			for (; i<shiplist[0]->num_phasers; i++)
				shiplist[0]->phasers[i].drain = (int) j;
			break;
		} else if ((j < MIN_PHASER_DRAIN) 
		    || (j > MAX_PHASER_DRAIN))
			goto badparam;
		else
			shiplist[0]->phasers[i].drain = (int) j;
	}
	return 1;
badparam:
	printf("%s:  Bad parameters, %s.\n", engineer, title);
	return 0;
}