v11i099: Another Star Trek Game, Part13/14
pfuetz at agd.fhg.de
pfuetz at agd.fhg.de
Tue Feb 26 15:16:32 AEST 1991
Submitted-by: pfuetz at agd.fhg.de
Posting-number: Volume 11, Issue 99
Archive-name: xstrek/part13
#!/bin/sh
# To unshare, sh or unshar this file
echo xstrek/strek_main.c 1>&2
sed -e 's/^X//' > xstrek/strek_main.c <<'E!O!F! xstrek/strek_main.c'
X/* strek_main.f -- translated by f2c (version of 19 December 1990 16:50:21).
X You must link the resulting object file with the libraries:
X -lF77 -lI77 -lm -lc (in that order)
X*/
X
X#include "f2c.h"
X
X/* Common Block Declarations */
X
Xstruct {
X char means[90];
X} key_defs__;
X
X#define key_defs__1 key_defs__
X
X/* Table of constant values */
X
Xstatic integer c__0 = 0;
Xstatic integer c__3 = 3;
Xstatic integer c__1 = 1;
Xstatic real c_b38 = (float)1.;
Xstatic real c_b39 = (float).6;
Xstatic integer c__7 = 7;
X
X/* Main program */ MAIN__()
X{
X /* Initialized data */
X
X static integer index[10] = { 1,2,3,4,5,5,5,6,6,6 };
X static integer cm[3] = { 0,0,0 };
X static integer cs[3] = { 0,0,0 };
X static integer pc[3] = { 3,3,3 };
X static real rot_azm__[10] = { (float)0.,(float)-2.,(float)2.,(float)0.,(
X float)0.,(float)-1.,(float)1.,(float)0.,(float)0.,(float)0. };
X static real rot_ang__[10] = { (float)2.,(float)0.,(float)0.,(float)-2.,(
X float)1.,(float)0.,(float)0.,(float)-1.,(float)0.,(float)0. };
X static real rot_cost__[10] = { (float).25,(float).25,(float).25,(float)
X .25,(float).25,(float).25,(float).25,(float).25,(float)0.,(float)
X .25 };
X static logical rotate = TRUE_;
X static integer r_index__ = 9;
X static real photon_tr__[6] = { (float)900.,(float)900.,(float)900.,(float)
X 900.,(float)900.,(float)900. };
X static real xc = (float)0.;
X static shortint key_set__[16] = { 65535,65535,65535,65535,65535,65535,
X 65535,65535,65535,65535,65535,65535,65535,65535,65535,65535 };
X static real yc = (float)-50.;
X static real zc = (float)0.;
X static real azm = (float)0.;
X static real angle = (float)0.;
X static integer photons = 20;
X static real speed = (float)0.;
X static real energy = (float)1e3;
X static real damage = (float)0.;
X static real d_pct__[6] = { (float)1.,(float)1.,(float)1.,(float)1.,(float)
X 1.,(float)1. };
X static real odamage[10] = { (float)0.,(float)0.,(float)0.,(float)0.,(
X float)0.,(float)0.,(float)0.,(float)0.,(float)0.,(float)0. };
X static integer ship_k__ = 0;
X static real tr_cost__[10] = { (float)0.,(float).4,(float)2.,(float)2.,(
X float)1.,(float)1.,(float)1.,(float)1.,(float)1.,(float)1. };
X static real obx[10] = { (float)0. };
X static real oby[10] = { (float)0. };
X static real obz[10] = { (float)0. };
X static real ospeed[10] = { (float)0.,(float)0.,(float)0.,(float)0.,(float)
X 0.,(float)0.,(float)0.,(float)0.,(float)0.,(float)0. };
X static real oangle[10] = { (float)0.,(float)0.,(float)0.,(float)0.,(float)
X 0.,(float)0.,(float)0.,(float)0.,(float)0.,(float)0. };
X static real oazm[10] = { (float)0.,(float)0.,(float)0.,(float)0.,(float)
X 0.,(float)0.,(float)0.,(float)0.,(float)0.,(float)0. };
X static integer score = 0;
X static real maxd[9] = { (float)5.,(float)0.,(float)0.,(float)12.5,(float)
X 12.5,(float)12.5,(float)12.5,(float)12.5,(float)12.5 };
X static real value[9] = { (float)-200.,(float)300.,(float)300.,(float)0.,(
X float)0.,(float)0.,(float)0.,(float)0.,(float)0. };
X static integer ship_r__ = 0;
X static real sa = (float)0.;
X static real ca = (float)1.;
X static real sp = (float)0.;
X static real cp = (float)1.;
X static real rox[10] = { (float)0.,(float)0.,(float)0.,(float)0.,(float)0.,
X (float)0.,(float)0.,(float)0.,(float)0.,(float)0. };
X static real roy[10] = { (float)0.,(float)0.,(float)0.,(float)0.,(float)0.,
X (float)0.,(float)0.,(float)0.,(float)0.,(float)0. };
X static real roz[10] = { (float)0.,(float)0.,(float)0.,(float)0.,(float)0.,
X (float)0.,(float)0.,(float)0.,(float)0.,(float)0. };
X static logical scan = TRUE_;
X static logical tract = TRUE_;
X static logical phase = TRUE_;
X static integer ship_n__ = 0;
X static logical phase_d__ = FALSE_;
X static logical tract_ob__ = FALSE_;
X static integer scan_ob__ = 1;
X static integer tr_object__ = 0;
X static logical object[10] = { TRUE_,FALSE_,FALSE_,FALSE_,FALSE_,FALSE_,
X FALSE_,FALSE_,FALSE_,FALSE_ };
X static logical plot[10] = { FALSE_,FALSE_,FALSE_,FALSE_,FALSE_,FALSE_,
X FALSE_,FALSE_,FALSE_,FALSE_ };
X static logical lock_on__ = FALSE_;
X static logical refresh = TRUE_;
X static char dam_rating__[10*3+1] = "light moderate heavy ";
X static char t_message__[80*3+1] = "Which should I lock onto captain? \
X Input number of object to lock, \
X any other input = No lock on \
X ";
X static integer dock_n__ = 0;
X static char p_message__[80*3+1] = "Phaser control \
X Input number of object to lock ph\
Xasers on, any other input = No phaser l\
Xock on ";
X static char e_message__[80*3+1] = "Photon Torpedo Trigger Radius Options\
X 1 = 15 2 = 20 3 = 25 4 = 30 5\
X = 35 6 = 40 Enter option. \
X ";
X static char r_message__[80*3+1] = "Statistics for \
X Klingons Romulans Nemians Nemi\
Xans Docked Score Total \
X ";
X static char a_message__[80*3+1] = " \
X \
X \
X ";
X static char b_message__[80*3+1] = " \
X \
X \
X ";
X static char k_message__[80*3+1] = " \
X \
X \
X ";
X static char ap_message__[80*3+1] = "Ship hit by enemy photon! \
X \
X ";
X static char d_message__[80*6+1] = " \
X Nemian freighter destroyed. \
X Enemy spacecraft destroyed. \
X Second enemy spacecraft d\
Xestroyed. Enemy photon torpedo \
Xdestroyed. Photon torpedo de\
Xstroyed. ";
X static char l_message__[80*6+1] = "Navigation lock on star base. \
X Navigation lock on Nemian freight\
Xer. Navigation lock on enemy spac\
Xecraft. Navigation lock on second\
X enemy spacecraft. ";
X static struct {
X char fill_1[80];
X char e_2[240];
X char fill_3[160];
X } equiv_183 = { {0}, {'N', 'e', 'm', 'i', 'a', 'n', ' ', 'f', 'r',
X 'e', 'i', 'g', 'h', 't', 'e', 'r', ' ', 'h', 'i', 't', ' ',
X 'b', 'y', ' ', 'p', 'h', 'o', 't', 'o', 'n', ' ', 't', 'o',
X 'r', 'p', 'e', 'd', 'o', '.', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'E',
X 'n', 'e', 'm', 'y', ' ', 's', 'h', 'i', 'p', ' ', 'h', 'i',
X 't', ' ', 'b', 'y', ' ', 'p', 'h', 'o', 't', 'o', 'n', ' ',
X 't', 'o', 'r', 'p', 'e', 'd', 'o', '.', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'E', 'n', 'e', 'm', 'y',
X ' ', 's', 'h', 'i', 'p', ' ', 'h', 'i', 't', ' ', 'b', 'y',
X ' ', 'p', 'h', 'o', 't', 'o', 'n', ' ', 't', 'o', 'r', 'p',
X 'e', 'd', 'o', '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' '} };
X
X#define ph_message__ ((char *)&equiv_183)
X
X static struct {
X char fill_1[80];
X char e_2[400];
X } equiv_184 = { {0}, {'N', 'e', 'm', 'i', 'a', 'n', ' ', 'f', 'r',
X 'e', 'i', 'g', 'h', 't', 'e', 'r', ' ', 'h', 'i', 't', ' ',
X 'b', 'y', ' ', 'p', 'h', 'a', 's', 'e', 'r', ' ', 'f', 'i',
X 'r', 'e', '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'E',
X 'n', 'e', 'm', 'y', ' ', 's', 'h', 'i', 'p', ' ', 'h', 'i',
X 't', ' ', 'b', 'y', ' ', 'p', 'h', 'a', 's', 'e', 'r', ' ',
X 'f', 'i', 'r', 'e', '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'E', 'n', 'e', 'm', 'y',
X ' ', 's', 'h', 'i', 'p', ' ', 'h', 'i', 't', ' ', 'b', 'y',
X ' ', 'p', 'h', 'a', 's', 'e', 'r', ' ', 'f', 'i', 'r', 'e',
X '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', 'E', 'n', 'e', 'm', 'y', ' ', 'P', 'h', 'o',
X 't', 'o', 'n', ' ', 't', 'o', 'r', 'p', 'e', 'd', 'o', ' ',
X 'h', 'i', 't', ' ', 'b', 'y', ' ', 'p', 'h', 'a', 's', 'e',
X 'r', ' ', 'f', 'i', 'r', 'e', '.', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'P',
X 'h', 'o', 't', 'o', 'n', ' ', 't', 'o', 'r', 'p', 'e', 'd',
X 'o', ' ', 'h', 'i', 't', ' ', 'b', 'y', ' ', 'p', 'h', 'a',
X 's', 'e', 'r', ' ', 'f', 'i', 'r', 'e', '.', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' '} };
X
X#define ps_message__ ((char *)&equiv_184)
X
X static struct {
X char fill_1[80];
X char e_2[80];
X char fill_3[160];
X char e_4[1040];
X } equiv_185 = { {0}, {'T', 'r', 'a', 'c', 't', 'o', 'r', ' ', 'b',
X 'e', 'a', 'm', ' ', 'o', 'n', ' ', 'N', 'e', 'm', 'i', 'a',
X 'n', ' ', 'f', 'r', 'e', 'i', 'g', 'h', 't', 'e', 'r', ' ',
X 'd', 'r', 'o', 'p', 'p', 'e', 'd', '.', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, {0}, {
X 'T', 'r', 'a', 'c', 't', 'o', 'r', ' ', 'b', 'e', 'a', 'm',
X ' ', 'o', 'n', ' ', 'e', 'n', 'e', 'm', 'y', ' ', 'p', 'h',
X 'o', 't', 'o', 'n', ' ', 'd', 'r', 'o', 'p', 'p', 'e', 'd',
X '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'T', 'r', 'a', 'c',
X 't', 'o', 'r', ' ', 'b', 'e', 'a', 'm', ' ', 'o', 'n', ' ',
X 'p', 'h', 'o', 't', 'o', 'n', ' ', 't', 'o', 'r', 'p', 'e',
X 'd', 'o', ' ', 'd', 'r', 'o', 'p', 'p', 'e', 'd', '.', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', 'T', 'r', 'a', 'c', 't', 'o', 'r', ' ',
X 'b', 'e', 'a', 'm', ' ', 'l', 'o', 'c', 'k', ' ', 'o', 'n',
X ' ', 'd', 'r', 'o', 'p', 'p', 'e', 'd', '.', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X 'P', 'h', 'o', 't', 'o', 'n', ' ', 't', 'o', 'r', 'p', 'e',
X 'd', 'o', ' ', 'l', 'a', 'u', 'n', 'c', 'h', 'e', 'd', ' ',
X 's', 'i', 'r', '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'I', '\'', 'm', ' ',
X 'g', 'i', 'v', 'i', 'n', 'g', ' ', 'i', 't', ' ', 'a', 'l',
X 'l', ' ', 's', 'h', 'e', '\'', 's', ' ', 'g', 'o', 't', ' ',
X 'c', 'a', 'p', 't', 'a', 'i', 'n', '.', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', 'S', 'c', 'a', 'n', 'n', 'e', 'r', ' ',
X 'l', 'o', 'c', 'k', ' ', 'o', 'n', ' ', 'l', 'o', 's', 't',
X '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X 'N', 'e', 'm', 'i', 'a', 'n', ' ', 'f', 'r', 'e', 'i', 'g',
X 'h', 't', 'e', 'r', ' ', 'd', 'o', 'c', 'k', 'e', 'd', ' ',
X 'a', 't', ' ', 's', 't', 'a', 'r', ' ', 'b', 'a', 's', 'e',
X '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'S', 'c', 'o', 'r',
X 'e', ' ', 'f', 'o', 'r', ' ', 'd', 'e', 's', 't', 'r', 'o',
X 'y', 'i', 'n', 'g', ' ', 's', 'h', 'i', 'p', ':', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', 'G', 'o', 'o', 'd', ' ', 'g', 'o', 'i',
X 'n', 'g', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X 'S', 'c', 'a', 'n', 'n', 'e', 'r', 's', ' ', 'r', 'e', 'p',
X 'o', 'r', 't', ' ', 't', 'h', 'a', 't', ' ', 't', 'h', 'e',
X ' ', 'd', 'a', 'm', 'a', 'g', 'e', ' ', 'w', 'a', 's', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'R', 'e', 'p', 'a',
X 'i', 'r', ' ', 'p', 'a', 'r', 't', 'i', 'e', 's', ' ', 'r',
X 'e', 'p', 'o', 'r', 't', ' ', 't', 'h', 'a', 't', ' ', 't',
X 'h', 'e', ' ', 'd', 'a', 'm', 'a', 'g', 'e', ' ', 'w', 'a',
X 's', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', 'P', 'o', 'i', 'n', 't', 's', ' ', 'l',
X 'o', 's', 't', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X 'I', 't', '\'', 's', ' ', 'y', 'o', 'u', 'r', ' ', 'j', 'o',
X 'b', ' ', 't', 'o', ' ', 'd', 'e', 'f', 'e', 'n', 'd', ' ',
X 't', 'h', 'e', ' ', 'N', 'e', 'm', 'i', 'a', 'n', 's', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '} };
X
X#define s_message__ ((char *)&equiv_185)
X
X static char sc_message__[80*6+1] = "Scanner locked on starbase. \
X Scanner locked on Nemian freight\
Xer. Scanner locked on enemy ship\
X. Scanner locked on second\
X enemy ship. Scanner locked on en\
Xemy photon. Scanner locked o\
Xn photon torpedo. ";
X static struct {
X char fill_1[80];
X char e_2[80];
X char fill_3[160];
X char e_4[160];
X } equiv_186 = { {0}, {'N', 'e', 'm', 'i', 'a', 'n', ' ', 'f', 'r',
X 'e', 'i', 'g', 'h', 't', 'e', 'r', ' ', 'i', 'n', ' ', 't',
X 'r', 'a', 'c', 't', 'o', 'r', ' ', 'b', 'e', 'a', 'm', '.',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, {0}, {
X 'E', 'n', 'e', 'm', 'y', ' ', 'p', 'h', 'o', 't', 'o', 'n',
X ' ', 'i', 'n', ' ', 't', 'r', 'a', 'c', 't', 'o', 'r', ' ',
X 'b', 'e', 'a', 'm', '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'P', 'h', 'o', 't',
X 'o', 'n', ' ', 't', 'o', 'r', 'p', 'e', 'd', 'o', ' ', 'i',
X 'n', ' ', 't', 'r', 'a', 'c', 't', 'o', 'r', ' ', 'b', 'e',
X 'a', 'm', '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
X ' ', ' ', ' ', ' '} };
X
X#define u_message__ ((char *)&equiv_186)
X
X static char sl_message__[80*3+1] = "Game put on hold. \
X STREK will not start again until\
X another key is hit. \
X ";
X static integer waited = 0;
X static integer turns_wait__ = 0;
X
X /* System generated locals */
X integer i__1, i__2, i__3, i__4;
X real r__1, r__2, r__3;
X
X /* Builtin functions */
X /* Subroutine */ int s_copy();
X integer s_wsfi(), do_fio(), e_wsfi();
X double sqrt(), sin(), cos(), r_sign(), atan();
X integer s_rsfi(), e_rsfi();
X /* Subroutine */ int s_stop();
X integer i_nint();
X
X /* Local variables */
X extern /* Subroutine */ int strek_assess_damage__(),
X strek_photon_damage__(), strek_no_energy__();
X static real seed;
X extern /* Subroutine */ int rand_();
X static integer rate;
X extern /* Subroutine */ int gprsetdrawvalue_();
X static integer item, l_object__;
X static real dist;
X static char key_file__[256];
X static real distance[30] /* was [3][10] */, razm[3], tazm;
X static integer type, photon_c__[6];
X static doublereal turn;
X static logical new_ship__;
X extern /* Subroutine */ int strek_interpret_key__(), timewait_();
X static doublereal duration;
X extern /* Subroutine */ int strek_nemian__();
X static real timerelative;
X static integer i, j, k;
X static real check, brake[3], gprkeystroke;
X extern /* Subroutine */ int strek_move_enemy__();
X static shortint clock[3];
X static integer nav_c__;
X extern logical gprcondeventwait_();
X static shortint c_pos__[2];
X static char nick_name__[10], capt_name__[10];
X static integer ph_object__;
X static char t_key__[1];
X static shortint timer[3];
X static char ship_name__[30];
X static real pro_x__[10], pro_y__[10], trazm;
X static integer cum_score__;
X static char user_name__[10];
X static logical found, kling[3];
X extern /* Subroutine */ int timeclock_(), calfloatclock_();
X static real s1, s2, s3, t1, t2, t3, t4, ran_store__[10], t5, t6;
X extern /* Subroutine */ int strek_number_objects__(), strek_damage_info__(
X );
X static integer num_times__;
X static real tempx, tempy, tempz;
X static shortint font_3__, font_4__;
X extern /* Subroutine */ int strek_message__();
X static integer pos_store__[20] /* was [10][2] */;
X extern /* Subroutine */ int strek_scanner__(), strek_x_hairs__(),
X strek_place_enemy__(), strek_klingon__(), strek_phaser_fire__(),
X strek_screen_init__();
X static real dx, dy, dz, rangle[3];
X extern /* Subroutine */ int strek_startup__();
X static real tangle, orange[10], xt[10], yt[10];
X static shortint center[2];
X static integer trange;
X static real zt[10];
X extern /* Subroutine */ int strek_enemy_setup__(), strek_photon_1__(),
X strek_photon_2__(), strek_photon_3__(), strek_photon_4__(),
X strek_photon_5__(), strek_photon_6__(), strek_dock__();
X static integer option;
X static real trdist;
X static integer last_score__, status;
X extern /* Subroutine */ int strek_find_free_ob__();
X static logical unobscured;
X static real xt1, yt1, zt1;
X extern /* Subroutine */ int strek_place_nemian__();
X static shortint event_type__;
X static real gprnoevent;
X extern /* Subroutine */ int strek_starbase__(), gprenableinput_(),
X strek_flashers__();
X static real coa[9];
X extern /* Subroutine */ int strek_update_panel__();
X static logical agr[3];
X static integer phase_c__;
X static real soa[9], cop[9];
X static char key[1];
X static doublereal elapsed;
X static integer txc, tyc, tzc;
X static real sop[9];
X extern /* Subroutine */ int strek_draw_phasers__();
X static integer bitmap_desc__;
X static real trangle, trx, try_, trz;
X static logical two;
X extern /* Subroutine */ int strek_romulan_1__(), strek_romulan_2__();
X static logical reverse;
X extern /* Subroutine */ int calgetlocaltime_();
X static integer num_forward__;
X
X /* Fortran I/O blocks */
X static icilist io___99 = { 0, a_message__+160, 0, "(a36,a10)", 80, 1 };
X static icilist io___100 = { 0, ap_message__+160, 0, "(a42,a10)", 80, 1 };
X static icilist io___111 = { 0, k_message__+80, 0, "(a27,f10.2)", 80, 1 };
X static icilist io___112 = { 0, k_message__+160, 0, "(a11,a10)", 80, 1 };
X static icilist io___113 = { 0, k_message__+80, 0, "(a13,f10.2)", 80, 1 };
X static icilist io___114 = { 0, k_message__+160, 0, "(a36,a10)", 80, 1 };
X static icilist io___150 = { 0, t_key__, 0, "(i1)", 1, 1 };
X static icilist io___153 = { 0, t_key__, 0, "(i1)", 1, 1 };
X static icilist io___155 = { 0, a_message__+160, 0, "(a36,a10)", 80, 1 };
X static icilist io___156 = { 0, t_key__, 0, "(i1)", 1, 1 };
X static icilist io___158 = { 0, key, 0, "(i1)", 1, 1 };
X static icilist io___160 = { 0, t_key__, 0, "(i1)", 1, 1 };
X static icilist io___161 = { 0, r_message__, 0, "(a15,a30)", 80, 1 };
X static icilist io___162 = { 0, r_message__+160, 0, "(i8,i10,i9,i16,2i7)",
X 80, 1 };
X
X
X
X/* *******************************************************************
X*/
X/* ***** *****
X*/
X/* ***** STAR TREK VERSION 3.0 *****
X*/
X/* ***** *****
X*/
X/* ***** written by *****
X*/
X/* ***** *****
X*/
X/* ***** Justin S. Revenaugh *****
X*/
X/* ***** *****
X*/
X/* ***** 7/87 *****
X*/
X/* ***** *****
X*/
X/* ***** Massachussetts Institute of Technology *****
X*/
X/* ***** Department of Earth, Atmospheric and Planetary Science *****
X*/
X/* ***** *****
X*/
X/* *******************************************************************
X*/
X
X/* STREK_MAIN is the main calling code for the STREK system. */
X/* It handles the database startup calls, graphics init call, */
X/* the screen update - resolve - key request sequence. */
X/* When the ship docks or dies it updates the database. */
X
X/* version 2.0 */
X
X/* % include '/sys/ins/base.ins.ftn' */
X/* % include '/sys/ins/gpr.ins.ftn' */
X/* % include '/sys/ins/smdu.ins.ftn' */
X/* % include '/sys/ins/time.ins.ftn' */
X/* % include '/sys/ins/cal.ins.ftn' */
X
X/* STREK declarations */
X
X
X/* real variables (all ship position data) */
X
X
X/* message strings */
X
X
X/* logical toggles for objects */
X
X
X/* key interpretation common */
X
X
X/* data for STREK */
X
X
X/* statement functions for converting angles to rads */
X/* and vice-versa */
X
X
X/* call STREK_STARTUP to init db and get ship info */
X
X strek_startup__(user_name__, capt_name__, nick_name__, ship_name__, &
X last_score__, &cum_score__, key_file__, &new_ship__, 10L, 10L,
X 10L, 30L, 256L);
X
X/* call STREK_SCREEN_INIT */
X
X strek_screen_init__(&bitmap_desc__, &font_3__, &font_4__);
X
X/* enable keystroke events */
X
X gprenableinput_(&gprkeystroke, key_set__, &status);
X
X/* startup info panels (4 passes to init everything) */
X
X for (j = 1; j <= 4; ++j) {
X i__1 = (integer) energy;
X i__2 = (integer) xc;
X i__3 = (integer) yc;
X i__4 = (integer) zc;
X strek_update_panel__(&c__0, &i__1, &photons, &phase, &tract_ob__, &
X i__2, &i__3, &i__4, &scan, &c__0, &c__0, &c__0, &c__0, &
X scan_ob__);
X/* L5: */
X }
X
X/* give an introductory message */
X
X s_copy(b_message__ + 80, "Welcome aboard sir, the bridge is all yours!",
X 80L, 44L);
X strek_message__(b_message__, &c__3, 80L);
X
X/* call clock to get a random number seed */
X
X calgetlocaltime_(clock);
X seed = (r__1 = clock[2] / (float)3.3e4, dabs(r__1));
X
X/* start turn timer */
X
X timeclock_(timer);
X calfloatclock_(timer, &elapsed);
X
X/* get a nemian */
X
X strek_place_nemian__(&xc, &yc, &zc, &obx[1], &oby[1], &obz[1], &oazm[1], &
X oangle[1], &ospeed[1], &seed);
X object[1] = TRUE_;
X odamage[1] = (float)0.;
X
X/* begin event driver loop */
X
XL10:
X
X/* check phaser availability */
X
X if (! phase && phase_d__) {
X ++phase_c__;
X if (phase_c__ > 40) {
X phase_d__ = FALSE_;
X phase = TRUE_;
X }
X }
X
X/* if nemian is getting too far away then refresh him */
X
X if (orange[1] > (float)9e6) {
X object[1] = FALSE_;
X }
X
X/* if there's no nemian then get one */
X
X if (! object[1]) {
X strek_place_nemian__(&xc, &yc, &zc, &obx[1], &oby[1], &obz[1], &oazm[
X 1], &oangle[1], &ospeed[1], &seed);
X object[1] = TRUE_;
X odamage[1] = (float)0.;
X
X/* check for nemian docking */
X
X } else if (tr_object__ == 1 && tract_ob__) {
X if (distance[0] < (float)900. && dabs(speed) <= (float)1.) {
X score += 500;
X s_copy(b_message__ + 80, s_message__ + 800, 80L, 80L);
X strek_message__(b_message__, &c__3, 80L);
X tract_ob__ = FALSE_;
X object[1] = FALSE_;
X ++dock_n__;
X }
X }
X
X/* check for photon proximity explosions */
X
X for (j = 4; j <= 9; ++j) {
X if (object[j]) {
X ++photon_c__[j - 4];
X if (photon_c__[j - 4] > 60) {
X object[j] = FALSE_;
X }
X if (j > 6) {
X for (i = 1; i <= 3; ++i) {
X if (object[i] && (distance[i + j * 3 - 1] <= photon_tr__[
X j - 4] && orange[j] > (float)1600.)) {
X object[j] = FALSE_;
X strek_photon_damage__(&distance[i + j * 3 - 1], &
X odamage[i], &seed, &type);
X s_copy(a_message__, ph_message__ + (index[i] - 1) *
X 80, 80L, 80L);
X s_wsfi(&io___99);
X do_fio(&c__1, s_message__ + 1040, 80L);
X do_fio(&c__1, dam_rating__ + (type - 1) * 10, 10L);
X e_wsfi();
X strek_message__(a_message__, &c__3, 80L);
X }
X/* L30: */
X }
X } else {
X
X/* check for nemian hits */
X
X if (object[1] && distance[j * 3] < photon_tr__[j - 4]) {
X if (! object[2] || distance[j * 3 + 1] > (float)900.) {
X if (! object[3] || distance[j * 3 + 2] > (float)900.)
X {
X object[j] = FALSE_;
X strek_photon_damage__(&distance[j * 3], &odamage[
X 1], &seed, &type);
X }
X }
X }
X
X/* check for player ship hits */
X
X if (orange[j] < photon_tr__[j - 4]) {
X if (! object[2] || distance[j * 3 + 1] > (float)225.) {
X if (! object[3] || distance[j * 3 + 2] > (float)225.)
X {
X object[j] = FALSE_;
X strek_photon_damage__(&orange[j], &damage, &seed,
X &type);
X s_wsfi(&io___100);
X do_fio(&c__1, s_message__ + 1120, 80L);
X do_fio(&c__1, dam_rating__ + (type - 1) * 10, 10L)
X ;
X e_wsfi();
X strek_message__(ap_message__, &c__3, 80L);
X }
X }
X }
X }
X }
X/* L20: */
X }
X
X/* if enemy ships are alive then move 'em */
X
X if (object[2] || object[3]) {
X for (j = 2; j <= 3; ++j) {
X if (object[j]) {
X strek_move_enemy__(&j, obx, oby, obz, oazm, oangle, ospeed, &
X xc, &yc, &zc, &azm, &angle, &speed, &agr[j - 1],
X object, &rox[j], &roy[j], &roz[j], odamage, &pc[j - 1]
X , distance, &kling[j - 1], &cm[j - 1], &cs[j - 1],
X orange, &razm[j - 1], &rangle[j - 1], &brake[j - 1], &
X damage, photon_c__, &phase_c__, pro_x__, pro_y__, &
X seed, center);
X }
X/* L50: */
X }
X } else if (waited > turns_wait__) {
X
X/* reset damage totals, pick ship type and aggression levels */
X
X strek_enemy_setup__(odamage, agr, kling, maxd, object, &seed, &two,
X pc);
X j = 2;
X k = 3;
X if (two) {
X strek_place_enemy__(&xc, &yc, &zc, &obx[j], &oby[j], &obz[j], &
X oazm[j], &oangle[j], &ospeed[j], &seed);
X strek_place_enemy__(&xc, &yc, &zc, &obx[k], &oby[k], &obz[k], &
X oazm[k], &oangle[k], &ospeed[k], &seed);
X } else {
X strek_place_enemy__(&xc, &yc, &zc, &obx[j], &oby[j], &obz[j], &
X oazm[j], &oangle[j], &ospeed[j], &seed);
X }
X waited = 0;
X } else if (waited == 0) {
X rand_(&seed);
X turns_wait__ = seed * (float)150. + 50;
X waited = 1;
X } else {
X ++waited;
X }
X
X/* evaluate sum of damages (both photon and phaser) to other objects */
X
X
X for (j = 1; j <= 9; ++j) {
X if (object[j] && odamage[j] >= maxd[j - 1]) {
X if (j == 1) {
X ++ship_n__;
X } else if (kling[j - 1]) {
X ++ship_k__;
X } else {
X ++ship_r__;
X }
X object[j] = FALSE_;
X s_copy(k_message__, d_message__ + (index[j] - 1) * 80, 80L, 80L);
X if (j == 2 || j == 3) {
X s_wsfi(&io___111);
X do_fio(&c__1, s_message__ + 880, 80L);
X do_fio(&c__1, (char *)&value[j - 1], (ftnlen)sizeof(real));
X e_wsfi();
X s_wsfi(&io___112);
X do_fio(&c__1, s_message__ + 960, 80L);
X do_fio(&c__1, nick_name__, 10L);
X e_wsfi();
X } else if (j == 1) {
X s_wsfi(&io___113);
X do_fio(&c__1, s_message__ + 1200, 80L);
X do_fio(&c__1, (char *)&value[j - 1], (ftnlen)sizeof(real));
X e_wsfi();
X s_wsfi(&io___114);
X do_fio(&c__1, s_message__ + 1280, 80L);
X do_fio(&c__1, capt_name__, 10L);
X e_wsfi();
X rand_(&seed);
X if (seed > (float).5) {
X agr[1] = FALSE_;
X }
X rand_(&seed);
X if (seed > (float).5) {
X agr[2] = FALSE_;
X }
X } else {
X s_copy(k_message__ + 80, k_message__, 80L, 80L);
X s_copy(k_message__, " ", 80L, 1L);
X s_copy(k_message__ + 160, " ", 80L, 1L);
X }
X strek_message__(k_message__, &c__3, 80L);
X score += value[j - 1];
X }
X/* L40: */
X }
X
X/* process lock on coordinates */
X
X ++nav_c__;
X if (lock_on__) {
X if (orange[l_object__] > (float)1e4 && nav_c__ >= 10) {
X nav_c__ = 0;
X if (speed < (float)0.) {
X s1 = -(doublereal)speed;
X s2 = azm + (float)180.;
X if (s2 > (float)360.) {
X s2 += (float)-360.;
X }
X s3 = (float)360. - angle;
X reverse = TRUE_;
X } else {
X s1 = speed;
X s2 = azm;
X s3 = angle;
X reverse = FALSE_;
X }
X if (s1 > (float).01) {
X num_forward__ = sqrt(orange[l_object__]) / s1;
X } else {
X num_forward__ = 20;
X }
X j = l_object__;
X xt1 = -num_forward__ * ospeed[j] * sin(oazm[j]) * cos(oangle[j])
X + obx[j];
X yt1 = num_forward__ * ospeed[j] * cos(oazm[j]) * cos(oangle[j]) +
X oby[j];
X zt1 = num_forward__ * ospeed[j] * sin(oangle[j]) + obz[j];
X dx = xt1 - xc;
X dy = yt1 - yc;
X dz = zt1 - zc;
X if (dabs(dy) < (float)1.) {
X dy = r_sign(&c_b38, &dy);
X }
X if (dy <= (float)0.) {
X r__1 = atan(dx / dy);
X tazm = -(doublereal)(r__1 * (float)180. / (float)3.141592653)
X + (float)180.;
X } else {
X r__1 = atan(dx / dy);
X tazm = -(doublereal)(r__1 * (float)180. / (float)3.141592653);
X
X }
X if (tazm < (float)0.) {
X tazm += (float)360.;
X }
X/* Computing 2nd power */
X r__1 = dx;
X/* Computing 2nd power */
X r__2 = dy;
X dist = sqrt(r__1 * r__1 + r__2 * r__2);
X if (dist < (float)1.) {
X dist = (float)1.;
X }
X r__1 = atan(dz / dist);
X tangle = r__1 * (float)180. / (float)3.141592653;
X
X/* pick smallest angle (needed due to arctan being only in */
X/* I and IV quadrants */
X
X t1 = (tazm - s2) / (float)10.;
X t2 = (tangle - s3) / (float)10.;
X t3 = (tazm - (s2 + (float)360.)) / (float)10.;
X t4 = (tangle - (s3 + (float)360.)) / (float)10.;
X t5 = (tazm - (s2 - (float)360.)) / (float)10.;
X t6 = (tangle - (s3 - (float)360.)) / (float)10.;
X if (dabs(t3) < dabs(t1)) {
X t1 = t3;
X }
X if (dabs(t5) < dabs(t1)) {
X t1 = t5;
X }
X if (dabs(t4) < dabs(t2)) {
X t2 = t4;
X }
X if (dabs(t6) < dabs(t2)) {
X t2 = t6;
X }
X if (reverse) {
X t2 = -(doublereal)t2;
X }
X
X/* limit rotation angles by max ship ability */
X
X if (dabs(t1) > (float).6) {
X t1 = r_sign(&c_b39, &t1);
X }
X if (dabs(t2) > (float).6) {
X t2 = r_sign(&c_b39, &t2);
X }
X
X/* set rotation vars */
X
X rot_azm__[9] = t1;
X rot_ang__[9] = t2;
X }
X }
X
X/* if rotate then rotate */
X
X if (rot_azm__[r_index__ - 1] != (float)0.) {
X azm += rot_azm__[r_index__ - 1];
X sa = sin(azm * (float)3.141592653 / (float)180.);
X ca = cos(azm * (float)3.141592653 / (float)180.);
X }
X if (rot_ang__[r_index__ - 1] != (float)0.) {
X angle += rot_ang__[r_index__ - 1];
X sp = sin(angle * (float)3.141592653 / (float)180.);
X cp = cos(angle * (float)3.141592653 / (float)180.);
X }
X if (! rotate && ! lock_on__) {
X r_index__ = 9;
X }
X
X/* rotate tractored object back to translated galatic coords centered
X*/
X/* on ship */
X
X if (tract_ob__ && tract) {
X if (! object[tr_object__]) {
X tract_ob__ = FALSE_;
X s_copy(b_message__ + 80, s_message__ + (index[tr_object__] - 1) *
X 80, 80L, 80L);
X strek_message__(b_message__, &c__3, 80L);
X } else {
X trazm += rot_azm__[r_index__ - 1] * (float)3.141592653 / (float)
X 180.;
X t1 = cos(trazm - azm * (float)3.141592653 / (float)180.);
X trangle += rot_ang__[r_index__ - 1] * (float)3.141592653 / (float)
X 180. * t1;
X j = tr_object__;
X trx = rox[j] * ca - roy[j] * sa * cp + roz[j] * sa * sp + xc;
X try_ = rox[j] * sa + roy[j] * ca * cp - roz[j] * ca * sp + yc;
X trz = roy[j] * sp + roz[j] * cp + zc;
X }
X }
X
X/* check that scan object still exists */
X
X if (! object[scan_ob__] && scan_ob__ >= 4) {
X scan_ob__ = 1;
X s_copy(b_message__ + 80, s_message__ + 720, 80L, 80L);
X strek_message__(b_message__, &c__3, 80L);
X }
X
X/* check that nav lock on object still exists */
X
X if (lock_on__ && (! object[l_object__] || orange[l_object__] < (float)1e4
X || ! scan)) {
X lock_on__ = FALSE_;
X s_copy(b_message__ + 80, "Navigation lock on lost.", 80L, 24L);
X strek_message__(b_message__, &c__3, 80L);
X r_index__ = 9;
X }
X
X/* apply damage to the player's ship */
X
X strek_assess_damage__(d_pct__, &damage, &scan, &tract, &phase, &energy, &
X seed);
X
X/* get a key if one has been struck */
X
X unobscured = gprcondeventwait_(&event_type__, key, c_pos__, &status, 1L);
X if ((real) event_type__ != gprnoevent) {
X strek_interpret_key__(key, 1L);
X
X/* process a speed key */
X
X if (*key == 'a') {
X speed += (float).5;
X if (speed > (float)5.) {
X speed = (float)5.;
X s_copy(b_message__ + 80, s_message__ + 640, 80L, 80L);
X strek_message__(b_message__, &c__3, 80L);
X }
X } else if (*key == 's') {
X speed += (float)-.5;
X if (speed < (float)-5.) {
X speed = (float)-5.;
X s_copy(b_message__ + 80, s_message__ + 640, 80L, 80L);
X strek_message__(b_message__, &c__3, 80L);
X }
X }
X
X/* process a rotate key */
X
X if (! lock_on__) {
X if (*key == 'm') {
X r_index__ = 9;
X } else if (*key == 'b') {
X rotate = ! rotate;
X } else {
X if (! rotate) {
X if (*key == 'u') {
X r_index__ = 1;
X } else if (*key == 'j') {
X r_index__ = 2;
X } else if (*key == 'h') {
X r_index__ = 3;
X } else if (*key == 'n') {
X r_index__ = 4;
X }
X } else {
X if (*key == 'u') {
X r_index__ = 5;
X } else if (*key == 'j') {
X r_index__ = 6;
X } else if (*key == 'h') {
X r_index__ = 7;
X } else if (*key == 'n') {
X r_index__ = 8;
X }
X }
X }
X }
X
X/* process a tractor beam key */
X
X if (*key == 't' && tract && ! tract_ob__) {
X strek_number_objects__(pos_store__, ran_store__, object, &c__1);
X strek_message__(t_message__, &c__3, 80L);
X i = 0;
XL60:
X ++i;
X unobscured = gprcondeventwait_(&event_type__, t_key__, c_pos__, &
X status, 1L);
X if ((real) event_type__ != gprnoevent || i > 3000) {
X goto L70;
X }
X goto L60;
XL70:
X strek_number_objects__(pos_store__, ran_store__, object, &c__0);
X if ((real) event_type__ != gprnoevent) {
X strek_interpret_key__(t_key__, 1L);
X if (*t_key__ == '1' || *t_key__ >= '4' && *t_key__ <= '9') {
X s_rsfi(&io___150);
X do_fio(&c__1, (char *)&tr_object__, (ftnlen)sizeof(
X integer));
X e_rsfi();
X if (object[tr_object__] && orange[tr_object__] < (float)
X 9e4) {
X tract_ob__ = TRUE_;
X j = tr_object__;
X trx = obx[j];
X try_ = oby[j];
X trz = obz[j];
X trazm = oazm[j];
X trangle = oangle[j];
X trdist = orange[j];
X s_copy(b_message__ + 80, u_message__ + (index[j] - 1)
X * 80, 80L, 80L);
X strek_message__(b_message__, &c__3, 80L);
X }
X }
X }
X }
X
X/* process a drop tractor key */
X
X if (*key == 'r' && tract_ob__) {
X tract_ob__ = FALSE_;
X oazm[tr_object__] = trazm;
X oangle[tr_object__] = trangle;
X s_copy(b_message__ + 80, s_message__ + 480, 80L, 80L);
X strek_message__(b_message__, &c__3, 80L);
X }
X
X/* process an damage information key */
X
X if (*key == 'i') {
X strek_damage_info__(d_pct__, capt_name__, nick_name__, 10L, 10L);
X }
X
X/* process a photon key */
X
X if (*key == 'f' && photons >= 1) {
X strek_find_free_ob__(object, &c__7, &j, &found);
X if (found) {
X object[j] = TRUE_;
X photon_c__[j - 4] = 0;
X --photons;
X obx[j] = xc;
X oby[j] = yc;
X obz[j] = zc;
X oazm[j] = azm * (float)3.141592653 / (float)180.;
X oangle[j] = angle * (float)3.141592653 / (float)180.;
X ospeed[j] = (float)10.;
X s_copy(b_message__ + 80, s_message__ + 560, 80L, 80L);
X strek_message__(b_message__, &c__3, 80L);
X }
X }
X
X/* process a phaser key */
X
X if (*key == 'p' && phase && energy > (float)30.) {
X strek_number_objects__(pos_store__, ran_store__, object, &c__1);
X strek_message__(p_message__, &c__3, 80L);
X i = 0;
XL80:
X ++i;
X unobscured = gprcondeventwait_(&event_type__, t_key__, c_pos__, &
X status, 1L);
X if ((real) event_type__ != gprnoevent || i > 3000) {
X goto L90;
X }
X goto L80;
XL90:
X strek_number_objects__(pos_store__, ran_store__, object, &c__0);
X if ((real) event_type__ != gprnoevent) {
X strek_interpret_key__(t_key__, 1L);
X if (*t_key__ >= '0' && *t_key__ <= '9') {
X s_rsfi(&io___153);
X do_fio(&c__1, (char *)&ph_object__, (ftnlen)sizeof(
X integer));
X e_rsfi();
X if (object[ph_object__] && orange[ph_object__] < (float)
X 2.5e5) {
X if (pro_x__[ph_object__] <= (float)800. && pro_x__[
X ph_object__] >= (float)100. && (pro_y__[
X ph_object__] <= (float)700. && pro_y__[
X ph_object__] >= (float)100.)) {
X i__1 = (integer) pro_x__[ph_object__];
X i__2 = (integer) pro_y__[ph_object__];
X strek_draw_phasers__(&i__1, &i__2);
X energy += (float)-30.;
X phase_d__ = TRUE_;
X phase_c__ = 0;
X phase = FALSE_;
X
X/* do damage to other ship */
X
X strek_phaser_fire__(&orange[ph_object__], &seed, &
X odamage[ph_object__], &type);
X s_copy(a_message__, ps_message__ + (index[
X ph_object__] - 1) * 80, 80L, 80L);
X s_wsfi(&io___155);
X do_fio(&c__1, s_message__ + 1040, 80L);
X do_fio(&c__1, dam_rating__ + (type - 1) * 10, 10L)
X ;
X e_wsfi();
X strek_message__(a_message__, &c__3, 80L);
X }
X }
X }
X }
X }
X
X/* process a explode radius key */
X
X if (*key == 'e') {
X strek_message__(e_message__, &c__3, 80L);
X i = 0;
XL100:
X ++i;
X unobscured = gprcondeventwait_(&event_type__, t_key__, c_pos__, &
X status, 1L);
X if ((real) event_type__ != gprnoevent || i > 5000) {
X goto L110;
X }
X goto L100;
XL110:
X if ((real) event_type__ != gprnoevent) {
X strek_interpret_key__(t_key__, 1L);
X if (*t_key__ > '0' && *t_key__ <= '6') {
X s_rsfi(&io___156);
X do_fio(&c__1, (char *)&option, (ftnlen)sizeof(integer));
X e_rsfi();
X t1 = option * (float)5. + (float)10.;
X/* Computing 2nd power */
X r__1 = t1;
X photon_tr__[3] = r__1 * r__1;
X photon_tr__[4] = photon_tr__[3];
X photon_tr__[5] = photon_tr__[3];
X }
X }
X }
X
X/* change scanner object keys */
X
X if (*key >= '0' && *key <= '9') {
X s_rsfi(&io___158);
X do_fio(&c__1, (char *)&item, (ftnlen)sizeof(integer));
X e_rsfi();
X if (object[item]) {
X scan_ob__ = item;
X s_copy(b_message__ + 80, sc_message__ + (index[item] - 1) *
X 80, 80L, 80L);
X strek_message__(b_message__, &c__3, 80L);
X }
X }
X
X/* process a nav lock on key */
X
X if (*key == 'l' && scan) {
X strek_message__(t_message__, &c__3, 80L);
X i = 0;
XL120:
X ++i;
X unobscured = gprcondeventwait_(&event_type__, t_key__, c_pos__, &
X status, 1L);
X if ((real) event_type__ != gprnoevent || i > 5000) {
X goto L130;
X }
X goto L120;
XL130:
X if ((real) event_type__ != gprnoevent) {
X strek_interpret_key__(t_key__, 1L);
X if (*t_key__ >= '0' && *t_key__ <= '3') {
X s_rsfi(&io___160);
X do_fio(&c__1, (char *)&l_object__, (ftnlen)sizeof(integer)
X );
X e_rsfi();
X if (object[l_object__] && orange[l_object__] > (float)
X 22500.) {
X lock_on__ = TRUE_;
X s_copy(b_message__ + 80, l_message__ + (index[
X l_object__] - 1) * 80, 80L, 80L);
X strek_message__(b_message__, &c__3, 80L);
X r_index__ = 10;
X nav_c__ = 10;
X }
X }
X }
X }
X
X/* process a nav lock drop key */
X
X if (*key == 'o' && lock_on__) {
X lock_on__ = FALSE_;
X s_copy(b_message__ + 80, "Navigation lock on dropped.", 80L, 27L);
X
X strek_message__(b_message__, &c__3, 80L);
X r_index__ = 9;
X }
X
X/* process a dock key */
X
X if (*key == 'd' && orange[0] < (float)900. && dabs(speed) < (float)1.)
X {
X strek_dock__(d_pct__, &score, user_name__, capt_name__,
X nick_name__, ship_name__, &cum_score__, key_file__, &
X new_ship__, 10L, 10L, 10L, 30L, 256L);
X s_stop("", 0L);
X }
X
X/* process a current score key */
X
X if (*key == 'c') {
X s_wsfi(&io___161);
X do_fio(&c__1, r_message__, 80L);
X do_fio(&c__1, ship_name__, 30L);
X e_wsfi();
X s_wsfi(&io___162);
X do_fio(&c__1, (char *)&ship_k__, (ftnlen)sizeof(integer));
X do_fio(&c__1, (char *)&ship_r__, (ftnlen)sizeof(integer));
X do_fio(&c__1, (char *)&ship_n__, (ftnlen)sizeof(integer));
X do_fio(&c__1, (char *)&dock_n__, (ftnlen)sizeof(integer));
X do_fio(&c__1, (char *)&score, (ftnlen)sizeof(integer));
X do_fio(&c__1, (char *)&cum_score__, (ftnlen)sizeof(integer));
X e_wsfi();
X strek_message__(r_message__, &c__3, 80L);
X }
X
X/* process a clear com window key */
X
X if (*key == 'z') {
X s_copy(b_message__ + 80, " ", 80L, 1L);
X strek_message__(b_message__, &c__3, 80L);
X }
X
X/* process a sleep until key */
X
X if (*key == '/') {
X strek_message__(sl_message__, &c__3, 80L);
XL125:
X unobscured = gprcondeventwait_(&event_type__, t_key__, c_pos__, &
X status, 1L);
X if ((real) event_type__ != gprnoevent) {
X goto L135;
X }
X goto L125;
XL135:
X s_copy(b_message__ + 80, " ", 80L, 1L);
X strek_message__(b_message__, &c__3, 80L);
X }
X
X/* end parsing routines */
X
X }
X
X/* put angles back to normal (between 0 and 360) */
X
X if (azm < (float)0.) {
X azm += (float)360.;
X }
X if (azm >= (float)360.) {
X azm += (float)-360.;
X }
X if (angle < (float)0.) {
X angle += (float)360.;
X }
X if (angle >= (float)360.) {
X angle += (float)-360.;
X }
X
X/* add engine energy output */
X
X energy += (d_pct__[0] + d_pct__[1]) * (float).35;
X
X/* subtract off energy due to speed and rotation */
X
X energy = energy - dabs(speed) / (float)7.5 - rot_cost__[r_index__ - 1];
X
X/* subtract energy due to tractors */
X
X if (tract_ob__) {
X energy = energy - sqrt(trdist) / (float)60. * tr_cost__[tr_object__]
X + (float).1;
X }
X
X/* limit energy by battery percent */
X
X check = d_pct__[3] * (float)1e3;
X if (energy > check) {
X energy = check;
X }
X
X/* if out of energy start (or continue) death march */
X
X if (energy < (float)0.) {
X ++num_times__;
X strek_no_energy__(&num_times__, user_name__, capt_name__, nick_name__,
X ship_name__, key_file__, &score, &cum_score__, &new_ship__,
X 10L, 10L, 10L, 30L, 256L);
X } else {
X num_times__ = 0;
X }
X
X/* process new coordinates */
X
X tempx = xc;
X tempy = yc;
X tempz = zc;
X xc = -(doublereal)sa * cp * speed + xc;
X yc = ca * cp * speed + yc;
X zc = sp * speed + zc;
X for (j = 0; j <= 9; ++j) {
X if (object[j]) {
X if (j != 0) {
X soa[j - 1] = sin(oazm[j]);
X coa[j - 1] = cos(oazm[j]);
X sop[j - 1] = sin(oangle[j]);
X cop[j - 1] = cos(oangle[j]);
X obx[j] = -(doublereal)soa[j - 1] * cop[j - 1] * ospeed[j] +
X obx[j];
X oby[j] = coa[j - 1] * cop[j - 1] * ospeed[j] + oby[j];
X obz[j] = sop[j - 1] * ospeed[j] + obz[j];
X }
X xt[j] = obx[j] - xc;
X yt[j] = oby[j] - yc;
X zt[j] = obz[j] - zc;
X/* Computing 2nd power */
X r__1 = xt[j];
X/* Computing 2nd power */
X r__2 = yt[j];
X/* Computing 2nd power */
X r__3 = zt[j];
X orange[j] = r__1 * r__1 + r__2 * r__2 + r__3 * r__3;
X }
X/* L150: */
X }
X
X/* update tractored object */
X
X if (tract_ob__ && tract) {
X trx = trx - tempx + xc;
X try_ = try_ - tempy + yc;
X trz = trz - tempz + zc;
X j = tr_object__;
X obx[j] = trx;
X oby[j] = try_;
X obz[j] = trz;
X oazm[j] = trazm;
X oangle[j] = trangle;
X xt[j] = obx[j] - xc;
X yt[j] = oby[j] - yc;
X zt[j] = obz[j] - zc;
X/* Computing 2nd power */
X r__1 = xt[j];
X/* Computing 2nd power */
X r__2 = yt[j];
X/* Computing 2nd power */
X r__3 = zt[j];
X orange[j] = r__1 * r__1 + r__2 * r__2 + r__3 * r__3;
X trdist = orange[j];
X }
X
X/* get object to object distances when both exist */
X
X for (j = 0; j <= 9; ++j) {
X if (object[j]) {
X for (i = 1; i <= 3; ++i) {
X if (object[i] && i != j) {
X/* Computing 2nd power */
X r__1 = obx[i] - obx[j];
X/* Computing 2nd power */
X r__2 = oby[i] - oby[j];
X/* Computing 2nd power */
X r__3 = obz[i] - obz[j];
X distance[i + j * 3 - 1] = r__1 * r__1 + r__2 * r__2 +
X r__3 * r__3;
X }
X/* L170: */
X }
X }
X/* L160: */
X }
X
X/* rotate objects into shipocentric coordinates */
X
X for (j = 0; j <= 9; ++j) {
X if (object[j]) {
X rox[j] = xt[j] * ca + yt[j] * sa;
X roy[j] = -(doublereal)xt[j] * sa * cp + yt[j] * ca * cp + zt[j] *
X sp;
X roz[j] = xt[j] * sa * sp - yt[j] * ca * sp + zt[j] * cp;
X
X/* project shiopcentric coordinates to screen coords */
X
X if (roy[j] > (float)1.) {
X pro_x__[j] = rox[j] / roy[j] * (float)350. + (float)450.;
X pro_y__[j] = (float)400. - roz[j] / roy[j] * (float)350.;
X if ((r__1 = pro_x__[j], dabs(r__1)) > (float)3e3) {
X pro_x__[j] = (float)1e3;
X }
X if ((r__1 = pro_y__[j], dabs(r__1)) > (float)3e3) {
X pro_y__[j] = (float)1e3;
X }
X } else {
X pro_x__[j] = (float)1e3;
X pro_y__[j] = (float)1e3;
X if (j == 2) {
X center[0] = 1000;
X center[1] = 1000;
X }
X }
X
X/* fill temporary array for use in scanner windows */
X
X pos_store__[j] = pro_x__[j];
X pos_store__[j + 10] = pro_y__[j];
X }
X/* L180: */
X }
X
X/* erase old objects */
X
X gprsetdrawvalue_(&c__0, &status);
X if (refresh) {
X strek_scanner__(rox, roy, roz, object, &c__0);
X }
X if (plot[0]) {
X strek_starbase__(&xc, &yc, &zc, &ca, &cp, &sa, &sp, &c__0);
X }
X for (j = 1; j <= 9; ++j) {
X if (plot[j]) {
X switch ((int)j) {
X case 1: goto L191;
X case 2: goto L192;
X case 3: goto L193;
X case 4: goto L194;
X case 5: goto L195;
X case 6: goto L196;
X case 7: goto L197;
X case 8: goto L198;
X case 9: goto L199;
X }
XL191:
X strek_nemian__(&xc, &yc, &zc, &obx[j], &oby[j], &obz[j], &ca, &sa,
X &cp, &sp, &c__0, &soa[j - 1], &coa[j - 1], &sop[j - 1], &
X cop[j - 1]);
X goto L190;
XL192:
X if (kling[j - 1]) {
X strek_klingon__(&xc, &yc, &zc, &obx[j], &oby[j], &obz[j], &ca,
X &sa, &cp, &sp, &c__0, center, &soa[j - 1], &coa[j -
X 1], &sop[j - 1], &cop[j - 1]);
X } else {
X strek_romulan_1__(&xc, &yc, &zc, &obx[j], &oby[j], &obz[j], &
X ca, &sa, &cp, &sp, &c__0, &soa[j - 1], &coa[j - 1], &
X sop[j - 1], &cop[j - 1]);
X }
X goto L190;
XL193:
X strek_romulan_2__(&xc, &yc, &zc, &obx[j], &oby[j], &obz[j], &ca, &
X sa, &cp, &sp, &c__0, &soa[j - 1], &coa[j - 1], &sop[j - 1]
X , &cop[j - 1]);
X goto L190;
XL194:
X strek_photon_1__(&xc, &yc, &zc, &obx[j], &oby[j], &obz[j], &ca, &
X sa, &cp, &sp, &c__0);
X goto L190;
XL195:
X strek_photon_2__(&xc, &yc, &zc, &obx[j], &oby[j], &obz[j], &ca, &
X sa, &cp, &sp, &c__0);
X goto L190;
XL196:
X strek_photon_3__(&xc, &yc, &zc, &obx[j], &oby[j], &obz[j], &ca, &
X sa, &cp, &sp, &c__0);
X goto L190;
XL197:
X strek_photon_4__(&xc, &yc, &zc, &obx[j], &oby[j], &obz[j], &ca, &
X sa, &cp, &sp, &c__0);
X goto L190;
XL198:
X strek_photon_5__(&xc, &yc, &zc, &obx[j], &oby[j], &obz[j], &ca, &
X sa, &cp, &sp, &c__0);
X goto L190;
XL199:
X strek_photon_6__(&xc, &yc, &zc, &obx[j], &oby[j], &obz[j], &ca, &
X sa, &cp, &sp, &c__0);
X goto L190;
X }
XL190:
X ;
X }
X
X/* update screen objects */
X
X gprsetdrawvalue_(&c__1, &status);
X if (refresh) {
X strek_scanner__(rox, roy, roz, object, &c__1);
X }
X refresh = ! refresh;
X for (j = 0; j <= 9; ++j) {
X plot[j] = FALSE_;
X ran_store__[j] = orange[j];
X if (object[j] && orange[j] < (float)4e6) {
X if (pro_x__[j] < (float)900. && pro_x__[j] > (float)0.) {
X if (pro_y__[j] < (float)800. && pro_y__[j] > (float)0.) {
X plot[j] = TRUE_;
X if (j == 0) {
X strek_starbase__(&xc, &yc, &zc, &ca, &cp, &sa, &sp, &
X c__1);
X } else {
X switch ((int)j) {
X case 1: goto L201;
X case 2: goto L202;
X case 3: goto L203;
X case 4: goto L204;
X case 5: goto L205;
X case 6: goto L206;
X case 7: goto L207;
X case 8: goto L208;
X case 9: goto L209;
X }
XL201:
X strek_nemian__(&xc, &yc, &zc, &obx[j], &oby[j], &obz[
X j], &ca, &sa, &cp, &sp, &c__1, &soa[j - 1], &
X coa[j - 1], &sop[j - 1], &cop[j - 1]);
X goto L200;
XL202:
X if (kling[j - 1]) {
X strek_klingon__(&xc, &yc, &zc, &obx[j], &oby[j], &
X obz[j], &ca, &sa, &cp, &sp, &c__1, center,
X &soa[j - 1], &coa[j - 1], &sop[j - 1], &
X cop[j - 1]);
X } else {
X strek_romulan_1__(&xc, &yc, &zc, &obx[j], &oby[j],
X &obz[j], &ca, &sa, &cp, &sp, &c__1, &soa[
X j - 1], &coa[j - 1], &sop[j - 1], &cop[j
X - 1]);
X }
X goto L200;
XL203:
X strek_romulan_2__(&xc, &yc, &zc, &obx[j], &oby[j], &
X obz[j], &ca, &sa, &cp, &sp, &c__1, &soa[j - 1]
X , &coa[j - 1], &sop[j - 1], &cop[j - 1]);
X goto L200;
XL204:
X strek_photon_1__(&xc, &yc, &zc, &obx[j], &oby[j], &
X obz[j], &ca, &sa, &cp, &sp, &c__1);
X goto L200;
XL205:
X strek_photon_2__(&xc, &yc, &zc, &obx[j], &oby[j], &
X obz[j], &ca, &sa, &cp, &sp, &c__1);
X goto L200;
XL206:
X strek_photon_3__(&xc, &yc, &zc, &obx[j], &oby[j], &
X obz[j], &ca, &sa, &cp, &sp, &c__1);
X goto L200;
XL207:
X strek_photon_4__(&xc, &yc, &zc, &obx[j], &oby[j], &
X obz[j], &ca, &sa, &cp, &sp, &c__1);
X goto L200;
XL208:
X strek_photon_5__(&xc, &yc, &zc, &obx[j], &oby[j], &
X obz[j], &ca, &sa, &cp, &sp, &c__1);
X goto L200;
XL209:
X strek_photon_6__(&xc, &yc, &zc, &obx[j], &oby[j], &
X obz[j], &ca, &sa, &cp, &sp, &c__1);
X goto L200;
X }
X }
X }
X }
XL200:
X ;
X }
X
X/* draw center of the screen crosshairs */
X
X strek_x_hairs__();
X
X/* update panels */
X
X if (scan) {
X txc = i_nint(&rox[scan_ob__]);
X tyc = i_nint(&roy[scan_ob__]);
X tzc = i_nint(&roz[scan_ob__]);
X r__1 = sqrt(orange[scan_ob__]);
X trange = i_nint(&r__1);
X }
X rate = speed * 2;
X i__1 = (integer) energy;
X i__2 = (integer) xc;
X i__3 = (integer) yc;
X i__4 = (integer) zc;
X strek_update_panel__(&rate, &i__1, &photons, &phase, &tract_ob__, &i__2, &
X i__3, &i__4, &scan, &txc, &tyc, &tzc, &trange, &scan_ob__);
X strek_flashers__(object, &lock_on__, &energy, &bitmap_desc__);
X
X/* evaluate the turn duration, if it is shorter than the */
X/* minimum (which is .06 seconds) then request it again. */
X/* Since this call is slow it makes an ideal timer. */
X
X/* L210: */
X timeclock_(timer);
X calfloatclock_(timer, &turn);
X duration = turn - elapsed;
X if (duration > .06) {
X elapsed = turn;
X/* goto 10 */
X }
X timer[0] = 0;
X timer[1] = 0;
X timer[2] = 15000;
X timewait_(&timerelative, timer, &status);
X goto L10;
X/* goto 210 */
X} /* MAIN__ */
X
X#undef u_message__
X#undef s_message__
X#undef ps_message__
X#undef ph_message__
X
X
X/* Main program alias */ int strek_main__ () { MAIN__ (); }
E!O!F! xstrek/strek_main.c
exit
=====
@work: | Matthias Pfuetzner | @home:
ZGDV, Wilhelminenstrasse 7 | 6100 Darmstadt, FRG | Lichtenbergstrasse 73
+49 6151 155-164 or -101 \ <- Tel.nr. -> / +49 6151 75717
pfuetzner at agd.fhg.de pfuetzner at zgdvda.UUCP XBR1YD3U at DDATHD21.BITNET
--
Dan Heller
------------------------------------------------
O'Reilly && Associates ZipCode Software
Senior Writer President
argv at ora.com argv at zipcode.com
More information about the Comp.sources.x
mailing list