[comp.sources.x] v10i015: xtrek, Part04/11

ddickey@aspen.cray.com (Dan A. Dickey) (10/24/90)

Submitted-by: ddickey@aspen.cray.com (Dan A. Dickey)
Posting-number: Volume 10, Issue 15
Archive-name: xtrek/part04

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# If this archive is complete, you will see the following message at the end:
#		"End of archive 4 (of 11)."
#
# Contents:
#   getship.c inform.c sintab.c trigtab.c xtrek_ship.man
#
# Wrapped by ddickey@cray.com on Thu Oct 11 11:43:53 1990
#
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f getship.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"getship.c\"
else
echo shar: Extracting \"getship.c\" \(9270 characters\)
sed "s/^X//" >getship.c <<'END_OF_getship.c'
Xstatic char sccsid[] = "@(#)getship.c	3.1";
X/*
X
X	Copyright (c) 1986 	Chris Guthrie
X
XPermission to use, copy, modify, and distribute this
Xsoftware and its documentation for any purpose and without
Xfee is hereby granted, provided that the above copyright
Xnotice appear in all copies and that both that copyright
Xnotice and this permission notice appear in supporting
Xdocumentation.  No representations are made about the
Xsuitability of this software for any purpose.  It is
Xprovided "as is" without express or implied warranty.
X
X*/
X
X/*
X * Enhancements added by Jeff Weinstein (jeff@polyslo.calpoly.edu).
X */
X
X
X#include <X11/Xlib.h>
X#include <X11/Xos.h>
X#include <stdio.h>
X#include <ctype.h>
X#include <math.h>
X#include "defs.h"
X#include "data.h"
X
Xstruct ship_features {
X    int s_turns;
X    short s_accs;
X    short s_torpdamage;
X    short s_phaserdamage;
X    short s_phasedist;
X    short s_torpspeed;
X    short s_maxspeed;
X    short s_repair;
X    short s_maxfuel;
X    short s_torpcost;
X    short s_phasercost;
X    short s_detcost;
X    short s_warpcost;
X    short s_cloakcost;
X    short s_recharge;
X    int s_accint;
X    int s_decint;
X    short s_maxarmies;
X
X    short s_wcool;
X    short s_ecool;
X    short s_maxdamage;
X    short s_maxshields;
X
X    short s_dcloak;	/* if more damage than this, then cloaks are flaky */
X    short s_dcloak_on;	/* chance for damaged cloaks to start working */
X    short s_dcloak_off;	/* chance for damaged cloaks to stop working */
X};
X
Xstatic struct ship_features def_ship_chars[NUMTEAM] = {
X/*TURNS ACCS TORPDAM PHASDAM PHASDIST TORPSPD MAXSPD REPAIR MAXFUEL TORPCOST */
X/*PHASCOST DETCOST WARPCOST CLOAKCOST RECHARGE ACCINT DECINT MAXARM */
X/*WCOOL ECOOL MAXDAM MAXSHLD  DCLOAK DCLOAK_ON DCLOAK_OFF */
X{ 512000, 21, 300,    2500,   60,      11,     9,    100,   10000,   0,
X  0,        100,    20,      45,       13,      12,    12,   10,
X  4,      6,   100,   100,	25,	25,	25 },	/* FED */
X{ 256000, 21, 600,    3125,   75,       14,     7,    150,   20000,   0,
X  0,         75,    25,      30,       12,      11,    15,   14,
X  8,      4,   100,   125,	25,	25,	25},	/* ROM */
X{ 512000, 21, 300,    2500,   60,      11,     9,    100,   10000,   0,
X  0,        100,    20,      45,       13,      12,    12,   10,
X  4,      6,   100,   100,	25,	25,	25},	/* KLI */
X{ 1024000,21, 100,    2000,   50,      14,    11,    100,    7500,   0,
X  0,        100,    15,      45,       15,      14,    14,   6,
X  3,      8,   100,   100,	25,	25,	25 }	/* ORI */
X};
X
Xextern int	debug;
Xvoid becomegod();
X
X/* fill in ship characteristics */
X
Xchar *
Xgetship(p, customship)
Xstruct player	*p;
Xchar		*customship;
X{
X    struct ship *shipp;
X    struct ship_features *dshipc;
X    int feature[128];
X    char *savecs = customship;
X    double ppower, tpower;
X    char	ebuf[128];
X
X    shipp = p->p_ship;
X    bzero(feature,128 * sizeof(int));
X    dshipc = &def_ship_chars[p->p_ship->s_team-1];
X    shipp->s_turns = dshipc->s_turns;
X    shipp->s_accs = dshipc->s_accs;
X    shipp->s_torpdamage = dshipc->s_torpdamage;
X    shipp->s_phaserdamage = dshipc->s_phaserdamage;
X    shipp->s_phasedist = dshipc->s_phasedist;
X    shipp->s_torpspeed = dshipc->s_torpspeed;
X    shipp->s_maxspeed = dshipc->s_maxspeed;
X    shipp->s_repair = dshipc->s_repair;
X    shipp->s_maxfuel = dshipc->s_maxfuel;
X    shipp->s_torpcost = dshipc->s_torpcost;
X    shipp->s_phasercost = dshipc->s_phasercost;
X    shipp->s_detcost = dshipc->s_detcost;
X    shipp->s_warpcost = dshipc->s_warpcost;
X    shipp->s_cloakcost = dshipc->s_cloakcost;
X    shipp->s_recharge = dshipc->s_recharge;
X    shipp->s_accint = dshipc->s_accint;
X    shipp->s_decint = dshipc->s_decint;
X    shipp->s_maxarmies = dshipc->s_maxarmies;
X    shipp->s_wcool = dshipc->s_wcool;
X    shipp->s_ecool = dshipc->s_ecool;
X    shipp->s_maxdamage = dshipc->s_maxdamage;
X    shipp->s_maxshields = dshipc->s_maxshields;
X    shipp->s_dcloak = dshipc->s_dcloak;
X    shipp->s_dcloak_on = dshipc->s_dcloak_on;
X    shipp->s_dcloak_off = dshipc->s_dcloak_off;
X
X    if (customship)
X	for (; *customship > 0; customship++) {
X	    if (islower(*customship)) {
X		    (feature[*customship])--;
X	    } else if (isupper(*customship)) {
X		    (feature[tolower(*customship)])++;
X	    }
X	}
X
X    /*
X     * The following are the configurable options:
X     * a/A  Army Transport
X     * c/C  Cloaking Cost
X     * d/D  Heat Dissipation (weapons & engines)
X     * e/E  Engine Efficiency
X     * f/F  Fuel Capacity
X     * g/G  Fuel Generation
X     * i/I  Invisibility While Cloaked	(NOT IMPLEMENTED)
X     * m/M  Maneuverablity
X     * p/P  Phaser Power (affects damage & range)
X     * r/R  Repair Rate
X     * s/S  Shield Strength
X     * t/T  Torpedo Size
X     * v/V  Torpedo Speed
X     * w/W  Warp Engines (affects acceleration & top speed)
X     * x/X  Ship Size
X     * z/Z  Change to GOD Team - SPECIAL FEATURE
X     */
X
X    if (feature['z'])
X	becomegod(p);
X
X    /* check sanity of options */
X    if (!isGod(p) && ((feature['a'] + feature['c'] + feature['d'] + feature['e'] + 
X	 feature['f'] + feature['g'] + feature['i'] + feature['m'] +
X	 feature['p'] + feature['r'] + feature['s'] + feature['t'] +
X	 feature['v'] + feature['w'] + feature['x']) > 0))
X    {
X	sprintf(ebuf,"ship has too many additions: %s", savecs);
X	warning(p, ebuf);
X        bzero(feature,128 * sizeof(int));
X    }
X#define rangecheck(plyr,min,value,max) \
X	if (!isGod((plyr)) && (feature[(value)] < (min))) \
X	{ \
X	    sprintf(ebuf,"ship out of range:%c < %d",(value),(min)); \
X	    warning((plyr), ebuf); \
X            bzero(feature,128 * sizeof(int)); \
X	} \
X	if (!isGod((plyr)) && (feature[(value)] > (max))) \
X	{ \
X	    sprintf(ebuf,"ship out of range:%c > %d",(value),(max)); \
X	    warning((plyr), ebuf); \
X            bzero(feature,128 * sizeof(int)); \
X	}
X
X    /* Check all ranges before making any modification. */
X    rangecheck(p,-2,'a',1000);
X    rangecheck(p,0,'c',3);
X    rangecheck(p,-5,'d',1000);
X    rangecheck(p,-4,'e',16);
X    rangecheck(p,-3,'f',9);
X    rangecheck(p,-5,'g',1000);
X    rangecheck(p,-2,'i',1000);
X    rangecheck(p,-5,'m',1000);
X    rangecheck(p,-4,'p',1000);
X    rangecheck(p,-2,'r',1000);
X    rangecheck(p,-4,'s',1000);
X    rangecheck(p,-2,'t',1000);
X    rangecheck(p,-4,'v',1000);
X    rangecheck(p,-5,'w',1000);
X    rangecheck(p,-5,'x',1000);
X
X    shipp->s_maxarmies += 4 * feature['a'];
X    if (shipp->s_maxarmies < 0)
X	shipp->s_maxarmies = 0;
X
X    shipp->s_cloakcost -= 10 * feature['c'];
X    if (shipp->s_cloakcost < 0)
X	shipp->s_cloakcost = 0;
X
X    shipp->s_ecool += feature['d'];
X    shipp->s_wcool += feature['d'];
X    if (shipp->s_ecool < 0)
X	shipp->s_ecool = 0;
X    if (shipp->s_wcool < 0)
X	shipp->s_wcool = 0;
X
X    shipp->s_warpcost /= (5 + feature['e']);
X
X    /*
X     * this limit is artificial, an artifact of the status
X     * display code, which requires fuel to be a short. YUK!!
X     * I should fix it some time.
X     */
X    shipp->s_maxfuel += 2500 * feature['f'];
X
X    shipp->s_recharge += 2 * feature['g'];
X    if (shipp->s_recharge < 0)
X	shipp->s_recharge = 0;
X
X    shipp->s_accs += feature['i'] * 10;
X
X    if (feature['m'] > 0) {
X	shipp->s_turns <<= feature['m'];
X    } else {
X	shipp->s_turns >>= -(feature['m']);
X    }
X
X    ppower=(4 + feature['p']) * shipp->s_phaserdamage;
X    shipp->s_phaserdamage = (int) sqrt(ppower);
X    shipp->s_phasedist = shipp->s_phaserdamage * 60;
X
X    shipp->s_repair += 50 * feature['r'];
X    if (shipp->s_repair < 0)
X	shipp->s_repair = 0;
X
X    shipp->s_maxshields += 25 * feature['s'];
X    if (shipp->s_maxshields < 0)
X	shipp->s_maxshields = 0;
X
X    tpower=(2 + feature['t']) * shipp->s_torpdamage;
X    if (tpower < (double) 0.0)
X      tpower = (double) 0.0;
X    shipp->s_torpdamage = (int) sqrt(tpower);
X
X    shipp->s_torpspeed += 6 * feature['v'];
X    if (shipp->s_torpspeed < 0)
X	shipp->s_torpspeed = 0;
X
X    shipp->s_maxspeed += 2 * feature['w'];
X    if (shipp->s_maxspeed < 1)
X	shipp->s_maxspeed = 1;
X    shipp->s_accint *= (1 + shipp->s_maxspeed);
X    shipp->s_decint *= (1 + shipp->s_maxspeed);
X
X    shipp->s_maxdamage += 15 * feature['x'];
X	
X    shipp->s_detcost = 100;
X    shipp->s_torpcost = (shipp->s_torpspeed/2 + 4) * shipp->s_torpdamage;
X    shipp->s_phasercost = 10 * shipp->s_phaserdamage;
X    return((char *) NULL);
X}
X
Xvoid
Xbecomegod(p)
Xregister struct player	*p;
X{
X	register int	i;
X	register char	*cp;
X	char		cbuf[256];
X
X	sprintf(cbuf, "%s:%s", p->p_login, p->p_monitor);
X	if (debug)
X		printf("God Attempt by <%s>\n", cbuf);
X	for (i = 0, cp = universe.god_names[0]; i < MAXPLAYER && cp && *cp;) {
X		if (strcmp(cbuf, cp) == 0) {
X			p->p_ship->s_team = GOD;
X			return;
X		}
X		cp = universe.god_names[++i];
X	}
X}
X
Xupdate_weapons(p)
Xregister struct player	*p;
X{
X	struct ship *shipp;
X	double ppower, tpower;
X
X	shipp = p->p_ship;
X	return;
X
X	/* 10% more phaser power for each kill */
X	shipp->s_phaserdamage += (shipp->s_phaserdamage * (shipp->s_stats.st_kills / 10.0));
X	ppower = shipp->s_phaserdamage * shipp->s_phaserdamage;
X	shipp->s_phaserdamage = (int) sqrt(ppower);
X	shipp->s_phasedist = shipp->s_phaserdamage * 60;
X
X	/* 10% more torp power for each kill */
X	shipp->s_torpdamage += (shipp->s_torpdamage * (shipp->s_stats.st_kills / 10.0));
X	tpower = shipp->s_torpdamage * shipp->s_torpdamage;
X	if (tpower < (double) 0.0)
X		tpower = (double) 0.0;
X	shipp->s_torpdamage = (int) sqrt(tpower);
X}
END_OF_getship.c
if test 9270 -ne `wc -c <getship.c`; then
    echo shar: \"getship.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f inform.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"inform.c\"
