Added a working "forced encounter" function and a

yet to be functional natural encounter function.
This commit is contained in:
Caroline Foy 2025-04-12 09:38:55 -05:00
parent 6714250079
commit dbd27cfa7d
2 changed files with 206 additions and 143 deletions

View file

@ -2,150 +2,204 @@
import { randomNumber } from "./functions.js";
export function calcEncounter() {
if (randomNumber(1,100) <= 20) {
if (location >= 255) {
if (locationA > locationB) {
if ((locationA >= 5 && locationA < 17) || (locationA >= 23 && locationA < 40)) {
initializeEncounter(NCR,4,true,true,false);
}
if (locationB >= 40) {
initializeEncounter(NCR,5,true,true,false);
}
} else if (locationA < locationB) {
if ((locationB >= 0 && locationB < 30) || (locationB >= 40 && locationB < 80)) {
initializeEncounter(abomination,3,true,true,false)
}
if ((locationB >= 30 && locationB < 40) || (locationB >= 90)) {
initializeEncounter(NCR,5,true,true,false)
}
if (locationB >= 80 && locationB < 90) {
initializeEncounter(enclave,4,true,true,false)
}
} else {
if (location >= 5 && location < 50) {
initializeEncounter(abomination,1,true,true,false)
}
if (location >= 50 && location < 200) {
initializeEncounter(MWBOS,2,true,true,false)
}
if (location >= 200 && location < 255) {
initializeEncounter(legion,3,true,true,false)
}
}
//5-50 abominations, 51-200 MWBOS, 201-255 legion, a5-a40 NCR, b0-b30 abomination, b40-b80 abomination, b90+ NCR, b80-b90 enclave
//HLE = high level encounter, this is a filter that determines if the player can get, as the name implies, high level encounters
export function naturalEncounter(location){
var HLE = false;
var encounter = false;
var encounterLuck = randomNumber(1, 100);
if(location > 250){
HLE = true;
}
if(0 < location <= 5){
encounter = false;
} else if(5 < location <= 50){
if(1 <= encounterLuck <= 50){
encounter = false;
} else if(51 <= encounterLuck <= 80){
encounter = "abomination";
} else if(81 <= encounterLuck <= 90){
encounter = "settler";
} else if(91 <= encounterLuck <= 100){
encounter = "MWBOS";
}
} else if(50 < location <= 200){
if(1 <= encounterLuck <= 50){
encounter = false;
} else if(51 <= encounterLuck <= 80){
encounter = "MWBOS";
} else if(81 <= encounterLuck <= 95){
encounter = "settler";
} else if(96 <= encounterLuck <= 100){
encounter = "abominaton";
}
} else if(200 < location <= 255){
if(1 <= encounterLuck <= 40){
encounter = false;
} else if(41 <= encounterLuck <= 75){
encounter = "legion";
} else if(76 <= encounterLuck <= 90){
encounter = "abomination";
} else if(91 <= encounterLuck <= 99){
encounter = "raider";
} else if(encounterLuck = 100){
encounter = "settler";
}
}
}
export function encounterMenuMaker(reqFactionEMM, diffWeightingEMM, forceOptEMM){
switch(diffWeightingEMM){
case 1:
reqFactionEMM = encounterDiffOne
break;
case 2:
reqFactionEMM = encounterDiffTwo
break;
case 3:
reqFactionEMM = encounterDiffThree
break;
case 4:
reqFactionEMM = encounterDiffFour
break;
case 5:
reqFactionEMM = encounterDiffFive
break;
}
var encounterDifficulty = (diffWeightingEMM * randomNumber(1, 20));
factionFailsafe = reqFactionEMM.toLowerCase();
switch(factionFailsafe){
case "NCR":
faction = 0;
break;
case "legion":
faction = 1;
break;
case "raider":
faction = 2;
break;
case "settler":
faction = 3;
break;
case "BOS":
faction = 4;
break;
case "abomination":
faction = 5;
break;
case "MWBOS":
faction = 6;
break;
}
if (forceOptEMM == true) {
if(encounterDifficulty <= 20){
encountered.push(encounterDiffOne[faction][randomNumber(0, encounterDiffOne[faction].length - 1)]);
} else if(21 <= encounterDifficulty <= 40){
encountered.push(encounterDiffTwo[faction][randomNumber(0, encounterDiffTwo[faction].length - 1)]);
} else if(41 <= encounterDifficulty <= 60){
encountered.push(encounterDiffThree[faction][randomNumber(0, encounterDiffThree[faction].length - 1)]);
} else if(61 <= encounterDifficulty <= 80){
encountered.push(encounterDiffFour[faction][randomNumber(0, encounterDiffFour[faction].length - 1)]);
} else {
encountered.push(encounterDiffFive[faction][randomNumber(0, encounterDiffFive[faction].length - 1)]);
}
return encountered[encountered.length - 1];
} else {
let x = randomNumber(0, 100)
if (x >= 75) {
if (x <=80) {
encountered.push(encounterDiffOne[raider][randomNumber(0, encounterDiffOne[raider].length - 1)])
}
if (x <=90) {
encountered.push(encounterDiffOne[settler][randomNumber(0, encounterDiffOne[settler].length - 1)])
}
if (x <=100) {
encountered.push(encounterDiffOne[abomination][randomNumber(0, encounterDiffOne[abomination].length - 1)])
}
}
if (x < 75) {
encountered.push(encounterDiffOne[faction][randomNumber(0, encounterDiffOne[faction].length - 1)])
}
}
}
export function initializeEncounter(reqFaction, diffWeighting, fight, flee, forceFaction){
var encounter = encounterMenuMaker(reqFaction, diffWeighting, forceFaction);
console.clear();
console.log("You come across a " + encounter.name);
var encounterHealth = randomNumber(encounter.minHealth, encounter.maxHealth);
console.log("Health: " + encounterHealth);
console.log("What would you like to do?");
console.log("--------------------------");
var playerOptions = 1;
console.log(playerOptions + ") Inventory");
playerOptions++
if(fight == true){
console.log(playerOptions + ") Fight");
playerOptions++;
}
if(flee == true){
console.log(playerOptions + ") Flee");
playerOptions++;
}
while(true) {
let encounterInput = userInput("Enter: ")
switch(encounterInput) {
case "1":
console.log(inventory);
case "2":
initCombat(encounter);
break;
case "3":
if (reputation.reqFaction < 4) {
if (randomNumber(1,100) < 40){
console.log("You tried to flee... but they noticed you.");
initCombat(encounter);
if(encounter != false){
switch(encounter){
case "abomination":
if(HLE == true){
switch(randomNumber(1, 2)){
case 1:
return abominationEncounters[randomNumber(0, abominationEncounters.length-1)];
case 2:
return HLabominationEncounters[randomNumber(0, HLabominationEncounters.length-1)];
}
} else {
return abominationEncounters[randomNumber(0, abominationEncounters.length-1)];
}
case "MWBOS":
if(HLE == true){
switch(randomNumber(1, 2)){
case 1:
return MWBOSEncounters[randomNumber(0, MWBOSEncounters.length-1)];
case 2:
return HLMWBOSEncounters[randomNumber(0, HLMWBOSEncounters.length-1)];
}
} else {
return MWBOSEncounters[randomNumber(0, MWBOSEncounters.length-1)];
}
case "BOS":
if(HLE == true){
switch(randomNumber(1, 2)){
case 1:
return BOSEncounters[randomNumber(0, BOSEncounters.length-1)];
case 2:
return HLBOSEncounters[randomNumber(0, HLBOSEncounters.length-1)];
}
} else {
return BOSEncounters[randomNumber(0, BOSEncounters.length-1)];
}
case "NCR":
if(HLE == true){
switch(randomNumber(1, 2)){
case 1:
return NCREncounters[randomNumber(0, NCREncounters.length-1)];
case 2:
return HLNCREncounters[randomNumber(0, HLNCREncounters.length-1)];
}
} else {
return NCREncounters[randomNumber(0, NCREncounters.length-1)];
}
case "legion":
if(HLE == true){
switch(randomNumber(1, 2)){
case 1:
return legionEncounters[randomNumber(0, legionEncounters.length-1)];
case 2:
return HLlegionEncounters[randomNumber(0, HLlegionEncounters.length-1)];
}
} else {
return legionEncounters[randomNumber(0, legionEncounters.length-1)];
}
case "settler":
if(HLE == true){
switch(randomNumber(1, 2)){
case 1:
return settlerEncounters[randomNumber(0, settlerEncounters.length-1)];
case 2:
return HLsettlerEncounters[randomNumber(0, HLsettlerEncounters.length-1)];
}
} else {
return settlerEncounters[randomNumber(0, settlerEncounters.length-1)];
}
case "raider":
if(HLE == true){
switch(randomNumber(1, 2)){
case 1:
return raiderEncounters[randomNumber(0, raiderEncounters.length-1)];
case 2:
return HLraiderEncounters[randomNumber(0, HLraiderEncounters.length-1)];
}
} else {
return raiderEncounters[randomNumber(0, raiderEncounters.length-1)];
}
}
} else {
return false;
}
};
export function forcedEncounter(HLE, faction, forcedHLE){
var HLEDeterminant = randomNumber(1, 2)
if((HLE == true && HLEDeterminant == 1) || forcedHLE == true){
switch (faction){
case "raider":
return HLraiderEncounters[randomNumber(0, HLraiderEncounters.length-1)];
case "MWBOS":
return HLMWBOSEncounters[randomNumber(0, HLMWBOSEncounters.length-1)];
case "BOS":
return HLBOSEncounters[randomNumber(0, HLBOSEncounters.length-1)];
case "settler":
return HLsettlerEncounters[randomNumber(0, HLsettlerEncounters.length-1)];
case "abomination":
return HLabominationEncounters[randomNumber(0, HLabominationEncounters.length-1)];
case "NCR":
return HLNCREncounters[randomNumber(0, HLNCREncounters.length-1)];
case "legion":
return HLlegionEncounters[randomNumber(0, HLlegionEncounters.length-1)];
}
} else {
switch (faction){
case "raider":
return raiderEncounters[randomNumber(0, raiderEncounters.length-1)];
case "MWBOS":
return MWBOSEncounters[randomNumber(0, MWBOSEncounters.length-1)];
case "BOS":
return BOSEncounters[randomNumber(0, BOSEncounters.length-1)];
case "settler":
return settlerEncounters[randomNumber(0, settlerEncounters.length-1)];
case "abomination":
return abominationEncounters[randomNumber(0, abominationEncounters.length-1)];
case "NCR":
return NCREncounters[randomNumber(0, NCREncounters.length-1)];
case "legion":
return legionEncounters[randomNumber(0, legionEncounters.length-1)];
}
}
}
var raiderEncounters = [
{name: "Raider Aspirant", faction: "raider", minLevel: 5, maxLevel: 15, damageClass: "B", minDamage: 5, maxDamage: 10}
];
var HLraiderEncounters = [
];
var MWBOSEncounters = [
{name: "MWBOS Paladin", faction: "MWBOS", minLevel: 40, maxLevel: 65, damageClass: "E", minDamage: 5, maxDamage: 40}
];
var HLMWBOSEncounters = [
];
var abominationEncounters = [
{name: "Deathclaw", faction: "abomination", minLevel: 50, maxLevel: 100, damageClass: "B", minDamage: 35, maxDamage: 75}
];
var HLabominationEncounters = [
];
var NCREncounters = [
];
var HLNCREncounters = [
];
var BOSEncounters = [
];
var HLBOSEncounters = [
];
var settlerEncounters = [
{name: "John Settler", faction: "settler", minLevel: 1, maxLevel: 2, damageClass: "B", minDamage: 1, maxDamage: 2}
];
var HLsettlerEncounters = [
];
var legionEncounters = [
];
var HLlegionEncounters = [
];

View file

@ -1,7 +1,8 @@
// Program is started from here, runs functions from other files.
import { userInput, calcLocation, radPointsCalc, healthCapCalc, checkLose, sleep } from './functions.js';
import { userInput, calcLocation, radPointsCalc, healthCapCalc, checkLose, sleep, randomNumber } from './functions.js';
import { pois, poiCounter } from './poiscreens.js';
import { name, prewarmoney, variableChange } from './variables.js';
import { forcedEncounter, naturalEncounter } from './encounters.js';
console.clear();
@ -13,6 +14,8 @@ console.log(" / / ) / / / ) / / / o / / ) / )
console.log("_/________(___(_/___/___(___/_(___(__(_ __o_____/____/_(___/_/___/_(___ _(__)_(___/_/_/__/_(___ _____/_____|__(___/_(___(_(___/___");
console.log("Credits: Bethesda Game Studio \n");
sleep(5);
console.log("What would you like to do?");
console.log("--------------------------");
console.log("1) Start new game");
@ -34,8 +37,14 @@ switch(mainMenuInput) {
console.log("Quitting Game...");
break;
case "4":
variableChange("name","=","finn");
console.log(name);
for(var a = 0; a < 10; a++){
var test = naturalEncounter(25);
if(test != false){
console.log(test.name);
} else {
console.log("failed encounter");
}
}
break;
}