// Holds functions needed to play the game const variables = require("./variables.js"); const death = require("./deathscreens.js"); const poi = require("./poiscreens.js"); module.exports = { eatFood, calcSickPoints, scavenge, checkLose, calcLocation, calcEncounter, travelScreen, checkPOI, } function eatFood() { if (variables.food == 0) { variables.health - 3*variables.travelSpeed } else if (variables.isSick == true) { variables.food = variables.food-((variables.travelSpeed*variables.foodAmt)+variables.sickSeverity); } else { variables.food = variables.food-(variables.travelSpeed*variables.foodAmt); } variables.health = variables.health+(5*variables.foodAmt); } function calcSickPoints() { if (variables.isSick = true) { variables.sickPoints = variables.sickPoints+((variables.sickSeverity-(0.5*variables.foodAmt))+(0.5*(variables.travelSpeed+variables.radSeverity))); } } function scavenge() { // Rolls a random number between 1 and 100 to see which loot table you get, then picks a random item from it. ADD COOLDOWN! if (variables.daysSinceScav < 20 ) { console.log("You must wait "+(20-variables.daysSinceScav)+" days until you can scavenge again") } else { let luck = variables.randomNumber(1,100); if (luck <= 20) { let group = 0; let random = variables.randomNumber(variables.lootTables[group][0], variables.lootTables[group][3]); inventory.push(random); } else if (luck <= 40) { let group = 1; let random = variables.randomNumber(variables.lootTables[group][0], variables.lootTables[group][3]); inventory.push(random); } else if (luck <= 60) { let group = 2; let random = variables.randomNumber(variables.lootTables[group][0], variables.lootTables[group][3]); inventory.push(random); } else if (luck <= 80) { let group = 3; let random = variables.randomNumber(variables.lootTables[group][0], variables.lootTables[group][3]); inventory.push(random); } else if (luck <= 100) { let group = 4; let random = variables.randomNumber(variables.lootTables[group][0], variables.lootTables[group][3]); inventory.push(random); } } } function checkLose() { // Checks to see if any lose conditions have been met if (variables.health <= 0 || variables.sickPoints >= 50) { death.deathScreen(); } if (variables.day >= 365) { death.timeDeath(); } } function calcLocation() { // Calculates your location in the world using location points, You move your move speed per day, but 3/4 of it if you are sick if (variables.travelSpeed == 1) { if (variables.isSick == true) { variables.location = variables.location+0.75; } else { variables.location++; } } if (variables.travelSpeed == 2) { if (variables.isSick == true) { variables.location = variables.location+1.5; } else { variables.location = variables.location+2; } } if (variables.travelSpeed == 3) { if (variables.isSick == true) { variables.location = variables.location+2.25; } else { variables.location = variables.location+3; } } if (variables.location > 300) { variables.location = 300; } } // Rundown on how I did this: /** * calcEncounter() checks what faction territory you are in and pipes the respective faction into initilizeEncounter(). * * initEncounter() is pretty much the same however you can use forceFaction (set to true) to bypass the random raider/abomination chance. * forceFaction will always be false unless under certian circumstances (eg. Lost Hills, Legion Territory, Malcom Holmes). * Turns out the fight/flee variables work exactly how I want so I did not change them. * * encounterMenuMaker() was changed to account for forceFaction. If forceFaction is set to true, EMM's equivilant forceOpt will take its value. * If true it runs the code you had before, no changes. If it is false it will roll a dice to see if you get the normal faction, given by your switch statement, * or a radier/abomination. If it is a radier/abomination it will then roll a 50/50. The code for both is the same as the default faction code except that * 'faction' will just be 'raider' or 'abomination' instead of the default. * * I also implemented auto difficulty scaling. Instead of piping in 'encounterDiffOne' you just input the interger of it. This is because you cant * use a string as a variable name and or whatever. Just trust me, this is the only way it works. initEncounter() will figure it out on the otherside. */ function calcEncounter() { if (variables.randomNumber(1,100) <= 20) { if (variables.location >= 255) { if (variables.locationA > variables.locationB) { if ((variables.locationA >= 5 && variables.locationA < 17) || (variables.locationA >= 23 && variables.locationA < 40)) { poi.initializeEncounter(NCR,4,true,true,false); } if (variables.locationB >= 40) { poi.initializeEncounter(NCR,5,true,true,false); } } else if (variables.locationA < variables.locationB) { if ((variables.locationB >= 0 && variables.locationB < 30) || (variables.locationB >= 40 && variables.locationB < 80)) { poi.initializeEncounter(abomination,3,true,true,false) } if ((variables.locationB >= 30 && variables.locationB < 40) || (variables.locationB >= 90)) { poi.initializeEncounter(NCR,5,true,true,false) } if (variables.locationB >= 80 && variables.locationB < 90) { poi.initializeEncounter(enclave,4,true,true,false) } } else { if (variables.location >= 5 && variables.location < 50) { poi.initializeEncounter(abomination,1,true,true,false) } if (variables.location >= 50 && variables.location < 200) { poi.initializeEncounter(MWBOS,2,true,true,false) } if (variables.location >= 200 && variables.location < 255) { poi.initializeEncounter(legion,3,true,true,false) } } } } } function checkPOI() { if (variables.location < 300) { if (variables.location >= (poi.pois[poi.poiCounter].location)-3 && variables.location <= poi.pois[poi.poiCounter].location) } if (variables.locationA > 0) { } if (variables.locationB > 0) { } } var travelFrame = 0; function travelScreen() { if (travelFrame < 0 || travelFrame > 1) { travelFrame = 0; } else if (travelFrame == 0) { console.clear(); console.log("┌──────────────────────────────────────┐"); console.log("│ │"); console.log("│ │"); console.log("│ │"); console.log("│ │"); console.log("│ ◜─◝ │"); console.log("│ ◟_◞ │"); console.log("│ /║\\ │"); console.log("│ \\V/ │"); console.log("│ / \\ │"); console.log("│ ▁\\ ▔╹ │"); console.log("│======================================│"); console.log("│ . . - . . - . . . - │"); console.log("│ - . . . . . . - . .│"); console.log("└──────────────────────────────────────┘"); console.log("Press [ENTER] to open Pip-Boy"); console.log("Current Health: "+variables.health); console.log("Food Amt: "+variables.food); console.log("Distance to next POI: "); travelFrame++ } else { console.clear(); console.log("┌──────────────────────────────────────┐"); console.log("│ │"); console.log("│ │"); console.log("│ │"); console.log("│ │"); console.log("│ ◜─◝ │"); console.log("│ ◟_◞ │"); console.log("│ /║\\ │"); console.log("│ \\V/ │"); console.log("│ \\ │"); console.log("│ ▁│▔╹ │"); console.log("│======================================│"); console.log("│ - . - . . . - . - . │"); console.log("│ - . . - . . . - .│"); console.log("└──────────────────────────────────────┘"); console.log("Press [ENTER] to open Pip-Boy"); console.log("Current Health: "+variables.health); console.log("Food Amt: "+variables.food); console.log("Distance to next POI: "); travelFrame-- } } function haltTravelScreen() { }