else
echo shar: Extracting \"inform.c\" \(7156 characters\)
sed "s/^X//" >inform.c <<'END_OF_inform.c'
Xstatic char sccsid[] = "@(#)inform.c	3.1";
X/*
X
X	Copyright (c) 1986 	Chris Guthrie
X
XPermission to use, copy, modify, and distribute this
Xsoftware and its documentation for any purpose and without
Xfee is hereby granted, provided that the above copyright
Xnotice appear in all copies and that both that copyright
Xnotice and this permission notice appear in supporting
Xdocumentation.  No representations are made about the
Xsuitability of this software for any purpose.  It is
Xprovided "as is" without express or implied warranty.
X
X*/
X
X#include <X11/Xlib.h>
X#include <stdio.h>
X#include <math.h>
X#include <signal.h>
X#include "defs.h"
X#include "data.h"
X
X/* Display information about the nearest objext to mouse */
X
X/*
X** When the player asks for info, this routine finds the object
X** nearest the mouse, either player or planet, and pops up a window
X** with the desired information in it.
X** 
X** We intentionally provide less information than is actually
X** available.  Keeps the fog of war up.
X**
X** There is a different sized window for each type player/planet
X** and we take care to keep it from extending beyond the main
X** window boundaries.
X*/
X
Xinform(p, ww, x, y)
Xregister struct player	*p;
XWindow ww;
Xint x, y;
X{
X    int mx, my;
X    int rx, ry;
X    int		maskr;
X    Window subw;
X    struct obtype *gettarget(), *target;
X    XWindowAttributes	wa;
X
X    p->p_infomapped = 1;
X    target = gettarget(p, ww, x, y, TARG_PLAYER|TARG_PLANET|TARG_MYSELF);
X    p->p_info_target = *target;
X
X    XGetWindowAttributes(p->display, ww, &wa);
X
X    XQueryPointer(p->display, ww, &subw, &subw, &rx, &ry, &mx, &my, &maskr);
X
X    if (target->o_type == PLAYERTYPE) {
X	/* Too close to the edge? */
X	if (mx + 23 * fontWidth(p->dfont) + 2 > wa.width)
X	    mx = wa.width - 23 * fontWidth(p->dfont) - 2;
X	if (my + 7 * fontHeight(p->dfont) + 2 > wa.height)
X	    my = wa.height - 7 * fontHeight(p->dfont) - 2;
X
X	p->infow = XCreateWindow(p->display, ww, mx, my, (unsigned) 23 * fontWidth(p->dfont),
X	    (unsigned) 7 * fontHeight(p->dfont), 2, DefaultDepth(p->display, p->screen), InputOutput, (Visual *)CopyFromParent, 0L, (XSetWindowAttributes *)0);
X    } else {  /* Planet */
X	/* Too close to the edge? */
X	if (mx + 20 * fontWidth(p->dfont) + 2 > wa.width)
X	    mx = wa.width - 20 * fontWidth(p->dfont) - 2;
X	if (my + 3 * fontHeight(p->dfont) + 2 > wa.height)
X	    my = wa.height - 3 * fontHeight(p->dfont) - 2;
X
X	p->infow = XCreateWindow(p->display, ww, mx, my, (unsigned) 20 * fontWidth(p->dfont),
X	    (unsigned) 3 * fontHeight(p->dfont), 2, DefaultDepth(p->display, p->screen), InputOutput, (Visual *)CopyFromParent, 0L, (XSetWindowAttributes *)0);
X    }
X    XSelectInput(p->display, p->infow, ExposureMask|SubstructureNotifyMask);
X    XSetWindowBackground(p->display, p->infow, p->backColor);
X    XClearWindow(p->display, p->infow);
X    XMapWindow(p->display, p->infow);
X}
X
Xdrawinfo(p)
Xregister struct player	*p;
X{
X    register struct obtype	*target;
X    register struct player	*j;
X    register struct planet	*k;
X    char buf[BUFSIZ*2];
X    int line = 0;
X    double dist;
X
X    if (!p->p_infomapped) {
X	fprintf(stderr, "drawinfo: Player %d no info window\n", p->p_no);
X    }
X    target = &p->p_info_target;
X    if (target->o_type == PLAYERTYPE) {
X	j = &players[target->o_num];
X	dist = hypot((double) (p->p_ship->s_x - j->p_ship->s_x),
X	    (double) (p->p_ship->s_y - j->p_ship->s_y));
X	(void) sprintf(buf, "%s (%c%1x):", j->p_name, 
X		teamlet[j->p_ship->s_team], j->p_ship->s_no);
X	XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X		p->dfont->ascent + fontHeight(p->dfont) * line++, buf, strlen(buf));
X	(void) sprintf(buf, "Login   %-s", j->p_login);
X	XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X		p->dfont->ascent + fontHeight(p->dfont) * line++, buf, strlen(buf));
X	(void) sprintf(buf, "Display %-s", j->p_monitor);
X	XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X		p->dfont->ascent + fontHeight(p->dfont) * line++, buf, strlen(buf));
X	(void) sprintf(buf, "Speed   %-d", j->p_ship->s_speed);
X	XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X		p->dfont->ascent + fontHeight(p->dfont) * line++, buf, strlen(buf));
X
X	/*  Too much information.  Let 'em wonder	NOTE: Give info to team members
X	(void) sprintf(buf, "Damage  %-d", j->p_ship->s_damage);
X	XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X		p->dfont->ascent + fontHeight(p->dfont) * line++, buf, strlen(buf));
X	(void) sprintf(buf, "Shields %-d", j->p_ship->s_shield);
X	XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X		p->dfont->ascent + fontHeight(p->dfont) * line++, buf, strlen(buf));
X	*/
X
X	(void) sprintf(buf, "kills   %-4.2f", j->p_ship->s_stats.st_kills);
X	XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X		p->dfont->ascent + fontHeight(p->dfont) * line++, buf, strlen(buf));
X	(void) sprintf(buf, "dist    %-d", (int) dist);
X	XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X		p->dfont->ascent + fontHeight(p->dfont) * line++, buf, strlen(buf));
X	if (j->p_ship->s_swar & (1 << p->p_ship->s_team))
X	    XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X		p->dfont->ascent + fontHeight(p->dfont) * line++, "WAR", 3);
X	else if (j->p_ship->s_hostile & (1 << p->p_ship->s_team))
X	    XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X		p->dfont->ascent + fontHeight(p->dfont) * line++, "HOSTILE", 7);
X	else
X	    XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X		p->dfont->ascent + fontHeight(p->dfont) * line++, "PEACEFUL", 8);
X    } else {  /* Planet */
X	k = &planets[target->o_num];
X	dist = hypot((double) (p->p_ship->s_x - k->pl_x),
X	    (double) (p->p_ship->s_y - k->pl_y));
X	if (k->pl_info & (1 << p->p_ship->s_team)) {
X	    (void) sprintf(buf, "%s (%c)", k->pl_name, teamlet[k->pl_owner]);
X	    XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X		p->dfont->ascent + fontHeight(p->dfont) * line++, buf, strlen(buf));
X	    if (k->pl_type != SUN) {
X		    (void) sprintf(buf, "Armies %d", k->pl_armies);
X		    XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X			p->dfont->ascent + fontHeight(p->dfont) * line++, buf, strlen(buf));
X	    }
X	    (void) sprintf(buf, "%c%c%c%c  (%s)",
X		(k->pl_info & (1 << FED) ? 'F' : ' '),
X		(k->pl_info & (1 << ROM) ? 'R' : ' '),
X		(k->pl_info & (1 << KLI) ? 'K' : ' '),
X		(k->pl_info & (1 << ORI) ? 'O' : ' '),
X		k->pl_tname);
X	    XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X		p->dfont->ascent + fontHeight(p->dfont) * line++, buf, strlen(buf));
X	}
X	else {
X	    (void) sprintf(buf, "%s", k->pl_name);
X	    XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X		p->dfont->ascent + fontHeight(p->dfont) * line++, buf, strlen(buf));
X	    (void) sprintf(buf, "No other info");
X	    XDrawImageString(p->display, p->infow, p->dfgc, fontWidth(p->dfont),
X		p->dfont->ascent + fontHeight(p->dfont) * line++, buf, strlen(buf));
X	}
X    }
X}
X
X
XdestroyInfo(p)
Xregister struct player	*p;
X{
X    XDestroyWindow(p->display, p->infow);
X    p->infow = (Window) NULL;
X    p->p_infomapped = 0;
X}
END_OF_inform.c
if test 7156 -ne `wc -c <inform.c`; then
    echo shar: \"inform.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f sintab.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"sintab.c\"
