This is message 1112 of the Traveller Archives. It contains PC programs for use during a gaming session. ------- Forwarded Message Bundle: 96 Archive-Message-Number: 1112 Subject: PC portable programs To: traveller%dadla.wr.tek.com@nsfnet-relay.ac.uk Date: Fri, 9 Mar 90 14:51:19 GMT From: cs_s424%ux.kingston.ac.uk@nsfnet-relay.ac.uk Approved: by traveller@dadla.wr.tek.com Fri Mar 9 20:31:54 PST 1990 - -------- Hi Thanks to all those who responded to my question about the use of portable IBM PC's (and clones) during a game. I enclose two poxy programs to which I use in addition to the npc generator and name generator programs from the archive-server. The first is i simple prog to expand a planets upp to a full description (just to save you looking it up) and the second determiones weapon availability based on tech/law level of the world your on. These programs are written by me and are TOTALLY USELESS ! (unless you are running them during the game.) I compiled them using TurboC v2.0 but they are so trivial they would require little (or no) conversion. Anybody still got anymore ideas of useful programs to run DURING a game? _____ /____/ / / __ / / /__/_/__/_/___ ------------------ | | | --------------------------------------------------------------- - --[ ]-[ ]-[ ]-- Paul J Netherwood e-mail: P.J.Netherwood@uk.ac.kingston | | | Research - --[ ]-[ ]-[ ]-- | | | School of Computer Science and Electronic Systems, - --[ ]-[ ]-[ ]-- |/ingston |>olytechnic, Penrhyn Road, Surrey KT1 2EE, UK. | | | --|\--------|-------------------------------------------------- \ - ---------------------------------- /**************************************************************************/ /* */ /* Program Name : full_upp.c */ /* */ /* Description : Expands the upp for a planetary system to a full */ /* description. */ /* */ /* Compiled on TurboC 2.0 using: */ /* */ /* tcc -mt -lt full_upp.c */ /* */ /*------------------------------------------------------------------------*/ /* Paul J. Netherwood Kingston Polytechnic | 28th Feb 1990 */ /* | */ /*------------------------------------------------------------------------*/ /* Modification history: */ /*------------------------------------------------------------------------*/ /* none | */ /**************************************************************************/ #include #include void main(int argc, char *argv[]) { int size, atmos, hydro, pop, gov; int cloudiness; if(argc == 1) { printf("Usage: full_upp \n"); return; } printf("Planetary details:\n"); /* starport */ printf("Starport class %c, ",toupper(argv[1][0])); switch(tolower(argv[1][0])) { case 'a' : printf("Excellent quality installation\n"); printf("Refined fuel available. Annual maintenance overhaul available. Shipyard\n"); printf("capabable of constructing starships and non-starships present.\n"); break; case 'b' : printf("Good quality installation\n"); printf("Refined fuel available. Annual maintenance overhaul available. Shipyard\n"); printf("capabable of constructing non-starships present.\n"); break; case 'c' : printf("Routine quality installation\n"); printf("Only unrefined fuel available. Reasonable repair facilities present.\n"); break; case 'd' : printf("Poor quality installation\n"); printf("Only unrefined fuel available. No repair facilities present.\n"); break; case 'e' : printf("Frontier installation\n"); printf("Essentially a marked spot of bedrock with no fuel, facilities, or\n"); printf("bases present.\n"); break; case 'f' : printf("Spaceport:Good quality installation\n"); printf("Only unrefined fuel available. Minor repair facilities.\n"); printf("Spaceport used mainly for inter-system travel.\n"); break; case 'g' : printf("Spaceport:Poor quality installation\n"); printf("Only unrefined fuel available. No repair facilities.\n"); printf("Spaceport used mainly for inter-system travel.\n"); break; case 'h' : printf("Spaceport:Primitive Installation; no facilities.\n"); printf("Spaceport used mainly for inter-system travel.\n"); break; case 'y' : printf("No spaceport.\n"); break; case 'x' : printf("No starport. No provision is made for any ship landings.\n"); break; default: printf("Not a listed starport type\n"); } /* size */ switch(tolower(argv[1][1])) { case '0' : printf("Asteroid/Planetoid Belt."); break; case 'r' : printf("Ring (around a world)\n"); break; case 's' : printf("Small World (200km) Surface gravity of .024 of a G\n"); break; case '1' : printf("Small world. Surface gravity of .122 of a G \n"); break; case '2' : printf("Small world. Surface gravity of .24 of a G \n"); break; case '3' : printf("Small world. Surface gravity of 37.7 of a G\n"); break; case '4' : printf("Small world. Surface gravity of .5 of a G \n"); break; case '5' : printf("Medium sized world. Surface gravity of .625 of a G \n"); break; case '6' : printf("Medium sized world. Surface gravity of .84 of a G \n"); break; case '7' : printf("Medium sized world. Surface gravity of .875 of a G \n"); break; case '8' : printf("Medium sized world. Surface gravity 1 G \n"); break; case '9' : printf("Large world. Surface gravity of 1.12 G's \n"); break; case 'a' : printf("Large world. Surface gravity of 1.25 G's \n"); break; default : printf("Non standard world size."); } if(tolower(argv[1][1]) == 'a') size = 10; else if(tolower(argv[1][1]) == 'r' || tolower(argv[1][1]) == 's') size = 0; else size = (int)argv[1][1] - 48; if(size > 0 && size <= 10) printf("World diameter is %d miles (%d km).\n",(size*1000),(size*1600)); /* atmos */ if((int)argv[1][2] >= 141) atmos = (int)argv[1][2] - 131; else atmos = (int)argv[1][2] - 48; switch(tolower(argv[1][2])) { case '0' : printf("No atmosphere. Vacc suit needed.\n"); break; case '1' : printf("Trace atmosphere. Vacc suit needed.\n"); break; case '2' : printf("Very thin, tainted atmosphere. Combination mask needed.\n"); break; case '3' : printf("Very thin atmosphere. Compressor mask needed.\n"); break; case '4' : printf("Thin, tainted atmosphere. Filter mask needed.\n"); break; case '5' : printf("Thin atmosphere.\n"); break; case '6' : printf("Standard atmosphere.\n"); break; case '7' : printf("Standard, tainted atmosphere. Filter mask needed.\n"); break; case '8' : printf("Dense atmosphere.\n"); break; case '9' : printf("Dense, tainted atmosphere. Filter mask needed.\n"); break; case 'a' : printf("Exotic atmosphere. Oxygen tanks needed.\n"); break; case 'b' : printf("Corrosive atmosphere. Vacc suit or protective suit needed.\n"); break; case 'c' : printf("Insidious atmosphere. Vacc suit or protective suit needed.\n"); printf("Although it will only last for 2 to 12 hours\n"); break; case 'd' : printf("Dense, High atmosphere. The air pressure at sea (or lower)\n"); printf("levels is too great to support life, but at higher altitudes,\n"); printf("the atmosphere is breathable.\n"); break; case 'e' : printf("The worlds surface is ellipsoidal, not spherical in shape.\n"); printf("Because the atmosphere remains spherical, surface atmospheric\n"); printf("pressure ranges from very high at the middle to very low at the\n"); printf("ends. Breathable bands may exist at some point within the range\n"); printf("of pressure.\n"); break; case 'f' : printf("Thin, Low atmosphere. The world is a large, massive one with a thin\n"); printf("atmosphere which settles in the lowest levels of the terrain. As a\n"); printf("result, the atmosphere is unbreathable at most altitudes, but is\n"); printf("breathable at very low atltitudes (as in depressions or deep valleys).\n"); default: printf("Non standard atmosphere classification.\n"); } /* hydro */ switch(tolower(argv[1][3])) { case '0' : hydro = 0; printf("No free standing water.\n"); break; case '1' : case '2' : case '3' : case '4' : case '5' : case '6' : case '7' : case '8' : case '9' : if(tolower(argv[1][3]) == 'a') hydro = 10; else hydro = (int)argv[1][3] - 48; printf("%-2d percent water. ",hydro * 10); switch(hydro) { case 0 : cloudiness = 0; break; case 1 : cloudiness = 0; break; case 2 : cloudiness = 10; break; case 3 : cloudiness = 10; break; case 4 : cloudiness = 20; break; case 5 : cloudiness = 30; break; case 6 : cloudiness = 40; break; case 7 : cloudiness = 50; break; case 8 : cloudiness = 60; break; case 9 : cloudiness = 70; break; case 10: cloudiness = 70; break; } if(atmos >= 10) if(cloudiness == 70) cloudiness = 100; else cloudiness += 40; else if(atmos < 3 && cloudiness > 20) cloudiness = 20; else if(atmos == 14) cloudiness /= 2; printf("Cloud cover is %d percent\n",cloudiness); break; case 'a' : printf("No land masses.\n"); break; default : printf("Non standard hydrographics classification.\n"); } /* pop */ pop = (int)argv[1][4] - 48; switch(tolower(argv[1][4])) { case '0' : printf("No inhabitants.\n"); break; case '1' : printf("Tens of inhabitants.\n"); break; case '2' : printf("Hundreds of inhabitants.\n"); break; case '3' : printf("Thousands of inhabitants.\n"); break; case '4' : printf("Tens of thousands of inhabitants.\n"); break; case '5' : printf("Hundreds of thousands of inhabitants.\n"); break; case '6' : printf("Millions of inhabitants.\n"); break; case '7' : printf("Tens of millions of inhabitants.\n"); break; case '8' : printf("Hundreds of millions of inhabitants.\n"); break; case '9' : printf("Billions of inhabitants.\n"); break; case 'a' : pop = 10; printf("Tens of billions of inhabitants.\n"); break; default : printf("Non standard population classification.\n"); } /* Government */ gov = (int)argv[1][5] - 48; switch(tolower(argv[1][5])) { case '0' : printf("No government structure. In many cases, family bonds predominate.\n"); break; case '1' : printf("Company/Corporation. Government by a company managerial elite; citizens\n"); printf("are company employees.\n"); break; case '2' : printf("Participating Democracy. Government by advice and consent of the citizen.\n"); break; case '3' : printf("Self-Perpetuating Oligarchy. Government by a restricted minority, with\n"); printf("little or no input from the masses.\n"); break; case '4' : printf("Representative Democracy. Government by elected representatives.\n"); break; case '5' : printf("Feudal Technocracy. Government by specific individuals for those who\n"); printf("agree to be ruled. Relationships are based on peformance of technical\n"); printf("activities which are mutually beneficial.\n"); break; case '6' : printf("Captive Government. Government by a leadership answerable to an outside\n"); printf("group; a colony or conqured area.\n"); break; case '7' : printf("Balcanization. No central ruling authority exists; rival governments compete\n"); printf("for control.\n"); break; case '8' : printf("Civil Service Bureaucracy. Government by agencies employing individuals\n"); printf("selected for their expertise.\n"); break; case '9' : printf("Impersonal Bureaucracy. Government by agencies which are insulated from\n"); printf("the governed.\n"); break; case 'a' : printf("Charismatic Dictator. Government by a single leader enjoying the confidence\n"); printf("of the citizens.\n"); break; case 'b' : printf("Non-Charismatic Dictator. A previous charismatic dictator has been replaced\n"); printf("by a leader through normal channels.\n"); break; case 'c' : printf("Charismatic Oligarchy. Government by a selected group, organisation, or class\n"); printf("enjoying the overwhelming confidence of the citizenry.\n"); break; case 'd' : printf("Religious Dictatorship. Government by a religious organisation without regard\n"); printf("to the needs of the citizenry.\n"); break; default : printf("Non standard government classification.\n"); } /* law */ printf("Law Level %c: ",toupper(argv[1][6])); switch(tolower(argv[1][6])) { case '0' : printf("No weapon prohibitions.\n"); break; case '1' : printf("Body pistols undetectable by standard detectors, \n"); printf("expolosives (bombs, grenades), and poison gas prohibited.\n"); break; case '2' : printf("Portable energy weapons (laser carbine, laser rifle)\n"); printf("prohibited. Ships gunnery not affected.\n"); break; case '3' : printf("Weapons of a strict millitary nature (machine guns,\n"); printf("automatic rifles) prohibited.\n"); break; case '4' : printf("Light assault weapons (sub-machine guns) prohibited.\n"); break; case '5' : printf("Personal concealable firearms (such as pistols and\n"); printf("revolvers) prohibited.\n"); break; case '6' : printf("Most firearms (all except shotguns) prohibited. The carrying of\n"); printf("any type of weapon openly is discouraged.\n"); break; case '7' : printf("Shotguns are prohibited.\n"); break; case '8' : printf("Long bladed weapons (all but daggers) are controlled, and open\n"); printf("possesion is prohibited.\n"); break; case '9' : printf("Possession of any weapon outside one's residence is prohibited.\n"); break; default : printf("Possession of any weapon is prohibited.\n"); break; } /* tech */ printf("Tech Level %c: ",toupper(argv[1][7])); switch(tolower(argv[1][7])) { case '0' : printf("Stone Age. Primitive.\n"); break; case '1' : printf("Bronze Age to Middle Ages.\n"); break; case '2' : printf("circa 1400 to 1700\n"); break; case '3' : printf("circa 1700 to 1860\n"); break; case '4' : printf("circa 1860 to 1900\n"); break; case '5' : printf("circa 1900 to 1939\n"); break; case '6' : printf("circa 1940 to 1969\n"); break; case '7' : printf("circa 1970 to 1979\n"); break; case '8' : printf("circa 1980 to 1989\n"); break; case '9' : printf("circa 1990 to 2000\n"); break; case 'a' : printf("Interstellar community\n"); break; case 'b' : printf("Average Imperial tech level\n"); break; case 'c' : printf("Average Imperial tech level\n"); break; case 'd' : printf("Above average Imperial tech level\n"); break; case 'e' : printf("Above average Imperial tech level\n"); break; case 'f' : printf("Technical maximum Imperial\n"); break; case 'g' : printf("Occasional non-Imperial\n"); break; default : printf("Non standard tech level classification.\n"); } /* Trade classifications */ printf("Trade Classifications: "); if(atmos >= 4 && atmos <= 9 && hydro >= 4 && hydro <= 8 && pop >= 5 && pop <= 7) printf("Agricultural. "); if(atmos < 3 && hydro < 3 && pop >= 6) printf("Non-Agricultural. "); switch(atmos) { case 0 : case 1 : case 2 : case 4 : case 7 : case 9 : if(pop >= 9) printf("Industrial. "); } if(pop < 6) printf("Non-Industrial. "); if( (atmos == 6 || atmos == 8) && pop >= 6 && pop <= 8 && gov >= 4 && gov <= 9) printf("Rich. "); if(atmos >= 2 && atmos <= 5 && hydro < 3) printf("Poor. "); if(hydro == 10) printf("Water World. "); if(hydro == 0 && atmos >= 2) printf("Desert World. "); if(atmos == 0) printf("Vacuum World. "); if(tolower(argv[1][1]) == '0') printf("Asteroid Belt. "); if( (atmos == 0 || atmos == 1) && hydro >= 1) printf("Ice Capped. "); } - ----------------------------------- /**************************************************************************/ /* */ /* Program Name : guns.c */ /* */ /* Description : Determines the availability of a requested weapon */ /* based on the tech/law level of the world were you */ /* are trying to purchase it. If the weapon is available */ /* a listed price modifier is given and the delivery time.*/ /* This is based on an old, old White Dwarf article by */ /* Steve Cook entitled 'Guns for Sale'. */ /* */ /* Compiled using TurboC v2.0 (Ansii C) with: */ /* tcc -mt -lt guns (flags just make it a .com) */ /* */ /* Conversion to unix/non-ansii C will just require */ /* removal of a few #includes and renaming of the */ /* randomising functions. */ /* */ /* Additional weapons may be added to the table just by */ /* adding a new line in the following format: */ /* "gun",,,, */ /* */ /*------------------------------------------------------------------------*/ /* Paul J. Netherwood Kingston Polytechnic |8th Mar 1990 */ /* | */ /*------------------------------------------------------------------------*/ /* Modification history: */ /*------------------------------------------------------------------------*/ /* none | */ /**************************************************************************/ #include #include #include #include #include #include /* Declaration and initialisation of gun table */ struct base_chance { char *gun; int chance, /* Base percentage chance weapon is available */ tech_min, /* Minimum tech level required to make weapon */ law_max; /* Maximum law level that weapon is allowed */ } gun_table[] = { /* Weapon */ /* Base Chance *//* Tech *//* Law */ "Accelerator Rifle", 50, 9, 2, "ACR", 40, 10, 2, "Assault Rifle", 60, 7, 3, "Auto Cannon", 1, 8, 2, "Auto Pistol", 55, 5, 4, "Auto Rifle", 35, 6, 3, "Auto Shotgun", 30, 6, 3, "Bayonet", 75, 3, 7, "Blade", 75, 3, 7, "Body Pistol", 60, 7, 0, "Broadsword", 45, 2, 7, "Carbine", 60, 5, 5, "Cutlass", 55, 3, 7, "Dagger", 95, 1, 8, "FGMP 14", 1, 14, 1, "FGMP 15", 1, 15, 1, "Flamethrower", 1, 6, 1, "Gauss Rifle", 25, 12, 2, "Halberd", 40, 2, 7, "Heavy Body Pistol", 40, 7, 0, "Laser Carbine", 20, 8, 1, "Laser Rifle", 20, 9, 1, "LAG", 40, 8, 3, "Needle Rifle", 10, 14, 1, "PGMP 12", 2, 12, 1, "PGMP 13", 2, 13, 1, "PGMP 14", 1, 14, 1, "Plasma Pistol", -1, 16, 1, "Pike", 40, 1, 7, "RAM GL", 25, 8, 0, "Revolver", 70, 4, 4, "Rifle", 55, 5, 5, "Shock Disablers", 20, 9, 4, "Shotgun", 70, 4, 6, "SMG", 35, 5, 3, "Snub Pistol", 50, 8, 4, "Snub Rifle", 35, 8, 5, "Spear", 60, 0, 7, "Stun Pistol", 30, 8, 4, "Stun Rifle", 25, 8, 5, "Submachine Pistol", 40, 7, 3, "Sword", 50, 1, 7, "Tonite Pistol", 20, 12, 1, "Tonite Carbine", 30, 12, 1, "VRF Gauss Gun", 1, 10, 3, "Warper", -1, 17, 1, "Wiper", -1, 18, 1 }; #define NKEYS ( sizeof gun_table / sizeof(struct base_chance) ) #define MAX_ACROSS 3 /* maximum gun names displayed across screen */ #define d(x) ((rand() % x) + 1) void main(void) { int n,m,tech,law,streetwise,bribe,modifier,total_chance,price_mod,roll; char choice; long now; /* Randomise */ srand(time(&now) % 37); printf("Weapon Availability\n"); /* Display all the weapons */ for(n = 0; n < NKEYS; n += MAX_ACROSS) { /* Display one row of weapons */ for(m = 0; m < MAX_ACROSS; m++) { if(n+m >= NKEYS) break; printf("%3d: %-20s ",n+m,gun_table[n+m].gun); } printf("\n"); /* Next line */ } printf("Choose weapon: "); scanf("%d",&n); printf("\nThe %s is a tech level %d weapon and is banned\n", gun_table[n].gun,gun_table[n].tech_min); printf("at law levels %d and over\n",gun_table[n].law_max+1); if(gun_table[n].chance < 0) { printf("The %s is not available through know channels\n",gun_table[n].gun); return; } if(gun_table[n].chance < 10) printf("Chance of finding one of these is pretty slim\n"); else if(gun_table[n].chance < 50) printf("Availabilty for this weapon is low\n"); else printf("Availabilty for this weapon is high\n"); printf("\nEnter the worlds tech level: "); scanf("%d",&tech); printf("Enter the worlds law level: "); scanf("%d",&law); total_chance = gun_table[n].chance; /* Get base chance */ price_mod = 0; /* Tech level modifier */ if(tech >= gun_table[n].tech_min) { modifier = (tech - gun_table[n].tech_min) * 10; if(modifier > 50) modifier = 50; } else modifier = (tech - gun_table[n].tech_min) * 15; total_chance += modifier; /* Law level modifier */ if(law >= gun_table[n].law_max) { modifier = (law - gun_table[n].law_max) * -25; price_mod = (law - gun_table[n].law_max) * 15; } else { modifier = (gun_table[n].law_max - law) * 10; price_mod = (gun_table[n].law_max - law) * -5; if(modifier > 30) modifier = 30; } total_chance += modifier; printf("\nPurchased at a general shop? [y/n]"); do choice = tolower(getch()); while(choice != 'y' && choice != 'n'); if(choice == 'y') { total_chance -= 35; price_mod += 30; } else { printf("\nPurchased at a non-specialist shop? (e.g hunting shop) [y/n]"); do choice = tolower(getch()); while(choice != 'y' && choice != 'n'); if(choice == 'y') { total_chance -= 15; price_mod += 10; } } printf("\nStreetwise skill (enter 0 for no skill): "); scanf("%d",&streetwise); total_chance += streetwise * 10; price_mod -= streetwise * 5; printf("\nPurchased on the black market? [y/n]"); do choice = tolower(getch()); while(choice != 'y' && choice != 'n'); if(choice == 'y') { if(law >= gun_table[n].law_max) { modifier = (law - gun_table[n].law_max) * 15; price_mod = (law - gun_table[n].law_max) * 25; total_chance += modifier; } printf("\nBribery skill (enter 0 for no skill): "); scanf("%d",&bribe); total_chance += bribe * 10; price_mod += bribe * 10; } if(d(100) <= total_chance) { printf("\n%s available for purchase at %-+d percent listed price\n", gun_table[n].gun,price_mod); roll = d(100); if(roll <= 50) printf("available straight away\n"); else if(roll <= 75) printf("available after %d hours\n",d(6) + d(6)); else if(roll <= 90) printf("available after %d days\n",d(6) + d(6)); else printf("available after %d weeks\n",d(6) + d(6)); } else printf("\nWeapon unavailable\n"); } ------- End of Forwarded Message