This is message 777 of the traveller archives. It helps you develop starships for the Traveller-like COSMOS rule set. ------- Forwarded Message Bundle: 74 Archive-Message-Number: 777 Date: Thu, 11 Jan 90 07:29:29 PST From: (John Redden) redden@ttidca.tti.COM Message-Id: <9001111529.AA14699@ttidca.TTI.COM> To: traveller@dadla.la.TEK.COM Subject: cosmos 14 (long) Reply-To: traveller-request@dadla.wr.tek.com Resent-To: traveller-instant Approved: by traveller@dadla.wr.tek.com Fri Jan 12 12:00:48 PST 1990 Resent-Date: 12 Jan 90 12:01:05 PST (Fri) Resent-From: James T Perkins Cosmos # 14; This program automates cosmos #11, 12 and 13. Compile "cc -o sgen sgen.c -lm" There are no bugs. And if you believe that I have a farm to sell you in the sky. Suggestions and errors will be greatly appreciated. - -John R. - -------------------- cut here ------------------------------------------------ #include #define GRAN 10 #define NOCOMSS 20 #define JUMP 0 #define LIB JUMP+1 #define CBT LIB+1 #define SKL CBT+1 #define FWD SKL+1 #define COMM FWD+1 #define PER05 0 #define PER10 PER05+1 #define PER12 PER10+1 #define PER15 PER12+1 #define PER20 PER15+1 #define PER23 PER20+1 #define PER25 PER23+1 #define PER30 PER25+1 #define PER35 PER30+1 #define PER40 PER35+1 #define PER45 PER40+1 #define PER50 PER45+1 #define PER90 PER50+1 #define PER0 PER90+1 #define PRINT 1 #define NOPRINT 0 #define SLEN 256 #define PATHSIZE 256 double log(); FILE *fopen(); int getcn(); int tech_level(); int emass(); int num_computers(); int int_computers(); int computers_jobs(); int num_eweapons(); int screens(); int life_support(); int cryogenics(); int floor_s_cubed(); int hull_mass(); int mad_mass(); int cong_mass(); int ship_dens(); int jumpdrive(); int psionics(); int report(); int explosion(); int grav_drive(); int free_eunits(); int (*emass_action[])()={ life_support, explosion, free_eunits, 0 }; int (*tl_action[])()={ emass, num_eweapons, screens, life_support, cryogenics, floor_s_cubed, hull_mass, cong_mass, jumpdrive, explosion, grav_drive, free_eunits, 0 }; int (*eweap_action[])()={ jumpdrive, explosion, grav_drive, 0 }; int (*init_action[])()={ tech_level, emass, num_computers, int_computers, computers_jobs, num_eweapons, screens, life_support, cryogenics, floor_s_cubed, hull_mass, mad_mass, cong_mass, ship_dens, jumpdrive, explosion, grav_drive, free_eunits, psionics, 0 }; struct cyber { float comps; int compt; int psi; int sec_nerv; int pri_nerv; int pss; int psr; }; struct ship_archi { int nc; struct cyber cyber[NOCOMSS]; float tl; float emass; float intel; float eunits; float ocvbase; float ocvmass; float now; float odvenbase; float dcvbase; float dscbase; float dscmass; float scsum; float isyseunits; float isysmass; float cryeunits; float cryscsum; float flsq3; float flmass; float bsm; float odvenmass; float dcvmass; float crymass; float humass; float hpips; float hudv; float madmass; float cgunits; float cgmass; float cgrange; float madgbase; float tsm; float jumass; float jubase; float jubase2; float jubase5; float jutime; float dens; float explr; float feunits; float scbase; }ship_archi; float logtl; float logtlm6; float logtlm7; float logtlm8; float logtlm9; float logtlm10; float logtlm14; float logtlm18; main(argc, argv) int argc; char **argv; { for(/* ever*/ ;;){ switch(get_menu()){ case 0: exit(0); case 1: s_from_scratch(); break; case 2: report(); break; case 3: freport(); break; case 4: c_emass(); break; case 5: c_tl(); break; case 6: c_eweap(); break; case 7: c_num_comp(); break; case 8: c_int_comp(); break; case 9: c_job_comp(); break; case 10: c_life_support(); break; case 11: c_cryo(); break; case 12: c_floors3(); break; case 13: c_hull_mass(); break; case 14: c_cong_mass(); break; case 15: c_ship_dens(); break; default: fprintf(stderr, "No nO no :( \n"); } } } get_menu() { int answ; fprintf(stdout, "exit -> 0\nstart_over -> 1\nreport -> 2\n"); fprintf(stdout, "cp to file -> 3\nchange emass -> 4\n"); fprintf(stdout, "change tech level -> 5\nchange no energy weapons -> 6\n"); fprintf(stdout, "change number of computer systems -> 7\n"); fprintf(stdout, "change intelligence of computer systems -> 8\n"); fprintf(stdout, "change jobs of computer systems -> 9\n"); fprintf(stdout, "change life support systems -> 10\n"); fprintf(stdout, "change cryogenics -> 11\n"); fprintf(stdout, "change cubic meters of ship floor -> 12\n"); fprintf(stdout, "change hull mass -> 13\nchange contra grav mass -> 14\n"); fprintf(stdout, "change ship density -> 15\n"); scanf("%d", &answ); return(answ); } s_from_scratch() { register int (**ponent_ptr)(); for (ponent_ptr= &init_action[0]; *ponent_ptr; ponent_ptr++) (**ponent_ptr)(PRINT); } c_emass() { register int (**ponent_ptr)(); emass(PRINT); for (ponent_ptr= &emass_action[0]; *ponent_ptr; ponent_ptr++) (**ponent_ptr)(NOPRINT); } c_tl() { register int (**ponent_ptr)(); tech_level(PRINT); for (ponent_ptr= &tl_action[0]; *ponent_ptr; ponent_ptr++) (**ponent_ptr)(NOPRINT); } c_eweap() { register int (**ponent_ptr)(); num_eweapons(PRINT); for (ponent_ptr= &eweap_action[0]; *ponent_ptr; ponent_ptr++) (**ponent_ptr)(NOPRINT); } c_num_comp() { num_computers(PRINT); int_computers(PRINT); computers_jobs(PRINT); num_eweapons(NOPRINT); } c_int_comp() { int_computers(PRINT); computers_jobs(PRINT); psionics(NOPRINT); num_eweapons(NOPRINT); } c_job_comp() { computers_jobs(PRINT); num_eweapons(NOPRINT); } c_life_support() { life_support(PRINT); jumpdrive(NOPRINT); free_eunits(NOPRINT); } c_cryo() { cryogenics(PRINT); jumpdrive(NOPRINT); free_eunits(NOPRINT); } c_floors3() { floor_s_cubed(PRINT); jumpdrive(NOPRINT); } c_hull_mass() { hull_mass(PRINT); jumpdrive(NOPRINT); } c_cong_mass() { cong_mass(PRINT); jumpdrive(NOPRINT); } c_ship_dens() { ship_dens(PRINT); explosion(NOPRINT); } tech_level(p) int p; { if(p){ printf("Enter TL \n"); scanf("%f", &ship_archi.tl); } logtlm7 = 0.0; if(ship_archi.tl <= 6.0) fprintf(stderr, "no space ships below tech level 7 \n"); logtl = log(ship_archi.tl); if(ship_archi.tl > 6.0) logtlm6 = log(ship_archi.tl - 6.0); if(ship_archi.tl > 7.0) logtlm7 = log(ship_archi.tl - 7.0); if(ship_archi.tl > 8.0) logtlm8 = log(ship_archi.tl - 8.0); if(ship_archi.tl > 9.0) logtlm9 = log(ship_archi.tl - 9.0); if(ship_archi.tl > 10.0) logtlm10 = log(ship_archi.tl - 10.0); if(ship_archi.tl > 14.0) logtlm14 = log(ship_archi.tl - 14.0); if(ship_archi.tl > 18.0) logtlm18 = log(ship_archi.tl - 18.0); ship_archi.ocvmass = logtl * 7 / ship_archi.tl; ship_archi.dcvmass = logtlm7; return; } emass(p) int p; { ship_archi.eunits = 0.0; if(ship_archi.tl <= 8.0){ fprintf(stderr, "no high energy systems below tech level 9 \n"); return; } if(p){ printf("Enter Emass \n"); scanf("%f", &ship_archi.emass); } ship_archi.eunits = logtl * ship_archi.emass; } num_computers(p) int p; { if(ship_archi.tl < 7.0){ fprintf(stderr, "no computer systems below tech level 7 \n"); return; } printf("Enter number of computer systems \n"); scanf("%d", &ship_archi.nc); while (ship_archi.nc > NOCOMSS){ printf("too many \n"); printf("Enter number of computer sytems \n"); scanf("%d", &ship_archi.nc); } } int_computers(p) int p; { float intel; int i; for (i = 0; i < ship_archi.nc; i++){ printf("Enter INT of computer \n"); scanf("%f", &intel); ship_archi.cyber[i].comps = intel; } } computers_jobs(p) int p; { printf("computer no for jump ctl? \n"); ship_archi.cyber[JUMP].compt = getcn(); printf("computer no for library ctl? \n"); ship_archi.cyber[LIB].compt = getcn(); printf("computer no for offense/defense? \n"); ship_archi.cyber[CBT].compt = getcn(); printf("computer no for skill simulation? \n"); ship_archi.cyber[SKL].compt = getcn(); printf("computer no for observation? \n"); ship_archi.cyber[FWD].compt = getcn(); printf("computer no for communications? \n"); ship_archi.cyber[COMM].compt = getcn(); ship_archi.scbase = ship_archi.cyber[ship_archi.cyber[FWD].compt].comps * logtlm7; } int getcn() { int i; for(;; /* ever */){ scanf("%d", &i); if (i <= ship_archi.nc && i > 0) return(i - 1); printf("that one isn't there! \n"); } } num_eweapons(p) int p; { if (ship_archi.tl <= 7.0){ fprintf(stderr, "no energy weapons below tech level 8"); return; } ship_archi.ocvmass = logtl * 7 / ship_archi.tl; ship_archi.ocvbase = ship_archi.cyber[ship_archi.cyber[CBT].compt].comps * logtlm7; if(p){ printf("number of energy weapon systems? \n"); scanf("%f", &ship_archi.now); } ship_archi.odvenbase = ship_archi.now * logtlm8; ship_archi.odvenmass = ship_archi.now / logtl; ship_archi.dcvbase = ship_archi.cyber[ship_archi.cyber[CBT].compt].comps * logtlm7; } screens(p) int p; { if(ship_archi.tl <= 10.0){ fprintf(stderr, "secondary energy screens do no exist before tech level"); fprintf(stderr, " 11 \n"); return; } ship_archi.dscbase = logtlm10 * logtl; ship_archi.dscmass = logtlm10 * 10.0 / ship_archi.tl; } life_support(p) int p; { if(ship_archi.tl <= 6.0){ fprintf(stderr, "life support systems do not exist before tech level"); fprintf(stderr, " 7 \n"); return; } if(p){ printf("total lifeform size supported <6.41 = large human> \n"); scanf("%f", &ship_archi.scsum); } ship_archi.isyseunits = ship_archi.scsum / logtl; ship_archi.isysmass = ship_archi.isyseunits; } cryogenics(p) int p; { if(ship_archi.tl <= 8.0){ fprintf(stderr, "cryogenic systems do not exist before tech level"); fprintf(stderr, " 9 \n"); return; } if(p){ printf("total lifeform size supported by cryogenics \n"); scanf("%f", &ship_archi.cryscsum); } ship_archi.cryeunits = ship_archi.cryscsum / logtl * logtl; ship_archi.crymass = ship_archi.cryeunits; } floor_s_cubed(p) int p; { if(ship_archi.tl <= 6.0){ fprintf(stderr, "spaceships do not exist before tech level"); fprintf(stderr, " 7 \n"); return; } if(p){ printf("enter floor space in cubic meters \n"); scanf("%f", &ship_archi.flsq3); } ship_archi.flmass = ship_archi.flsq3 / (27 * logtl); } hull_mass(p) int p; { if(ship_archi.tl <= 6.0){ fprintf(stderr, "spaceships do not exist before tech level"); fprintf(stderr, " 7 \n"); return; } if(p){ printf("enter hull mass in metric tons \n"); scanf("%f", &ship_archi.humass); } ship_archi.hudv = logtlm7 * ship_archi.humass / 100.0; ship_archi.hpips = ship_archi.hudv * 36.0; } mad_mass(p) int p; { if(ship_archi.tl <= 6.0){ fprintf(stderr, "spaceships do not exist before tech level"); fprintf(stderr, " 7 \n"); return; } printf("enter maneuver drive mass \n"); scanf("%f", &ship_archi.madmass); } cong_mass(p) int p; { if (ship_archi.tl <= 9.0){ fprintf(stderr, "contra-gravity does not exist before tech level"); fprintf(stderr, "10 \n"); return; } if(p){ printf("enter contra-gravity mass \n"); scanf("%f", &ship_archi.cgmass); } if(ship_archi.tl < 15.0){ ship_archi.cgunits = ship_archi.cgmass * logtlm9 * logtl; ship_archi.cgrange = ship_archi.cgmass; } else{ if(ship_archi.tl < 19.0){ ship_archi.cgunits = ship_archi.cgmass * logtlm14 * logtlm14 * logtl; ship_archi.cgrange = ship_archi.cgmass; } else{ ship_archi.cgunits = ship_archi.cgmass * logtlm18 * logtlm18 * logtl * logtl; ship_archi.cgrange = ship_archi.cgmass * logtl *logtl; } } } ship_dens(p) int p; { if(ship_archi.tl <= 6.0){ fprintf(stderr, "spaceships do not exist before tech level"); fprintf(stderr, " 7 \n"); return; } printf("enter density of ship as percentage \n"); scanf("%f", &ship_archi.dens); ship_archi.dens /= 100.0; } jumpdrive(p) int p; { if(ship_archi.tl <= 9.0){ fprintf(stderr, "jumpdrive does not exist before tech level"); fprintf(stderr, " 10 \n"); return; } ship_archi.bsm = ship_archi.flmass + ship_archi.isysmass + ship_archi.dscmass + ship_archi.ocvmass + ship_archi.emass + ship_archi.humass + ship_archi.dcvmass + ship_archi.odvenmass + ship_archi.crymass + ship_archi.madmass + ship_archi.cgmass; if (ship_archi.tl > 9.0 && ship_archi.tl <= 14.0){ ship_archi.jubase = logtl * logtlm9 / ship_archi.bsm; ship_archi.jumass = ship_archi.jubase * 100.0 / logtl; ship_archi.tsm = ship_archi.bsm + ship_archi.jumass; ship_archi.jubase = logtl * logtlm9 / ship_archi.tsm; ship_archi.jubase2 = logtl * logtlm9 / (ship_archi.tsm * 2); ship_archi.jubase5 = logtl * logtlm9 / (ship_archi.tsm * 5); }else {if (ship_archi.tl > 18.0){ ship_archi.jubase = logtl * logtlm18 / ship_archi.bsm; ship_archi.jumass = ship_archi.jubase / logtl; ship_archi.tsm = ship_archi.bsm + ship_archi.jumass; ship_archi.jubase = logtl * logtlm18 / ship_archi.tsm; ship_archi.jubase2 = logtl * logtlm18 / (ship_archi.tsm * 2); ship_archi.jubase5 = logtl * logtlm18 / (ship_archi.tsm * 5); }else { ship_archi.jubase = logtl * logtlm14 / ship_archi.bsm; ship_archi.jumass = ship_archi.jubase / logtl; ship_archi.tsm = ship_archi.bsm + ship_archi.jumass; ship_archi.jubase = logtl * logtlm14 / ship_archi.tsm; ship_archi.jubase2 = logtl * logtlm14 / (ship_archi.tsm * 2); ship_archi.jubase5 = logtl * logtlm14 / (ship_archi.tsm * 5); } } } explosion(p){ int p; if(ship_archi.tl <= 5.0){ fprintf(stderr, "missiles do not exist before tech level"); fprintf(stderr, " 6 \n"); return; } ship_archi.explr = logtlm6 * ship_archi.eunits * ship_archi.tsm * ship_archi.dens; } grav_drive(p){ int p; if(ship_archi.tl <= 8.0){ fprintf(stderr, "gravatic drives do not exist before tech level"); fprintf(stderr, " 9 \n"); return; } ship_archi.madgbase = logtlm8 * ship_archi.madmass; } free_eunits(p){ int p; ship_archi.feunits = ship_archi.eunits - ship_archi.isyseunits - ship_archi.cryeunits; } psionics(p) int p; { int i; for (i = 0; i < ship_archi.nc; i++){ if(p){ printf("psionic base computer no %d:", i); scanf("%d", &ship_archi.cyber[i].psi); printf("/ncomputer secondary nerve rating \(DEX\):"); scanf("%d", &ship_archi.cyber[i].sec_nerv); printf("/ncomputer primary nerve rating \(STR\):"); scanf("%d", &ship_archi.cyber[i].pri_nerv); } ship_archi.cyber[i].pss = ship_archi.cyber[i].psi * 2 + ship_archi.cyber[i].comps + ship_archi.cyber[i].pri_nerv; ship_archi.cyber[i].psr = ship_archi.cyber[i].psi * 2 + ship_archi.cyber[i].comps + ship_archi.cyber[i].sec_nerv; } } report() { FILE *fdes; fdes = stdout; report_1(fdes); } freport() { FILE *fdes; char fname[PATHSIZE]; fprintf(stdout, "name of file : "); scanf("%s", fname); if((fdes = fopen(fname, "w")) < 0){ perror("fopen %s failed", fname); return; } report_1(fdes); } report_1(fdes) FILE *fdes; { static float fep[] = {0.05, 0.10, 0.12, 0.15, 0.20, 0.23, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.90, -1.0}; static float fes[] = {0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00}; #define SCAL_PER0(x) \ x, x * fes[PER05], \ x * fes[PER10], x * fes[PER12], \ x * fes[PER15] #define SCAL_PER20(x) \ x * fes[PER20], x * fes[PER23], \ x * fes[PER25], x * fes[PER30], \ x * fes[PER35] #define SCAL_PER40(x) \ x * fes[PER40], x * fes[PER45], \ x * fes[PER50], x * fes[PER90] #define ADD_PER0(x) \ x, x + fes[PER05], \ x + fes[PER10], x + fes[PER12], \ x + fes[PER15] #define ADD_PER20(x) \ x + fes[PER20], x + fes[PER23], \ x + fes[PER25], x + fes[PER30], \ x + fes[PER35] #define ADD_PER40(x) \ x + fes[PER40], x + fes[PER45], \ x + fes[PER50], x + fes[PER90] #define PRF_PER0(x) \ "x 00per %f x 5per %f x 10per %f\n x 12per %f x 15per %f \n", #define PRF_PER20(x) \ "x 20per %f x 23per %f x 25per %f\n x 30per %f x 35per %f \n", #define PRF_PER40(x) \ "x 40per %f x 45per %f x 50per %f\n x 90per %f \n", #define CONF(a, ocv, odven, dcv, dsc, madg, cg, ju, sc, res) \ fprintf(fdes, "\n a \n"); \ fprintf(fdes, "OCV %d ODVen %d DCV %d DSC %d MADG %d CGunits %d", \ (((int)(ship_archi.ocvbase + fes[ocv])+ (GRAN / 2))/ GRAN ) * GRAN, \ (((int)(ship_archi.odvenbase + fes[odven])+ (GRAN / 2))/ GRAN ) * GRAN, \ (((int)(ship_archi.dcvbase + fes[dcv])+ (GRAN / 2))/ GRAN ) * GRAN, \ (((int)(ship_archi.dscbase * fes[dsc])+ (GRAN / 2))/ GRAN ) * GRAN, \ (((int)(ship_archi.madgbase / ship_archi.tsm * fes[madg])+ (GRAN / 2))/ GRAN ) * GRAN, \ (((int)(ship_archi.cgunits * fes[cg])+ (GRAN / 2))/ GRAN ) * GRAN); \ fprintf(fdes, " JU %d SC %d FREE %d \n", \ (int)(ship_archi.jubase * fes[ju]), \ (((int)ship_archi.scbase + (int)fes[sc]+ (GRAN / 2))/ GRAN ) * GRAN, \ (((int)fes[res])/ GRAN + (GRAN / 2)) * GRAN); \ int i; char fname[30]; char str[SLEN]; for (i = 0; fep[i] != -1.0; i++) fes[i] = ship_archi.feunits * fep[i]; fprintf (fdes, "emass %f eunits %f free-eunits %f tech-level %f \n", ship_archi.emass, ship_archi.eunits, ship_archi.feunits, ship_archi.tl); fprintf (fdes, "\nint computer communications %f \nobserve/scanning %f \nskills %f \n" ,ship_archi.cyber[ship_archi.cyber[COMM].compt].comps, ship_archi.cyber[ship_archi.cyber[FWD].compt].comps, ship_archi.cyber[ship_archi.cyber[SKL].compt].comps); fprintf (fdes, "combat %f \nlibary %f \nhyperspace %f \n", ship_archi.cyber[ship_archi.cyber[CBT].compt].comps, ship_archi.cyber[ship_archi.cyber[LIB].compt].comps, ship_archi.cyber[ship_archi.cyber[JUMP].compt].comps); fprintf(fdes, "\n"); for(i = 0; i < ship_archi.nc; i++){ fprintf(fdes, "comp sys: %d psi: %d 2nd nerv: %d 1st nerv: %d", i, ship_archi.cyber[i].psi, ship_archi.cyber[i].sec_nerv, ship_archi.cyber[i].pri_nerv); fprintf(fdes, " psr: %d pss: %d \n",ship_archi.cyber[i].psr, ship_archi.cyber[i].pss); } fprintf(fdes, "\n"); fprintf(fdes, "offensive damage mass %f \n", ship_archi.odvenmass); fprintf(fdes, "offensive damage base %f \n", ship_archi.odvenbase); fprintf(fdes, "\n"); fprintf(fdes, PRF_PER0(odven) ADD_PER0(ship_archi.odvenbase)); fprintf(fdes, PRF_PER20(odven) ADD_PER20(ship_archi.odvenbase)); fprintf(fdes, PRF_PER40(odven) ADD_PER40(ship_archi.odvenbase)); fprintf(fdes, "ship density %f explosion damage %f \n", ship_archi.dens, ship_archi.explr); fprintf(fdes, "\n"); fprintf(fdes, "offensive combat mass %f \n", ship_archi.ocvmass); fprintf(fdes, "offensive combat base %f \n", ship_archi.ocvbase); fprintf(fdes, PRF_PER0(ocv) ADD_PER0(ship_archi.ocvbase)); fprintf(fdes, PRF_PER20(ocv) ADD_PER20(ship_archi.ocvbase)); fprintf(fdes, PRF_PER40(ocv) ADD_PER40(ship_archi.ocvbase)); fprintf(fdes, "\n"); fprintf(fdes, "energy weapon range parameters \n"); fprintf(fdes, "short @0per %f mid @0per %f long @0per %f \n", ship_archi.ocvbase * 100.0, ship_archi.ocvbase * 10000.0, ship_archi.ocvbase * 100000.0); fprintf(fdes, "short @05per %f mid @05per %f long @05per %f \n", (ship_archi.ocvbase + fes[PER05])* 100.0, (ship_archi.ocvbase + fes[PER05])* 10000.0, (ship_archi.ocvbase + fes[PER05]) * 100000.0); fprintf(fdes, "short @10per %f mid @10per %f long @10per %f \n", (ship_archi.ocvbase + fes[PER10])* 100.0, (ship_archi.ocvbase + fes[PER10])* 10000.0, (ship_archi.ocvbase + fes[PER10]) * 100000.0); fprintf(fdes, "short @12per %f mid @12per %f long @12per %f \n", (ship_archi.ocvbase + fes[PER12])* 100.0, (ship_archi.ocvbase + fes[PER12])* 10000.0, (ship_archi.ocvbase + fes[PER12]) * 100000.0); fprintf(fdes, "short @15per %f mid @15per %f long @15per %f \n", (ship_archi.ocvbase + fes[PER15])* 100.0, (ship_archi.ocvbase + fes[PER15])* 10000.0, (ship_archi.ocvbase + fes[PER15]) * 100000.0); fprintf(fdes, "short @20per %f mid @20per %f long @20per %f \n", (ship_archi.ocvbase + fes[PER20])* 100.0, (ship_archi.ocvbase + fes[PER20])* 10000.0, (ship_archi.ocvbase + fes[PER20]) * 100000.0); fprintf(fdes, "short @23per %f mid @23per %f long @23per %f \n", (ship_archi.ocvbase + fes[PER23])* 100.0, (ship_archi.ocvbase + fes[PER23])* 10000.0, (ship_archi.ocvbase + fes[PER23]) * 100000.0); fprintf(fdes, "short @30per %f mid @30per %f long @30per %f \n", (ship_archi.ocvbase + fes[PER30])* 100.0, (ship_archi.ocvbase + fes[PER30])* 10000.0, (ship_archi.ocvbase + fes[PER30]) * 100000.0); fprintf(fdes, "short @35per %f mid @35per %f long @35per %f \n", (ship_archi.ocvbase + fes[PER35])* 100.0, (ship_archi.ocvbase + fes[PER35])* 10000.0, (ship_archi.ocvbase + fes[PER35]) * 100000.0); fprintf(fdes, "short @40per %f mid @40per %f long @40per %f \n", (ship_archi.ocvbase + fes[PER40])* 100.0, (ship_archi.ocvbase + fes[PER40])* 10000.0, (ship_archi.ocvbase + fes[PER40]) * 100000.0); fprintf(fdes, "short @45per %f mid @45per %f long @45per %f \n", (ship_archi.ocvbase + fes[PER45])* 100.0, (ship_archi.ocvbase + fes[PER45])* 10000.0, (ship_archi.ocvbase + fes[PER45]) * 100000.0); fprintf(fdes, "short @50per %f mid @50per %f long @50per %f \n", (ship_archi.ocvbase + fes[PER50])* 100.0, (ship_archi.ocvbase + fes[PER50])* 10000.0, (ship_archi.ocvbase + fes[PER50]) * 100000.0); fprintf(fdes, "short @90per %f mid @90per %f long @90per %f \n", (ship_archi.ocvbase + fes[PER90])* 100.0, (ship_archi.ocvbase + fes[PER90])* 10000.0, (ship_archi.ocvbase + fes[PER90]) * 100000.0); fprintf(fdes, "\n"); fprintf(fdes, "defensive combat mass %f \n", ship_archi.dcvmass); fprintf(fdes, "defensive combat base %f \n", ship_archi.dcvbase); fprintf(fdes, PRF_PER0(dcv) ADD_PER0(ship_archi.dcvbase)); fprintf(fdes, PRF_PER20(dcv) ADD_PER20(ship_archi.dcvbase)); fprintf(fdes, PRF_PER40(dcv) ADD_PER40(ship_archi.dcvbase)); fprintf(fdes, "\n"); fprintf(fdes, "defensive screen mass %f \n", ship_archi.dscmass); fprintf(fdes, "defensive screen base %f \n", ship_archi.dscbase); fprintf(fdes, PRF_PER0(dsc) SCAL_PER0(ship_archi.dscbase)); fprintf(fdes, PRF_PER20(dsc) SCAL_PER20(ship_archi.dscbase)); fprintf(fdes, PRF_PER40(dsc) SCAL_PER40(ship_archi.dscbase)); fprintf(fdes, "\n"); fprintf(fdes, "internal energy units %f \n", ship_archi.isyseunits); fprintf(fdes, "internal energy mass %f \n", ship_archi.isysmass); fprintf(fdes, "\n"); fprintf(fdes, "cryogenic energy units %f \n", ship_archi.cryeunits); fprintf(fdes, "cryogenic energy mass %f \n", ship_archi.crymass); fprintf(fdes, "\n"); fprintf(fdes, "floor mass %f \n", ship_archi.flmass); fprintf(fdes, "hull damage value %f \n", ship_archi.hudv); fprintf(fdes, "hull pips %f \n", ship_archi.hpips); fprintf(fdes, "hull mass %f \n", ship_archi.humass); fprintf(fdes, "\n"); fprintf(fdes, "contra-gravity mass %f \n", ship_archi.cgmass); if(ship_archi.tl < 15.0){ fprintf(fdes, "\nfussion micro atomic technology for gravatics \n"); fprintf(fdes, "contra-gravity eunits %f \n", ship_archi.cgunits); fprintf(fdes, "contra-gravity range scalar %f \n", ship_archi.cgrange); } else { if(ship_archi.tl < 19.0){ fprintf(fdes, "\nmicro atomic technology plus partial direct matter to"); fprintf(fdes, "energy gravatics \n"); } else fprintf(fdes, "\ndirect matter to energy garvatics \n"); fprintf(fdes, PRF_PER0(cg) SCAL_PER0(ship_archi.cgunits)); fprintf(fdes, PRF_PER20(cg) SCAL_PER20(ship_archi.cgunits)); fprintf(fdes, PRF_PER40(cg) SCAL_PER40(ship_archi.cgunits)); fprintf(fdes, "\n"); fprintf(fdes, PRF_PER0(cg-range) SCAL_PER0(ship_archi.cgrange)); fprintf(fdes, PRF_PER20(cg-range) SCAL_PER20(ship_archi.cgrange)); fprintf(fdes, PRF_PER40(cg-range) SCAL_PER40(ship_archi.cgrange)); } fprintf(fdes, "\n"); fprintf(fdes, "total ship mass %f \n", ship_archi.tsm); fprintf(fdes, "base ship mass %f \n", ship_archi.bsm); fprintf(fdes, "\n"); fprintf(fdes, "hyperdrive mass %f \n", ship_archi.jumass); fprintf(fdes, "hyperdrive jump base %f \n", ship_archi.jubase); if(ship_archi.tl < 15.0){ fprintf(fdes, "\n"); fprintf(fdes, "fussion micro atomic technology for star drive \n"); fprintf(fdes, PRF_PER0(ju) SCAL_PER0(ship_archi.jubase)); fprintf(fdes, PRF_PER20(ju) SCAL_PER20(ship_archi.jubase)); fprintf(fdes, PRF_PER40(ju) SCAL_PER40(ship_archi.jubase)); } else{ if(ship_archi.tl < 19.0){ fprintf(fdes, "\n"); fprintf(fdes, "micro atomic plus partial direct matter to energy "); fprintf(fdes, "stardrive \n"); fprintf(fdes, PRF_PER0(ju-1day-fixed) SCAL_PER0(ship_archi.jubase)); fprintf(fdes, PRF_PER20(ju-1day-fixed) SCAL_PER20(ship_archi.jubase)); fprintf(fdes, PRF_PER40(ju-1day-fixed) SCAL_PER40(ship_archi.jubase)); fprintf(fdes, PRF_PER0(ju-5day-fixed) SCAL_PER0(ship_archi.jubase * 5)); fprintf(fdes, PRF_PER20(ju-5day-fixed) SCAL_PER20(ship_archi.jubase * 5)); fprintf(fdes, PRF_PER40(ju-5day-fixed) SCAL_PER40(ship_archi.jubase * 5)); fprintf(fdes, PRF_PER0(ju-20day-fixed) SCAL_PER0(ship_archi.jubase * 20)); fprintf(fdes, PRF_PER20(ju-20day-fixed) SCAL_PER20(ship_archi.jubase * 20)); fprintf(fdes, PRF_PER40(ju-20day-fixed) SCAL_PER40(ship_archi.jubase * 20)); } else { fprintf(fdes, "\n"); fprintf(fdes, "direct energy to matter stardrive \n"); fprintf(fdes, PRF_PER0(ju-par-hour) SCAL_PER0(ship_archi.jubase)); fprintf(fdes, PRF_PER20(ju-par-hour) SCAL_PER20(ship_archi.jubase)); fprintf(fdes, PRF_PER40(ju-par-hour) SCAL_PER40(ship_archi.jubase)); } } fprintf(fdes, "\n jump parameters at two times normal mass \n"); if(ship_archi.tl < 15.0){ fprintf(fdes, "\n"); fprintf(fdes, "fussion micro atomic technology for star drive \n"); fprintf(fdes, PRF_PER0(ju) SCAL_PER0(ship_archi.jubase2)); fprintf(fdes, PRF_PER20(ju) SCAL_PER20(ship_archi.jubase2)); fprintf(fdes, PRF_PER40(ju) SCAL_PER40(ship_archi.jubase2)); } else{ if(ship_archi.tl < 19.0){ fprintf(fdes, "\n"); fprintf(fdes, "micro atomic plus partial direct matter to energy "); fprintf(fdes, "stardrive \n"); fprintf(fdes, PRF_PER0(ju-1day-fixed) SCAL_PER0(ship_archi.jubase2)); fprintf(fdes, PRF_PER20(ju-1day-fixed) SCAL_PER20(ship_archi.jubase2)); fprintf(fdes, PRF_PER40(ju-1day-fixed) SCAL_PER40(ship_archi.jubase2)); fprintf(fdes, PRF_PER0(ju-5day-fixed) SCAL_PER0(ship_archi.jubase2 * 5)); fprintf(fdes, PRF_PER20(ju-5day-fixed) SCAL_PER20(ship_archi.jubase2 * 5)); fprintf(fdes, PRF_PER40(ju-5day-fixed) SCAL_PER40(ship_archi.jubase2 * 5)); fprintf(fdes, PRF_PER0(ju-20day-fixed) SCAL_PER0(ship_archi.jubase2 * 20)); fprintf(fdes, PRF_PER20(ju-20day-fixed) SCAL_PER20(ship_archi.jubase2 * 20)); fprintf(fdes, PRF_PER40(ju-20day-fixed) SCAL_PER40(ship_archi.jubase2 * 20)); } else { fprintf(fdes, "\n"); fprintf(fdes, "direct energy to matter stardrive \n"); fprintf(fdes, PRF_PER0(ju-par-hour) SCAL_PER0(ship_archi.jubase2)); fprintf(fdes, PRF_PER20(ju-par-hour) SCAL_PER20(ship_archi.jubase2)); fprintf(fdes, PRF_PER40(ju-par-hour) SCAL_PER40(ship_archi.jubase2)); } } fprintf(fdes, "\n jump parameters at 5 times normal mass \n"); if(ship_archi.tl < 15.0){ fprintf(fdes, "\n"); fprintf(fdes, "fussion micro atomic technology for star drive \n"); fprintf(fdes, PRF_PER0(ju) SCAL_PER0(ship_archi.jubase5)); fprintf(fdes, PRF_PER20(ju) SCAL_PER20(ship_archi.jubase5)); fprintf(fdes, PRF_PER40(ju) SCAL_PER40(ship_archi.jubase5)); } else{ if(ship_archi.tl < 19.0){ fprintf(fdes, "\n"); fprintf(fdes, "micro atomic plus partial direct matter to energy "); fprintf(fdes, "stardrive \n"); fprintf(fdes, PRF_PER0(ju-1day-fixed) SCAL_PER0(ship_archi.jubase5)); fprintf(fdes, PRF_PER20(ju-1day-fixed) SCAL_PER20(ship_archi.jubase5)); fprintf(fdes, PRF_PER40(ju-1day-fixed) SCAL_PER40(ship_archi.jubase5)); fprintf(fdes, PRF_PER0(ju-5day-fixed) SCAL_PER0(ship_archi.jubase5 * 5)); fprintf(fdes, PRF_PER20(ju-5day-fixed) SCAL_PER20(ship_archi.jubase5 * 5)); fprintf(fdes, PRF_PER40(ju-5day-fixed) SCAL_PER40(ship_archi.jubase5 * 5)); fprintf(fdes, PRF_PER0(ju-20day-fixed) SCAL_PER0(ship_archi.jubase5 * 20)); fprintf(fdes, PRF_PER20(ju-20day-fixed) SCAL_PER20(ship_archi.jubase5 * 20)); fprintf(fdes, PRF_PER40(ju-20day-fixed) SCAL_PER40(ship_archi.jubase5 * 20)); } else { fprintf(fdes, "\n"); fprintf(fdes, "direct energy to matter stardrive \n"); fprintf(fdes, PRF_PER0(ju-par-hour) SCAL_PER0(ship_archi.jubase5)); fprintf(fdes, PRF_PER20(ju-par-hour) SCAL_PER20(ship_archi.jubase5)); fprintf(fdes, PRF_PER40(ju-par-hour) SCAL_PER40(ship_archi.jubase5)); } } if(ship_archi.tl < 19.0){ fprintf(fdes, "\n"); fprintf(fdes, "manuever drive base %f \n", ship_archi.madgbase); fprintf(fdes, PRF_PER0(madg) SCAL_PER0(ship_archi.madgbase / ship_archi.tsm)); fprintf(fdes, PRF_PER20(madg) SCAL_PER20(ship_archi.madgbase / ship_archi.tsm)); fprintf(fdes, PRF_PER40(madg) SCAL_PER40(ship_archi.madgbase / ship_archi.tsm)); fprintf(fdes, "manuever drive mass %f \n", ship_archi.madmass); fprintf(fdes, "\n manuever drive at 2 times ship tonnage \n"); fprintf(fdes, PRF_PER0(madg) SCAL_PER0(ship_archi.madgbase / (ship_archi.tsm * 2))); fprintf(fdes, PRF_PER20(madg) SCAL_PER20(ship_archi.madgbase / (ship_archi.tsm * 2))); fprintf(fdes, PRF_PER40(madg) SCAL_PER40(ship_archi.madgbase / (ship_archi.tsm * 2))); fprintf(fdes, "manuever drive base at 5 times ship tonnage \n"); fprintf(fdes, PRF_PER0(madg) SCAL_PER0(ship_archi.madgbase / (ship_archi.tsm * 5))); fprintf(fdes, PRF_PER20(madg) SCAL_PER20(ship_archi.madgbase / (ship_archi.tsm * 5))); fprintf(fdes, PRF_PER40(madg) SCAL_PER40(ship_archi.madgbase / (ship_archi.tsm * 5))); } fprintf(fdes, "\n short range scan range \n"); fprintf(fdes, PRF_PER0(sc) ADD_PER0(ship_archi.scbase)); fprintf(fdes, PRF_PER20(sc) ADD_PER20(ship_archi.scbase)); fprintf(fdes, PRF_PER40(sc) ADD_PER40(ship_archi.scbase)); CONF(Green One subspace, PER05, PER05, PER05, PER15, PER25, PER10, PER0, PER10, PER25); CONF(Green Two subspace, PER05, PER05, PER05, PER15, PER50, PER25, PER0, PER05, PER0); CONF(Green One hyperspace, PER05, PER05, PER05, PER05, PER05, PER05, PER30, PER05, PER35); CONF(Green Two hyperspace, PER0, PER0, PER0, PER0, PER0, PER05, PER90, PER05, PER0); CONF(Yellow One, PER12, PER12, PER12, PER12, PER12, PER12, PER0, PER05, PER23); CONF(Yellow Two, PER25, PER12, PER12, PER25, PER05, PER05, PER0, PER05, PER12); CONF(Yellow Three, PER25, PER12, PER23, PER25, PER05, PER05, PER0, PER05, PER0); CONF(Red One, PER10, PER05, PER30, PER30, PER10, PER0, PER0, PER0, PER15); CONF(Red Two, PER15, PER05, PER35, PER35, PER10, PER0, PER0, PER0, PER0); CONF(Red Three, PER0, PER0, PER50, PER45, PER05, PER0, PER0, PER0, PER0); CONF(Black One, PER35, PER40, PER05, PER05, PER05, PER05, PER0, PER05, PER0); CONF(Gray One, PER10, PER10, PER10, PER10, PER10, PER10, PER10, PER10, PER20); CONF(Blue One, PER05, PER05, PER05, PER05, PER05, PER30, PER30, PER0, PER15); fprintf(fdes, "\n energy units at 1 percen %d \n", (((int)(fes[PER05] / 5.0) + (GRAN /2)) / GRAN ) * GRAN); fflush(fdes); } All opinions and material above is the responsibility of the originator. Submissions: traveller@dadla.wr.tek.com, or uunet!dadla.wr.tek.com!traveller Administrator: traveller-request@dadla.wr.tek.com (James Perkins) The TML is made possible by facilities provided by Tektronix, Inc. ------- End of Forwarded Message