else
echo shar: Extracting \"sintab.c\" \(6968 characters\)
sed "s/^X//" >sintab.c <<'END_OF_sintab.c'
Xstatic char sccsid[] = "@(#)sintab.c	3.1";
X
X/*
X
X	Copyright (c) 1986 	Chris Guthrie
X
XPermission to use, copy, modify, and distribute this
Xsoftware and its documentation for any purpose and without
Xfee is hereby granted, provided that the above copyright
Xnotice appear in all copies and that both that copyright
Xnotice and this permission notice appear in supporting
Xdocumentation.  No representations are made about the
Xsuitability of this software for any purpose.  It is
Xprovided "as is" without express or implied warranty.
X
X*/
X
Xdouble Sin[] = {
X    -1.0000,
X    -0.9997,
X    -0.9988,
X    -0.9973,
X    -0.9952,
X    -0.9925,
X    -0.9892,
X    -0.9853,
X    -0.9808,
X    -0.9757,
X    -0.9701,
X    -0.9638,
X    -0.9570,
X    -0.9496,
X    -0.9416,
X    -0.9330,
X    -0.9239,
X    -0.9143,
X    -0.9040,
X    -0.8933,
X    -0.8820,
X    -0.8701,
X    -0.8578,
X    -0.8449,
X    -0.8315,
X    -0.8176,
X    -0.8033,
X    -0.7884,
X    -0.7731,
X    -0.7573,
X    -0.7410,
X    -0.7243,
X    -0.7072,
X    -0.6896,
X    -0.6716,
X    -0.6533,
X    -0.6345,
X    -0.6153,
X    -0.5958,
X    -0.5759,
X    -0.5557,
X    -0.5351,
X    -0.5142,
X    -0.4930,
X    -0.4715,
X    -0.4497,
X    -0.4277,
X    -0.4054,
X    -0.3828,
X    -0.3600,
X    -0.3370,
X    -0.3138,
X    -0.2904,
X    -0.2668,
X    -0.2431,
X    -0.2192,
X    -0.1952,
X    -0.1711,
X    -0.1469,
X    -0.1225,
X    -0.0982,
X    -0.0737,
X    -0.0492,
X    -0.0247,
X    -0.0001,
X    0.0244,
X    0.0489,
X    0.0734,
X    0.0979,
X    0.1223,
X    0.1466,
X    0.1708,
X    0.1949,
X    0.2190,
X    0.2428,
X    0.2666,
X    0.2901,
X    0.3135,
X    0.3367,
X    0.3598,
X    0.3825,
X    0.4051,
X    0.4274,
X    0.4495,
X    0.4713,
X    0.4928,
X    0.5140,
X    0.5349,
X    0.5554,
X    0.5757,
X    0.5956,
X    0.6151,
X    0.6343,
X    0.6531,
X    0.6714,
X    0.6894,
X    0.7070,
X    0.7241,
X    0.7408,
X    0.7571,
X    0.7729,
X    0.7882,
X    0.8031,
X    0.8175,
X    0.8314,
X    0.8448,
X    0.8576,
X    0.8700,
X    0.8818,
X    0.8931,
X    0.9039,
X    0.9141,
X    0.9238,
X    0.9329,
X    0.9415,
X    0.9495,
X    0.9569,
X    0.9637,
X    0.9700,
X    0.9757,
X    0.9808,
X    0.9852,
X    0.9891,
X    0.9925,
X    0.9952,
X    0.9973,
X    0.9988,
X    0.9997,
X    1.0000,
X    0.9997,
X    0.9988,
X    0.9973,
X    0.9952,
X    0.9925,
X    0.9892,
X    0.9853,
X    0.9808,
X    0.9757,
X    0.9700,
X    0.9638,
X    0.9569,
X    0.9495,
X    0.9415,
X    0.9330,
X    0.9239,
X    0.9142,
X    0.9040,
X    0.8932,
X    0.8819,
X    0.8701,
X    0.8577,
X    0.8449,
X    0.8315,
X    0.8176,
X    0.8032,
X    0.7884,
X    0.7730,
X    0.7572,
X    0.7410,
X    0.7243,
X    0.7071,
X    0.6896,
X    0.6716,
X    0.6532,
X    0.6344,
X    0.6153,
X    0.5957,
X    0.5758,
X    0.5556,
X    0.5350,
X    0.5141,
X    0.4929,
X    0.4714,
X    0.4496,
X    0.4276,
X    0.4053,
X    0.3827,
X    0.3599,
X    0.3369,
X    0.3137,
X    0.2903,
X    0.2667,
X    0.2430,
X    0.2191,
X    0.1951,
X    0.1710,
X    0.1468,
X    0.1225,
X    0.0981,
X    0.0736,
X    0.0491,
X    0.0246,
X    0.0000,
X    -0.0245,
X    -0.0490,
X    -0.0735,
X    -0.0980,
X    -0.1224,
X    -0.1467,
X    -0.1709,
X    -0.1950,
X    -0.2190,
X    -0.2429,
X    -0.2667,
X    -0.2902,
X    -0.3136,
X    -0.3368,
X    -0.3598,
X    -0.3826,
X    -0.4052,
X    -0.4275,
X    -0.4496,
X    -0.4713,
X    -0.4928,
X    -0.5140,
X    -0.5349,
X    -0.5555,
X    -0.5758,
X    -0.5956,
X    -0.6152,
X    -0.6343,
X    -0.6531,
X    -0.6715,
X    -0.6895,
X    -0.7071,
X    -0.7242,
X    -0.7409,
X    -0.7572,
X    -0.7730,
X    -0.7883,
X    -0.8032,
X    -0.8175,
X    -0.8314,
X    -0.8448,
X    -0.8577,
X    -0.8700,
X    -0.8819,
X    -0.8932,
X    -0.9040,
X    -0.9142,
X    -0.9238,
X    -0.9330,
X    -0.9415,
X    -0.9495,
X    -0.9569,
X    -0.9638,
X    -0.9700,
X    -0.9757,
X    -0.9808,
X    -0.9853,
X    -0.9892,
X    -0.9925,
X    -0.9952,
X    -0.9973,
X    -0.9988,
X    -0.9997
X};
Xdouble Cos[] = {
X    0.0000,
X    0.0245,
X    0.0491,
X    0.0736,
X    0.0980,
X    0.1224,
X    0.1467,
X    0.1710,
X    0.1951,
X    0.2191,
X    0.2430,
X    0.2667,
X    0.2903,
X    0.3137,
X    0.3369,
X    0.3599,
X    0.3827,
X    0.4052,
X    0.4275,
X    0.4496,
X    0.4714,
X    0.4929,
X    0.5141,
X    0.5350,
X    0.5556,
X    0.5758,
X    0.5957,
X    0.6152,
X    0.6344,
X    0.6532,
X    0.6715,
X    0.6895,
X    0.7071,
X    0.7242,
X    0.7409,
X    0.7572,
X    0.7730,
X    0.7883,
X    0.8032,
X    0.8176,
X    0.8315,
X    0.8448,
X    0.8577,
X    0.8701,
X    0.8819,
X    0.8932,
X    0.9040,
X    0.9142,
X    0.9239,
X    0.9330,
X    0.9415,
X    0.9495,
X    0.9569,
X    0.9638,
X    0.9700,
X    0.9757,
X    0.9808,
X    0.9853,
X    0.9892,
X    0.9925,
X    0.9952,
X    0.9973,
X    0.9988,
X    0.9997,
X    1.0000,
X    0.9997,
X    0.9988,
X    0.9973,
X    0.9952,
X    0.9925,
X    0.9892,
X    0.9853,
X    0.9808,
X    0.9757,
X    0.9700,
X    0.9638,
X    0.9570,
X    0.9495,
X    0.9416,
X    0.9330,
X    0.9239,
X    0.9142,
X    0.9040,
X    0.8933,
X    0.8819,
X    0.8701,
X    0.8578,
X    0.8449,
X    0.8315,
X    0.8176,
X    0.8032,
X    0.7884,
X    0.7731,
X    0.7573,
X    0.7410,
X    0.7243,
X    0.7072,
X    0.6896,
X    0.6716,
X    0.6532,
X    0.6344,
X    0.6153,
X    0.5958,
X    0.5759,
X    0.5556,
X    0.5351,
X    0.5142,
X    0.4930,
X    0.4715,
X    0.4497,
X    0.4276,
X    0.4053,
X    0.3828,
X    0.3600,
X    0.3370,
X    0.3138,
X    0.2904,
X    0.2668,
X    0.2431,
X    0.2192,
X    0.1952,
X    0.1710,
X    0.1468,
X    0.1225,
X    0.0981,
X    0.0737,
X    0.0492,
X    0.0246,
X    0.0001,
X    -0.0244,
X    -0.0490,
X    -0.0735,
X    -0.0979,
X    -0.1223,
X    -0.1466,
X    -0.1709,
X    -0.1950,
X    -0.2190,
X    -0.2429,
X    -0.2666,
X    -0.2902,
X    -0.3136,
X    -0.3368,
X    -0.3598,
X    -0.3826,
X    -0.4051,
X    -0.4275,
X    -0.4495,
X    -0.4713,
X    -0.4928,
X    -0.5140,
X    -0.5349,
X    -0.5555,
X    -0.5757,
X    -0.5956,
X    -0.6151,
X    -0.6343,
X    -0.6531,
X    -0.6715,
X    -0.6895,
X    -0.7070,
X    -0.7242,
X    -0.7409,
X    -0.7571,
X    -0.7729,
X    -0.7883,
X    -0.8031,
X    -0.8175,
X    -0.8314,
X    -0.8448,
X    -0.8577,
X    -0.8700,
X    -0.8819,
X    -0.8932,
X    -0.9039,
X    -0.9142,
X    -0.9238,
X    -0.9329,
X    -0.9415,
X    -0.9495,
X    -0.9569,
X    -0.9637,
X    -0.9700,
X    -0.9757,
X    -0.9808,
X    -0.9853,
X    -0.9892,
X    -0.9925,
X    -0.9952,
X    -0.9973,
X    -0.9988,
X    -0.9997,
X    -1.0000,
X    -0.9997,
X    -0.9988,
X    -0.9973,
X    -0.9952,
X    -0.9925,
X    -0.9892,
X    -0.9853,
X    -0.9808,
X    -0.9757,
X    -0.9701,
X    -0.9638,
X    -0.9570,
X    -0.9496,
X    -0.9416,
X    -0.9330,
X    -0.9239,
X    -0.9143,
X    -0.9041,
X    -0.8933,
X    -0.8820,
X    -0.8702,
X    -0.8578,
X    -0.8449,
X    -0.8316,
X    -0.8177,
X    -0.8033,
X    -0.7884,
X    -0.7731,
X    -0.7573,
X    -0.7411,
X    -0.7244,
X    -0.7072,
X    -0.6897,
X    -0.6717,
X    -0.6533,
X    -0.6345,
X    -0.6154,
X    -0.5958,
X    -0.5759,
X    -0.5557,
X    -0.5351,
X    -0.5142,
X    -0.4930,
X    -0.4715,
X    -0.4498,
X    -0.4277,
X    -0.4054,
X    -0.3828,
X    -0.3601,
X    -0.3371,
X    -0.3138,
X    -0.2905,
X    -0.2669,
X    -0.2432,
X    -0.2193,
X    -0.1953,
X    -0.1711,
X    -0.1469,
X    -0.1226,
X    -0.0982,
X    -0.0737,
X    -0.0493,
X    -0.0247
X};
END_OF_sintab.c
if test 6968 -ne `wc -c <sintab.c`; then
    echo shar: \"sintab.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f trigtab.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"trigtab.c\"
