home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume4 / spacewar / part04 / alninit.c next >
C/C++ Source or Header  |  1988-05-31  |  2KB  |  88 lines

  1. /*
  2.  * Spacewar - set up aliens into the universe
  3.  *
  4.  * Copyright 1985 obo Systems, Inc.
  5.  * Copyright 1985 Dan Rosenblatt
  6.  */
  7.  
  8. #include "spacewar.h"
  9. #include "universe.h"
  10. #include "sys.h"
  11. #include "aln.h"
  12. #include "obj.h"
  13. #include "build.h"
  14.  
  15. VOID alninit()
  16. {
  17.     struct aln *paln=alnlst+MAXALN;
  18.     int i;
  19.     struct sysc *psysc;
  20.     struct sys *psys;
  21.     struct universe *puniv;
  22.  
  23. #ifdef DEBUG
  24.     DBG("alninit()\n");
  25. #endif
  26.  
  27.     /* build all the aliens, one at a time */
  28.     while (paln-- > alnlst) {
  29.  
  30.         /* random position, but not too far */
  31.         /* from the plane of the ecliptic   */
  32.         paln->al_pstn[0] = SUB(MUL(FLOAT(RANDOM(100)),4000.),200000.);
  33.         paln->al_pstn[1] = SUB(MUL(FLOAT(RANDOM(100)),4000.),200000.);
  34.         paln->al_pstn[2] = SUB(MUL(FLOAT(RANDOM(100)),100.),5000.);
  35.  
  36.         /* no velocity or thrust */
  37.         vinit(paln->al_vel);
  38.         vinit(paln->al_thr);
  39.  
  40.         /* not doing(attacking) anything */
  41.         paln->al_dly = 0;
  42.         paln->al_lhit.ip_ptr = NULL;
  43.         paln->al_atck.ip_ptr = NULL;
  44.         paln->al_aeval = 0;
  45.  
  46.         /* choose a (random) hull type and give */
  47.         /* random percentages of each subsystem */
  48.         paln->al_htyp = RANDOM(6) + 4; /* see build.h */
  49.         for (i=0;i < MSYS && i < MAXSYS;++i) {
  50.  
  51.             /* point to alien subsystem and configuration */
  52.             psys = paln->al_sys + i;
  53.             psysc = &config[i][paln->al_htyp];
  54.             if (!psysc->sc_cap) continue;  /* not in this craft */
  55.  
  56.             /* actual% = recommended% +/- 20 and within limits */
  57.             if ((psys->s_pct = psysc->sc_rpct + RANDOM(40) - 20) > 100)
  58.                 psys->s_pct = 100;
  59.             else if (psys->s_pct < 0)
  60.                 psys->s_pct = 0;
  61.  
  62.             /* rest of subsystem */
  63.             psys->s_edmg = psysc->sc_edmg;
  64.             psys->s_dmg = 0;
  65.             psys->s_lvl = psysc->sc_ilvl;
  66.             psys->s_cap = psysc->sc_cap;
  67.             if (i == ROCKETS)
  68.             psys->s_lvl = ((long)psys->s_lvl * (long)psys->s_pct)
  69.             / 100L;
  70.             else if (i == TORPS)
  71.             psys->s_lvl = (psys->s_cap * psys->s_lvl) / 100L;
  72.         }
  73.  
  74.         /* place into universe */
  75.         puniv = univlst + MAXOBJ + (paln-alnlst);
  76.         puniv->uv_type = 'A';
  77.         puniv->uv_pctr = paln->al_htyp + '0';
  78.         puniv->uv_pstn = paln->al_pstn;
  79.         puniv->uv_mass = paln->al_sys[HULL].s_dmg; /* kludge */
  80.         puniv->uv_rad = 1;
  81.         puniv->uv_ptr.uv_aln = paln;
  82.         paln->al_univ.ip_ptr = puniv;
  83.     }
  84. #ifdef DEBUG
  85.     VDBG("alninit return\n");
  86. #endif
  87. }
  88.