Subversion Repositories Kolibri OS

Rev

Rev 7142 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #ifndef INCLUDED
  6. #define EXTERN extern
  7. #else
  8. #define EXTERN
  9. #endif
  10.  
  11. #ifdef WINDOWS
  12. #define DEBUG
  13. #define SCORE
  14. #define CLOAKING
  15. #define CAPTURE
  16. #endif
  17.  
  18. #ifdef CLOAKING
  19. #define ndevice (16)
  20. #else
  21. #define ndevice (15)    // Number of devices
  22. #endif
  23. #define phasefac (2.0)
  24. #define PLNETMAX (10)
  25. #define NEVENTS (8)
  26.  
  27. typedef struct {
  28.         int x;  /* Quadrant location of planet */
  29.         int y;
  30.         int pclass; /* class M, N, or O (1, 2, or 3) */
  31.         int crystals; /* has crystals */
  32.         int known;   /* =1 contents known, =2 shuttle on this planet */
  33. } PLANETS;
  34.  
  35. EXTERN struct foo {
  36.                 int snap,               // snapshot taken
  37.                 remkl,                  // remaining klingons
  38.                 remcom,                 // remaining commanders
  39.                 rembase,                // remaining bases
  40.                 starkl,                 // destroyed stars
  41.                 basekl,                 // destroyed bases
  42.                 killk,                  // Klingons killed
  43.                 killc,                  // commanders killed
  44.                 galaxy[9][9],   // The Galaxy (subscript 0 not used)
  45.                 cx[11],cy[11]// Commander quadrant coordinates
  46.                 baseqx[6],              // Base quadrant X
  47.                 baseqy[6],              // Base quadrant Y
  48.                 newstuf[9][9]// Extended galaxy goodies
  49.                 isx, isy,               // Coordinate of Super Commander
  50.                 nscrem,                 // remaining super commanders
  51.                 nromkl,                 // Romulans killed
  52.                 nromrem,                // Romulans remaining
  53.                 nsckill,                // super commanders killed
  54.                 nplankl;                // destroyed planets
  55.         PLANETS plnets[PLNETMAX+1];  // Planet information
  56. #ifdef CAPTURE
  57.     int kcaptured, brigfree;
  58. #endif
  59.         double date,            // stardate
  60.                 remres,                 // remaining resources
  61.             remtime;            // remaining time
  62. } d, snapsht;                   // Data that is snapshot
  63.  
  64. EXTERN char
  65.                 quad[11][11];   // contents of our quadrant
  66.  
  67. // Scalar variables that are needed for freezing the game
  68. // are placed in a structure. #defines are used to access by their
  69. // original names. Gee, I could have done this with the d structure,
  70. // but I just didn't think of it back when I started.
  71.  
  72. EXTERN struct foo2 {
  73.         int inkling,
  74.         inbase,
  75.         incom,
  76.         instar,
  77.         intorps,
  78.         condit,
  79.         torps,
  80.         ship,
  81.         quadx,
  82.         quady,
  83.         sectx,
  84.         secty,
  85.         length,
  86.         skill,
  87.         basex,
  88.         basey,
  89.         klhere,
  90.         comhere,
  91.         casual,
  92.         nhelp,
  93.         nkinks,
  94.         ididit,
  95.         gamewon,
  96.         alive,
  97.         justin,
  98.         alldone,
  99.         shldchg,
  100.         thingx,
  101.         thingy,
  102.         plnetx,
  103.         plnety,
  104.         inorbit,
  105.         landed,
  106.         iplnet,
  107.         imine,
  108.         inplan,
  109.         nenhere,
  110.         ishere,
  111.         neutz,
  112.         irhere,
  113.         icraft,
  114.         ientesc,
  115.         iscraft,
  116.         isatb,
  117.         iscate,
  118. #ifdef DEBUG
  119.         idebug,
  120. #endif
  121. #ifdef CLOAKING
  122.     iscloaked,
  123.     iscloaking,
  124.     ncviol,
  125.     isviolreported,
  126. #endif
  127. #ifdef CAPTURE
  128.     brigcapacity,
  129. #endif
  130.         iattak,
  131.         icrystl,
  132.         tourn,
  133.         thawed,
  134.         batx,
  135.         baty,
  136.         ithere,
  137.         ithx,
  138.         ithy,
  139.         iseenit,
  140.         probecx,
  141.         probecy,
  142.         proben,
  143.         isarmed,
  144.         nprobes;
  145.  
  146.         double inresor,
  147.         intime,
  148.         inenrg,
  149.         inshld,
  150.         inlsr,
  151.         indate,
  152.         energy,
  153.         shield,
  154.         shldup,
  155.         warpfac,
  156.         wfacsq,
  157.         lsupres,
  158.         dist,
  159.         direc,
  160.         Time,
  161.         docfac,
  162.         resting,
  163.         damfac,
  164.         stdamtim,
  165.         cryprob,
  166.         probex,
  167.         probey,
  168.         probeinx,
  169.         probeiny;
  170. } a;
  171.  
  172. #define inkling a.inkling               // Initial number of klingons
  173. #define inbase a.inbase                 // Initial number of bases
  174. #define incom a.incom                   // Initian number of commanders
  175. #define instar a.instar                 // Initial stars
  176. #define intorps a.intorps               // Initial/Max torpedoes
  177. #define condit a.condit                 // Condition (red, yellow, green docked)
  178. #define torps a.torps                   // number of torpedoes
  179. #define ship a.ship                             // Ship type -- 'E' is Enterprise
  180. #define quadx a.quadx                   // where we are
  181. #define quady a.quady                   //
  182. #define sectx a.sectx                   // where we are
  183. #define secty a.secty                   //
  184. #define length a.length                 // length of game
  185. #define skill a.skill                   // skill level
  186. #define basex a.basex                   // position of base in current quad
  187. #define basey a.basey                   //
  188. #define klhere a.klhere                 // klingons here
  189. #define comhere a.comhere               // commanders here
  190. #define casual a.casual                 // causalties
  191. #define nhelp a.nhelp                   // calls for help
  192. #define nkinks a.nkinks                 //
  193. #define ididit a.ididit                 // Action taken -- allows enemy to attack
  194. #define gamewon a.gamewon               // Finished!
  195. #define alive a.alive                   // We are alive (not killed)
  196. #define justin a.justin                 // just entered quadrant
  197. #define alldone a.alldone               // game is now finished
  198. #define shldchg a.shldchg               // shield is changing (affects efficiency)
  199. #define thingx a.thingx                 // location of strange object in galaxy
  200. #define thingy a.thingy                 //
  201. #define plnetx a.plnetx                 // location of planet in quadrant
  202. #define plnety a.plnety                 //
  203. #define inorbit a.inorbit               // orbiting
  204. #define landed a.landed                 // party on planet (1), on ship (-1)
  205. #define iplnet a.iplnet                 // planet # in quadrant
  206. #define imine a.imine                   // mining
  207. #define inplan a.inplan                 // initial planets
  208. #define nenhere a.nenhere               // Number of enemies in quadrant
  209. #define ishere a.ishere                 // Super-commander in quandrant
  210. #define neutz a.neutz                   // Romulan Neutral Zone
  211. #define irhere a.irhere                 // Romulans in quadrant
  212. #define icraft a.icraft                 // Kirk in Galileo
  213. #define ientesc a.ientesc               // Attempted escape from supercommander
  214. #define iscraft a.iscraft               // =1 if craft on ship, -1 if removed from game
  215. #define isatb a.isatb                   // =1 if SuperCommander is attacking base
  216. #define iscate a.iscate                 // Super Commander is here
  217. #ifdef DEBUG
  218. #define idebug a.idebug                 // Debug mode
  219. #endif
  220. #ifdef CLOAKING
  221. #define iscloaked a.iscloaked  // Cloaking is enabled
  222. #define iscloaking a.iscloaking // However if iscloaking is TRUE then in process of cloaking and can be attacked
  223. #define ncviol a.ncviol         // Treaty violations
  224. #define isviolreported a.isviolreported // Violation reported by Romulan in quadrant
  225. #endif
  226. #ifdef CAPTURE
  227. #define kcaptured d.kcaptured   // number of captured Klingons                  
  228. #define brigfree d.brigfree     // room in the brig
  229. #define brigcapacity a.brigcapacity        // How many Klingons the brig will hold
  230. #endif
  231. #define iattak a.iattak                 // attack recursion elimination (was cracks[4])
  232. #define icrystl a.icrystl               // dilithium crystals aboard
  233. #define tourn a.tourn                   // Tournament number
  234. #define thawed a.thawed                 // Thawed game
  235. #define batx a.batx                             // Base coordinates being attacked
  236. #define baty a.baty                             //
  237. #define ithere a.ithere                 // Tholean is here
  238. #define ithx a.ithx                             // coordinates of tholean
  239. #define ithy a.ithy
  240. #define iseenit a.iseenit               // Seen base attack report
  241. #define inresor a.inresor               // initial resources
  242. #define intime a.intime                 // initial time
  243. #define inenrg a.inenrg                 // Initial/Max Energy
  244. #define inshld a.inshld                 // Initial/Max Shield
  245. #define inlsr a.inlsr                   // initial life support resources
  246. #define indate a.indate                 // Initial date
  247. #define energy a.energy                 // Energy level
  248. #define shield a.shield                 // Shield level
  249. #define shldup a.shldup                 // Shields are up
  250. #define warpfac a.warpfac               // Warp speed
  251. #define wfacsq a.wfacsq                 // squared warp factor
  252. #define lsupres a.lsupres               // life support reserves
  253. #define dist a.dist                             // movement distance
  254. #define direc a.direc                   // movement direction
  255. #define Time a.Time                             // time taken by current operation
  256. #define docfac a.docfac                 // repair factor when docking (constant?)
  257. #define resting a.resting               // rest time
  258. #define damfac a.damfac                 // damage factor
  259. #define stdamtim a.stdamtim             // time that star chart was damaged
  260. #define cryprob a.cryprob               // probability that crystal will work
  261. #define probex a.probex                 // location of probe
  262. #define probey a.probey
  263. #define probecx a.probecx               // current probe quadrant
  264. #define probecy a.probecy      
  265. #define probeinx a.probeinx             // Probe x,y increment
  266. #define probeiny a.probeiny            
  267. #define proben a.proben                 // number of moves for probe
  268. #define isarmed a.isarmed               // Probe is armed
  269. #define nprobes a.nprobes               // number of probes available
  270.  
  271. EXTERN int
  272.                 kx[21],                 // enemy sector locations
  273.                 ky[21],
  274.                 starch[9][9];   // star chart
  275.  
  276. EXTERN int fromcommandline; // Game start from command line options
  277. EXTERN int coordfixed; // Fix those dumb coordinates.
  278.  
  279. EXTERN char     passwd[10],             // Self Destruct password
  280.                 *device[ndevice+1];
  281.  
  282. EXTERN PLANETS nulplanet;       // zeroed planet structure
  283.  
  284. EXTERN double
  285.                 kpower[21],             // enemy energy levels
  286.                 kdist[21],              // enemy distances
  287.                 kavgd[21],              // average distances
  288.                 damage[ndevice+1],              // damage encountered
  289.                 future[NEVENTS+1];              // future events
  290.  
  291. EXTERN int iscore, iskill; // Common PLAQ
  292. EXTERN double perdate;
  293.  
  294. typedef enum {FWON, FDEPLETE, FLIFESUP, FNRG, FBATTLE,
  295.               FNEG3, FNOVA, FSNOVAED, FABANDN, FDILITHIUM,
  296.                           FMATERIALIZE, FPHASER, FLOST, FMINING, FDPLANET,
  297.                           FPNOVA, FSSC, FSTRACTOR, FDRAY, FTRIBBLE,
  298.                           FHOLE
  299. #ifdef CLOAKING
  300.    , FCLOAK
  301. #endif
  302. } FINTYPE ;
  303.  
  304. /* Skill levels */
  305. typedef enum {SNOVICE=1, SFAIR, SGOOD, SEXPERT, SEMERITUS} SKILLTYPE;
  306.  
  307. EXTERN double aaitem;
  308. EXTERN char citem[24];
  309.  
  310.  
  311. /* Define devices */
  312. #define DSRSENS 1
  313. #define DLRSENS 2
  314. #define DPHASER 3
  315. #define DPHOTON 4
  316. #define DLIFSUP 5
  317. #define DWARPEN 6
  318. #define DIMPULS 7
  319. #define DSHIELD 8
  320. #define DRADIO  9
  321. #define DSHUTTL 10
  322. #define DCOMPTR 11
  323. #define DTRANSP 12
  324. #define DSHCTRL 13
  325. #define DDRAY   14  // Added deathray
  326. #define DDSP    15  // Added deep space probe
  327. #define DCLOAK  16  // Added cloaking device
  328.  
  329. /* Define future events */
  330. #define FSPY    0       // Spy event happens always (no future[] entry)
  331.                                         // can cause SC to tractor beam Enterprise
  332. #define FSNOVA  1   // Supernova
  333. #define FTBEAM  2   // Commander tractor beams Enterprise
  334. #define FSNAP   3   // Snapshot for time warp
  335. #define FBATTAK 4   // Commander attacks base
  336. #define FCDBAS  5   // Commander destroys base
  337. #define FSCMOVE 6   // Supercommander moves (might attack base)
  338. #define FSCDBAS 7   // Supercommander destroys base
  339. #define FDSPROB 8   // Move deep space probe
  340.  
  341. #ifdef INCLUDED
  342. PLANETS nulplanet = {0};
  343. char *device[ndevice+1] = {
  344.         "",
  345.         "S. R. Sensors",
  346.         "L. R. Sensors",
  347.         "Phasers",
  348.         "Photon Tubes",
  349.         "Life Support",
  350.         "Warp Engines",
  351.         "Impulse Engines",
  352.         "Shields",
  353.         "Subspace Radio",
  354.         "Shuttle Craft",
  355.         "Computer",
  356.         "Transporter",
  357.         "Shield Control",
  358.         "Death Ray",
  359.         "D. S. Probe"
  360. #ifdef CLOAKING
  361.         ,"Cloaking Device"
  362. #endif
  363. };                                                                     
  364. #endif
  365.  
  366. #define ALGERON (2311) /* Date of the Treaty of Algeron */
  367.  
  368. #ifndef TRUE
  369. #define TRUE (1)
  370. #endif
  371. #ifndef FALSE
  372. #define FALSE (0)
  373. #endif
  374.  
  375. #define IHR 'R'
  376. #define IHK 'K'
  377. #define IHC 'C'
  378. #define IHS 'S'
  379. #define IHSTAR '*'
  380. #define IHP 'P'
  381. #define IHB 'B'
  382. #define IHBLANK ' '
  383. #define IHDOT '.'
  384. #define IHQUEST '?'
  385. #define IHE 'E'
  386. #define IHF 'F'
  387. #define IHT 'T'
  388. #define IHWEB '#'
  389. #define IHGREEN 'G'
  390. #define IHYELLOW 'Y'
  391. #define IHRED 'R'
  392. #define IHDOCKED 'D'
  393.  
  394.  
  395. /* Function prototypes */
  396. void prelim(void);
  397. void attack(int);
  398. int choose(void);
  399. void setup(void);
  400. void score(int);
  401. void atover(int);
  402. void srscan(int);
  403. void lrscan(void);
  404. void phasers(void);
  405. void photon(void);
  406. void warp(int);
  407. void sheild(int);
  408. void dock(void);
  409. void dreprt(void);
  410. void chart(int);
  411. void impuls(void);
  412. void waiting(void);
  413. void setwrp(void);
  414. void events(void);
  415. void report(int);
  416. void eta(void);
  417. void help(void);
  418. void abandn(void);
  419. void finish(FINTYPE);
  420. void dstrct(void);
  421. void kaboom(void);
  422. void freeze(int);
  423. void thaw(void);
  424. void plaque(void);
  425. int scan(void);
  426. #define IHEOL (0)
  427. #define IHALPHA (1)
  428. #define IHREAL (2)
  429. void chew(void);
  430. void chew2(void);
  431. void skip(int);
  432. void prout(char *s);
  433. void proutn(char *s);
  434. void stars(void);
  435. void newqad(int);
  436. int ja(void);
  437. void cramen(int);
  438. void crmshp(void);
  439. void cramlc(int, int, int);
  440. double expran(double);
  441. double Rand(void);
  442. void iran8(int *, int *);
  443. void iran10(int *, int *);
  444. double square(double);
  445. void dropin(int, int*, int*);
  446. void newcnd(void);
  447. void sortkl(void);
  448. void lmove(void);
  449. void ram(int, int, int, int);
  450. void crmena(int, int, int, int, int);
  451. void deadkl(int, int, int, int, int);
  452. void timwrp(void);
  453. void movcom(void);
  454. void torpedo(double, double, int, int, double *);
  455. void cramf(double, int, int);
  456. void crami(int, int);
  457. void huh(void);
  458. void pause(int);
  459. void nova(int, int);
  460. void snova(int, int);
  461. void scom(int *);
  462. void hittem(double *);
  463. void prouts(char *);
  464. int isit(char *);
  465. void preport(void);
  466. void orbit(void);
  467. void sensor(void);
  468. void beam(void);
  469. void mine(void);
  470. void usecrystals(void);
  471. void shuttle(void);
  472. void deathray(void);
  473. void debugme(void);
  474. void attakreport(void);
  475. void movetho(void);
  476. void probe(void);
  477.  
  478. #ifndef WINDOWS
  479. #ifndef KOS32
  480. int min(int, int);
  481. int max(int, int);
  482. #endif
  483. #endif
  484. void randomize(void);
  485. ///int getch(void);
  486.  
  487. #ifdef CLOAKING
  488. void cloak(void);
  489. #endif
  490. #ifdef CAPTURE
  491. void capture(void);
  492. #endif
  493.  
  494. #ifdef CLOAKING
  495. #define REPORTS ((condit==IHDOCKED || damage[DRADIO]<=0.0) && !iscloaked)
  496. #else
  497. #define REPORTS (condit==IHDOCKED || damage[DRADIO]<=0.0)
  498. #endif
  499.