else
echo shar: Extracting \"trigtab.c\" \(7990 characters\)
sed "s/^X//" >trigtab.c <<'END_OF_trigtab.c'
Xstatic char sccsid[] = "@(#)trigtab.c	3.1";
Xlong isin[] = {
X    -8192,
X    -8189,
X    -8182,
X    -8169,
X    -8152,
X    -8130,
X    -8103,
X    -8071,
X    -8034,
X    -7992,
X    -7947,
X    -7895,
X    -7839,
X    -7779,
X    -7713,
X    -7643,
X    -7568,
X    -7489,
X    -7405,
X    -7317,
X    -7225,
X    -7127,
X    -7027,
X    -6921,
X    -6811,
X    -6697,
X    -6580,
X    -6458,
X    -6333,
X    -6203,
X    -6070,
X    -5933,
X    -5793,
X    -5649,
X    -5501,
X    -5351,
X    -5197,
X    -5040,
X    -4880,
X    -4717,
X    -4552,
X    -4383,
X    -4212,
X    -4038,
X    -3862,
X    -3683,
X    -3503,
X    -3321,
X    -3135,
X    -2949,
X    -2760,
X    -2570,
X    -2378,
X    -2185,
X    -1991,
X    -1795,
X    -1599,
X    -1401,
X    -1203,
X    -1003,
X    -804,
X    -603,
X    -403,
X    -202,
X    0,
X    199,
X    400,
X    601,
X    801,
X    1001,
X    1200,
X    1399,
X    1596,
X    1794,
X    1989,
X    2183,
X    2376,
X    2568,
X    2758,
X    2947,
X    3133,
X    3318,
X    3501,
X    3682,
X    3860,
X    4037,
X    4210,
X    4381,
X    4549,
X    4716,
X    4879,
X    5038,
X    5196,
X    5350,
X    5500,
X    5647,
X    5791,
X    5931,
X    6068,
X    6202,
X    6331,
X    6456,
X    6578,
X    6696,
X    6810,
X    6920,
X    7025,
X    7127,
X    7223,
X    7316,
X    7404,
X    7488,
X    7567,
X    7642,
X    7712,
X    7778,
X    7838,
X    7894,
X    7946,
X    7992,
X    8034,
X    8070,
X    8102,
X    8130,
X    8152,
X    8169,
X    8182,
X    8189,
X    8192,
X    8189,
X    8182,
X    8169,
X    8152,
X    8130,
X    8103,
X    8071,
X    8034,
X    7992,
X    7946,
X    7895,
X    7838,
X    7778,
X    7712,
X    7643,
X    7568,
X    7489,
X    7405,
X    7317,
X    7224,
X    7127,
X    7026,
X    6921,
X    6811,
X    6697,
X    6579,
X    6458,
X    6332,
X    6202,
X    6070,
X    5933,
X    5792,
X    5649,
X    5501,
X    5351,
X    5197,
X    5040,
X    4879,
X    4716,
X    4551,
X    4382,
X    4211,
X    4037,
X    3861,
X    3683,
X    3502,
X    3320,
X    3135,
X    2948,
X    2759,
X    2569,
X    2378,
X    2184,
X    1990,
X    1794,
X    1598,
X    1400,
X    1202,
X    1003,
X    803,
X    602,
X    402,
X    201,
X    0,
X    -200,
X    -401,
X    -602,
X    -802,
X    -1002,
X    -1201,
X    -1400,
X    -1597,
X    -1794,
X    -1989,
X    -2184,
X    -2377,
X    -2569,
X    -2759,
X    -2947,
X    -3134,
X    -3319,
X    -3502,
X    -3683,
X    -3860,
X    -4037,
X    -4210,
X    -4381,
X    -4550,
X    -4716,
X    -4879,
X    -5039,
X    -5196,
X    -5350,
X    -5500,
X    -5648,
X    -5792,
X    -5932,
X    -6069,
X    -6202,
X    -6332,
X    -6457,
X    -6579,
X    -6696,
X    -6810,
X    -6920,
X    -7026,
X    -7127,
X    -7224,
X    -7317,
X    -7405,
X    -7489,
X    -7567,
X    -7643,
X    -7712,
X    -7778,
X    -7838,
X    -7895,
X    -7946,
X    -7992,
X    -8034,
X    -8071,
X    -8103,
X    -8130,
X    -8152,
X    -8169,
X    -8182,
X    -8189
X};
Xlong icos[] = {
X    0,
X    200,
X    402,
X    602,
X    802,
X    1002,
X    1201,
X    1400,
X    1598,
X    1794,
X    1990,
X    2184,
X    2378,
X    2569,
X    2759,
X    2948,
X    3135,
X    3319,
X    3502,
X    3683,
X    3861,
X    4037,
X    4211,
X    4382,
X    4551,
X    4716,
X    4879,
X    5039,
X    5197,
X    5351,
X    5500,
X    5648,
X    5792,
X    5932,
X    6069,
X    6202,
X    6332,
X    6457,
X    6579,
X    6697,
X    6811,
X    6920,
X    7026,
X    7127,
X    7224,
X    7317,
X    7405,
X    7489,
X    7568,
X    7643,
X    7712,
X    7778,
X    7838,
X    7895,
X    7946,
X    7992,
X    8034,
X    8071,
X    8103,
X    8130,
X    8152,
X    8169,
X    8182,
X    8189,
X    8192,
X    8189,
X    8182,
X    8169,
X    8152,
X    8130,
X    8103,
X    8071,
X    8034,
X    7992,
X    7946,
X    7895,
X    7839,
X    7778,
X    7713,
X    7643,
X    7568,
X    7489,
X    7405,
X    7317,
X    7224,
X    7127,
X    7027,
X    6921,
X    6811,
X    6697,
X    6579,
X    6458,
X    6333,
X    6203,
X    6070,
X    5933,
X    5793,
X    5649,
X    5501,
X    5351,
X    5197,
X    5040,
X    4880,
X    4717,
X    4551,
X    4383,
X    4212,
X    4038,
X    3862,
X    3683,
X    3502,
X    3320,
X    3135,
X    2949,
X    2760,
X    2570,
X    2378,
X    2185,
X    1991,
X    1795,
X    1599,
X    1400,
X    1202,
X    1003,
X    803,
X    603,
X    403,
X    201,
X    0,
X    -199,
X    -401,
X    -602,
X    -801,
X    -1001,
X    -1200,
X    -1400,
X    -1597,
X    -1794,
X    -1989,
X    -2183,
X    -2377,
X    -2569,
X    -2759,
X    -2947,
X    -3134,
X    -3318,
X    -3502,
X    -3682,
X    -3860,
X    -4037,
X    -4210,
X    -4381,
X    -4550,
X    -4716,
X    -4879,
X    -5038,
X    -5196,
X    -5350,
X    -5500,
X    -5648,
X    -5791,
X    -5932,
X    -6069,
X    -6202,
X    -6331,
X    -6457,
X    -6578,
X    -6696,
X    -6810,
X    -6920,
X    -7026,
X    -7127,
X    -7224,
X    -7317,
X    -7404,
X    -7489,
X    -7567,
X    -7642,
X    -7712,
X    -7778,
X    -7838,
X    -7894,
X    -7946,
X    -7992,
X    -8034,
X    -8071,
X    -8103,
X    -8130,
X    -8152,
X    -8169,
X    -8182,
X    -8189,
X    -8192,
X    -8189,
X    -8182,
X    -8169,
X    -8152,
X    -8130,
X    -8103,
X    -8071,
X    -8034,
X    -7992,
X    -7947,
X    -7895,
X    -7839,
X    -7779,
X    -7713,
X    -7643,
X    -7568,
X    -7489,
X    -7406,
X    -7317,
X    -7225,
X    -7128,
X    -7027,
X    -6921,
X    -6812,
X    -6698,
X    -6580,
X    -6458,
X    -6333,
X    -6203,
X    -6071,
X    -5934,
X    -5793,
X    -5650,
X    -5502,
X    -5351,
X    -5197,
X    -5041,
X    -4880,
X    -4717,
X    -4552,
X    -4383,
X    -4212,
X    -4038,
X    -3862,
X    -3684,
X    -3503,
X    -3321,
X    -3135,
X    -2949,
X    -2761,
X    -2570,
X    -2379,
X    -2186,
X    -1992,
X    -1796,
X    -1599,
X    -1401,
X    -1203,
X    -1004,
X    -804,
X    -603,
X    -403,
X    -202
X};
X
X
X/*
X** table for computing inverse tangent values
X*/
X
X
Xlong iatan[] = {
X0,
X201,
X402,
X604,
X806,
X1010,
X1215,
X1421,
X1629,
X1839,
X2051,
X2267,
X2485,
X2706,
X2931,
X3160,
X3393,
X3631,
X3874,
X4123,
X4378,
X4640,
X4910,
X5187,
X5473,
X5769,
X6075,
X6393,
X6723,
X7066,
X7424,
X7799,
X8192,
X8604,
X9038,
X9496,
X9981,
X10497,
X11045,
X11631,
X12260,
X12936,
X13667,
X14460,
X15326,
X16274,
X17320,
X18480,
X19777,
X21236,
X22895,
X24797,
X27005,
X29602,
X32704,
X36480,
X41183,
X47211,
X55225,
X66418,
X83174,
X111056,
X166751,
X333705
X};
X
X#include <X11/Xlib.h>
X#include "defs.h"
X
Xunsigned char iatan2(y, x)
Xint x, y;
X{
X  int bottom, top, i;
X  long z, scaled_y;
X
X  scaled_y = y << TRIGSCALE;
X  if (x == 0) i = (y >= 0 ? 64 : 192);
X  else {
X    z = abs(scaled_y/x);
X
X#ifdef DEBUG
X    printf("Looking for closest table value to %ld\n", z);
X#endif DEBUG
X
X    bottom = 0;
X    top = sizeof(iatan)/sizeof(long) - 1;
X
X/*-------------------------------------------------------------------------
X * Loop Invariant: top - bottom > 1    &&   iatan[bottom] < z <= iatan[top]
X * 
X * At end of loop this guarantees:
X * top-bottom <= 1 && top-prev_bottom > 1  ==> top-bottom = 1
X * Also iatan[bottom] < z <= iatan[top].  So we will return the closer of
X * these two values.
X *-------------------------------------------------------------------------
X */
X    while (top-bottom > 1) {
X      i = bottom + ((top-bottom)>>1);
X      if (iatan[i] < z) bottom = i;
X      else top = i;
X    }
X
X    /* Choose the closer of the two values */
X    i = (abs(iatan[top] - z) < abs(iatan[bottom] - z)) ? top : bottom;
X  } /* else */
X 
X#ifdef DEBUG
X      printf("original i: %d; ", i);
X#endif DEBUG
X  if (y == 0) i = (x >= 0) ? 0 : 128;
X  else if (x < 0 && y > 0) i = 128-i;
X  else if (x < 0 && y < 0) i += 128;
X  else if (x > 0 && y < 0) i = 256-i;
X  
X#ifdef DEBUG
X  printf("iatan2(%d, %d) = %d\n", y, x, i);
X#endif DEBUG
X
X  return(i);
X}
X
X/*
X * The isin and icos routines in trigtab.c are made to work in the obscure
X * coordinate system used by xtrek (angles measured from the positive y axis).
X * This routine snags out 1/4 of the isin table and uses it to produce
X * values of the sin function from the normal coordinate system.  This
X * has the advantage of making things like the law of sines work.
X */
Xint
Xnormal_isin(in_angle)
Xunsigned char in_angle;
X{
X  int minus = 1;
X  unsigned char angle = in_angle;
X
X  /* sin(a) = -sin(a-pi) */
X  if (angle > 128) {
X    angle = angle - 128;
X    minus *= -1;
X  }
X  /* sin(a) = sin(pi-a) */
X  if (angle > 64) {
X    angle = 128 - angle;
X  }
X
X  angle = angle + 64; /* stupid isin table is broken */
X  return(isin[angle]);
X}
X
X
X
X
END_OF_trigtab.c
if test 7990 -ne `wc -c <trigtab.c`; then
    echo shar: \"trigtab.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f xtrek_ship.man -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"xtrek_ship.man\"
else
echo shar: Extracting \"xtrek_ship.man\" \(10032 characters\)
sed "s/^X//" >xtrek_ship.man <<'END_OF_xtrek_ship.man'
X.\"static char sccsid[] = "@(#)xtrek_ship.man	3.1";
X.TH XTREK_SHIP 6 "08 Mar 1989"
X.SH NAME
Xxtrek_ship - Ship customization for xtrek(6)
X.SH SYNOPSIS
X.B
Xxtrek.ship:
X[ acdefgmprstvwxACDEFGMPRSTVWX ] ...
X.SH DESCRIPTION
X.IR Xtrek (6)
Xis a multi-player game of galactic warfare based on the Star
XTrek universe.
X.PP
XThe following describes the customization of ships allowed
Xby specifying the
X.B ship
Xdefault in your
X.I \&.Xdefaults
Xfile.
XCustomization is done by decreasing your ship's
Xabilities in one area, in order to increase them in another
Xarea.
XThe effect of one Unit of Customization (UoC) is
Xdescribed below for each ability.
X.PP
XThe
X.B ship
Xdefault specifies your ship customization as a list of
Xupper- and lower-case letters.
XUpper-case letters add one
XUoC to the associated abilities, while lower-case letters
Xsubtract one UoC from the associated abilities.
X.PP
XStarting
X.IR xtrek (6)
Xwith a ``-n name'' option will force it to use the
X.I name
Xdefault instead of the
X.B ship
Xdefault.
XThis can be useful for keeping several ship
Xdescriptions available, selecting the desired ship when
Xstarting
X.IR xtrek .
X.PP
XReasonable limits are made on the modifications allowed.
XOne general limitation is that the number of upper-case
Xletters cannot exceed the number of lower-case letters.
XEach ability will also have limitations listed.
X.SH ABILITIES
X.PP
XThe various ship types start out with differing capabilities.
XHere is a table of the defaults:
X.nf
X
X
X       Ability       Federation     Romulan      Klingon       Orion
X    Army Transport       10            14           10            6
X    Cloaking Cost        30            20           30           30
X  Heat Dissipation     2, 5          6, 3         2, 5         1, 7
X Engine Efficiency       20            25           20           15
X    Fuel Capacity     10000         20000        10000         7500
X   Fuel Generation       12            10           12           14
X   Maneuverability        2             1            2            4
X    Phaser Size        2500          3125         2500         2000
X    Repair Rate         100           150          100          100
X   Shield Strength      100           125          100          100
X    Torpedo Size        450           900          450          250
X  Torpedo Velocity       12            18           12           18
X    Warp Engines          9             7            9           11
X    Ship Size           100           100          100          100
X
X.fi
X.PP
XHere are the abilities, and their associated letters.
XThe effect of subtracting a UoC is listed in parenthesis.
X.TP 5
X.IB "Army Transport" \ a/A
XThe default ship can carry a maximum number of armies as listed in
Xthe table.
XEach UoC increases (decreases) the maximum capacity of the
Xship by 4 armies.
XYou cannot decrease this by more than 2 UoC.
X.TP 5
X.IB "Cloaking Cost" \ C
XCloaking costs start at the base value listed in the table above.
XEach UoC lowers
X(raises) the cost for your ship by 10
Xfuel units, within an allowable range of 0-30 fuel units.
XThis cost is then multiplied by your current speed and then subtracted
Xfrom your fuel.
XIt costs more to be cloaked if you are travelling faster.
XNOTE: There is no 'c' option.
X.TP 5
X.IB "Heat Dissipation" \ d/D
XThe table above lists two numbers, the first represents weapon heat
Xdissipation and the second engine heat dissipation.
XEach UoC raises (lowers)
Xyour ship's heat dissipation by 1 heat unit, with a
Xminimum heat dissipation of 0 heat units.
XBoth values are affected equally for each UoC.
X.TP 5
X.IB "Engine Efficiency" \ e/E
XIn regards to engines, you use fuel at the following rate:
X.nf
X
X   amount = warpcost * speed
X   if (shields are up)
X      amount = amount * 2
X   amount = amount + warpcost * number of armies on board
X
X.fi
XStarting with the "Engine Efficiency" value in the table above,
Xthe resulting warpcost is calculated as follows:
X.nf
X
X   warpcost = ee / (5 + UoC)
X
X.fi
XThis translates into the
Xfollowing fuel costs (shown for Federation and Klingon ships):
X.nf
X      UoC Allocation    Starting "EE"      Warp Cost
X	   -4               20                20
X	   -3               20                10
X	   -2               20                6
X	   -1               20                5
X	    0               20                4
X	    1               20                3
X	    2               20                2
X	    3               20                2
X	    4               20                2
X	    5               20                2
X	    6               20                1
X
X.fi
X.TP 5
X.IB "Fuel Capacity" \ f/F
XUn-changed ships have fuel capacities as shown in the beginning table.
XEach UoC
Xraises (lowers) your ship's capacity by 2,500 fuel units.
X.TP 5
X.IB "Fuel Generation" \ g/G
XShips generate fuel as listed in the beginning table.
XEach UoC raises
X(lowers) the fuel generation rate by 2, with a
Xminimum rate of 0 fuel units.
X.TP 5
X.IB "Maneuverability" \ m/M
XThis affects how quickly your ship can change directions
Xwhile moving.
XEach UoC allows your ship to maneuver as well
Xas a normal ship traveling one warp factor slower (faster).
XAt the minimum setting (-5 UoC), warp 1 behaves like warp 6
Xnormally does and navagation requires nearly stopping before
Xturning.
XThe beginning table numbers merely reflect that Federation and
XKlingon ships outmaneuver Romulan ships by a factor of 2:1.
XAnd Orion ships outmaneuver Romulan ships by a factor of 4:1.
X.TP 5
X.IB "Phaser Size" \ p/P
XNormal phasers
Xhave 4 times the value listed in the beginning table for a "size".
XEach UoC increases (decreases)
Xthis by another unit.
XFor base Federation and Klingon ships, this results in a size of
X10000 units, for Romulans a size of 12500, and Orions get an 8000.
XThe damage inflicted by phasers is
Xthe square root of the Phaser Size.
XThe minimum damage is 0 (you've scuttled your phasers).
XPhaser range, fuel required, and weapons heating
Xare proportional to the damage inflicted by the phasers.
XThe following chart correlates damage to the number of UoC
Xallocated to Phaser Size, for Federation and Klingon ships:
X
X.nf
X
X	Point Blank	UoC Allocation
X	Phaser Damage	  Required
X
X	     0		    -4
X	    50		    -3
X	    70		    -2
X	    86		    -1
X	   100		     0
X	   111		     1
X	   122		     2
X	   132		     3
X	   141		     4
X	   158		     6
X	   173		     8
X	   200		    12
X	   223		    16
X.fi
X.TP 5
X.IB "Repair Rate" \ r/R
XShips base repair rate is listed in the beginning table.
XEach UoC increases (decreases) this by 50 damage units, with
Xa minimum repair rate of 0 damage units.
X.TP 5
X.IB "Shield Strength" \ s/S
XShield strength of normal ships is listed in the beginning table.
XEach UoC increases (decreases) this by 25 damage units, with
Xa minimum strength of 0 (no shields at all--not
Xrecommended).
X.TP 5
X.IB "Torpedo Size" \ t/T
XNormal photon torpedoes
Xhave 2 times the value listed in the beginning table for a "size".
XEach UoC increases (decreases)
Xthis by another unit.
XFor base Federation and Klingon ships, this results in a size of
X900 units, for Romulans a size of 1800, and Orions get a 500.
XThe damage inflicted by torpedoes
Xis the square root of the Torpedo Size.
XThe minimum damage is 0 (you've scuttled your torpedoes).
XThe fuel required and weapons heating
Xare proportional to Torpedo Size.
XThe following chart correlates damage to the number of UoC
Xallocated to Torpedo Size, for Federation and Klingon ships:
X
X.nf
X
X	Point Blank	UoC Allocation
X	Torpedo Damage	  Required
X
X	      0		     -2
X	     21		     -1
X	     30		      0
X	     36		      1
X	     42		      2
X	     47		      3
X	     51		      4
X	     60		      6
X	     67		      8
X	     79		     12
X	     90		     16
X.fi
X.TP 5
X.IB "Torpedo Velocity" \ v/V
XNormal photon torpedoes travel at a warp factor as listed in the
Xbeginning table.
XEach UoC
Xincreases (decreases) the torpedo velocity by 6 warp
Xfactors, with a minimum torpedo velocity of warp 0 (your
Xtorpedo launchers simply drop them in space as mines).
XThe
Xrange of torpedoes, fuel required to fire them, and heat generated
Xby them are proportional to their velocity and damage they cause.
X.TP 5
X.IB "Warp Engines" \ w/W
XThe beginning table lists the maximum warp factor for each ship type.
XEach UoC
Xincreases (decreases) the maximum by two warp factors, with a
Xminimum limit of warp 1.
X.TP 5
X.IB "Ship Size" \ x/X
XThe beginning table show how many damage units each type of
Xdefault ship can withstand.
XEach UoC increases (decreases) the
Xstrength of the ship by 15 damage units, with a minimum Ship
XSize withstanding 25 damage units.
X.SH NOTE
XIt may be helpful to some to think of ship customization in
Xthe following manner.
XYou are given a ship hull, and are
Xallocated a base number of UoC with which to convert this hull into a
Xviable starship.
XThe default ship configuration allocates
Xthese UoC to create a general purpose ship.
XObviously, some
Xsystems (eg, Heat Dissipation, Fuel Generation) must have
Xsome UoC allocated to them, while others are less essential
X(eg, Army Transport).
X.SH EXAMPLES
X.TP 8
X.B
Xxtrek.ship: mmmPPP
XThis ship has -3 UoC for Maneuverability, and +3 UoC Phaser
XSize.
X.TP 8
X.B
Xxtrek.ship: agwCCC
XThis ship has -1 UoC each for Army Transport, Fuel Generation,
Xand Warp Engines, but with +3 UoC Cloaking Cost,
Xhe is not an easy target.
X.TP 8
X.B
Xxtrek.torper: appppwDGGVTT
XThis ship has -1 UoC Army Transport,
X-4 UoC Phaser Size, and -1 UoC Warp Speed.
XBut with +1 UoC Heat Dissipation, +2 UoC Fuel Generation, +1 UoC Torpedo 
XVelocity and +2 UoC Torpedo Size, they'll keep you dodging photon
Xtorpedoes.
X.TP 8
X.B
Xxtrek.ship: aattvvEEMMPP
XThis ship has -2 UoC for Army Transport,
X-2 UoC
XTorpedo Size, and -2 UoC Torpedo
XVelocity.
XHowever, this ship has +2 UoC
XEngine Efficiency, +2
XUoC Maneuverability, and +2 UoC for Phaser Size.
XIt's a good fighter.
X.SH "SEE ALSO"
Xxtrek(6)
X.SH DIAGNOSTICS
XIf a specified ship customization is invalid, xtrek will
Xsilently ignore the customization and you'll get the default ship type.
X.SH BUGS
XThe customization parameters need to be balanced.
X
XLetters other than those understood are silently ignored.
X
X
END_OF_xtrek_ship.man
if test 10032 -ne `wc -c <xtrek_ship.man`; then
    echo shar: \"xtrek_ship.man\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 4 \(of 11\).
cp /dev/null ark4isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 11 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0

dan
----------------------------------------------------
O'Reilly && Associates   argv@sun.com / argv@ora.com
Opinions expressed reflect those of the author only.