Create-Task/files/combat.js
2025-04-28 12:19:02 -05:00

162 lines
6.4 KiB
JavaScript

import './variables.js';
import { randomNumber, userInput } from './functions.js';
import { inventoryMenuM } from './inventory.js';
// InitCombat function (currently not used in final game)
// First sets the proper level of the enemy, then sets the stats of the enemy and runs combat() with it as a parameter.
function initCombat(enemy) {
if (enemy.minLevel > level) {
var enemyLevelFinal = enemy.minLevel;
} else if (enemy.maxLevel < level) {
var enemyLevelFinal = enemy.minLevel;
} else {
var enemyLevelFinal = level;
}
if (enemy.armor.value > 85 && enemy.armor.unit == "dr") {
var enemyArmor = 85;
} else {
var enemyArmor = enemy.armor.value;
}
var enemyStats = {level: enemyLevelFinal, health: enemy.health+enemyLevelFinal, weapon: enemy.weapon, armor: enemyArmor, armorUnit: enemy.armor.unit};
var playerStats = {level: level, health: health, weapon: equippedWeapon, armor: equippedArmor, armorUnit: equippedArmor.unit, chem: "placeholder"};
combat(enemyStats);
}
// Combat function (currently not used in final game)
// Gives a menu to attack the enemy, open inventoryM(), or view player stats. Menu will repeat until enemy.health is not > 0
function combat(enemy) {
console.clear();
console.log("You enter combat with "+enemy.name+"...");
let combatInput;
while (enemy.health > 0) {
while (true) {
console.log("What would you like to do?");
console.log("-----------------------");
console.log("1) Attack");
console.log("2) Check your Inventory");
console.log("3) View Stats");
combatInput = userInput("Enter: ");
// Input validation
if (combatInput != "1" && combatInput != "2" && combatInput != "3") {
console.log("Invalid input. Please enter 1, 2, or 3.");
} else {
break;
}
}
switch(combatInput) {
case "1":
console.log("You attack "+enemy.name+" with your "+equippedWeapon.name+"!");
sleep(2);
let attackRoll = randomNumber(1,100);
if (attackRoll <= 10) {
console.log("You critically hit "+enemy.name+" dealing "+damageCalc(player, true)+" damage!");
sleep(2);
} else if (attackRoll <= 50) {
console.log("You hit "+enemy.name+" dealing "+damageCalc(player, false)+" damage!");
sleep(2);
} else if (attackRoll <= 90) {
console.log("You miss "+enemy.name+"!");
sleep(2);
} else {
console.log("You critically miss "+enemy.name+", dealing 3 damage to yourself!");
health-3;
sleep(2);
}
console.log(enemy.name+" Attacks you with thier "+enemyStats.weapon.name+"!");
sleep(2);
let enemyRoll = randomNumber(1,100);
if (attackRoll <= 10) {
console.log(enemy.name+" critically hit you dealing "+damageCalc(enemy, true)+" damage!");
sleep(2);
} else if (attackRoll <= 50) {
console.log(enemy.name+" hit you dealing "+damageCalc(player, false)+" damage!");
sleep(2);
} else if (attackRoll <= 90) {
console.log(enemy.name+" misses you!");
sleep(2);
} else {
console.log(enemy.name+" critically misses, dealing 3 damage to themself!");
enemyStats.health-3;
sleep(2);
}
case "2":
inventoryMenuM();
break;
case "3":
console.clear();
console.log("Player Stats");
console.log("-------------");
console.log("Name: "+name);
console.log("Level: "+level);
console.log("Current Health: "+health+"/"+healthCap);
console.log("Radiation Points: "+radPoints);
console.log("Radiation Severity: "+radSeverity);
console.log("Walk Rate: "+walkRate);
console.log("Food Amt: "+food);
console.log("Food Rate: "+foodRate);
console.log("Distance to next POI: " + pois[poiCounter].location-location);
console.log("Current Path: "+path);
userInput("\n[Press Enter to return]");
break;
}
}
}
// damageCalc() function (currently not used in final game)
// If the attacker parameter = the player it runs the respective menus, checking for damage dealt and returns it.
// Vice versa if attacker = enemy
// If crit = true 3 extra damage is applied regardless of armor calculations.
function damageCalc(attacker, crit) {
if (attacker = player) {
if (playerStats.chem == "psycho") {
var damageOutput = playerStats.weapon.damage*1.5;
} else {
var damageOutput = playerStats.weapon.damage;
}
if (crit) {
damageOutput+3;
}
if (enemyStats.armorUnit == "dr"){
let drDamage = damageOutput-(enemyStats.armor.value/100);
enemyStats.health = enemyStats.health-drDamage;
return drDamage;
}
if (enemyStats.armorUnit == "dt") {
let dtDamage = enemyStats.health-(damageOutput-armor);
if (dtDamage < 0) {
dtDamage = 0;
}
enemyStats.health - dtDamage;
return dtDamage;
}
} else {
if (playerStats.chem == "medx") {
var damageOutput = enemyStats.weapon.damage*(-1.5);
} else {
var damageOutput = enemyStats.weapon.damage;
}
if (crit) {
damageOutput+3;
}
if (playerStats.armorUnit == "dr"){
let drDamage = damageOutput-(playerStats.armor.value/100)
playerStats.health = playerStats.health-drDamage;
return drDamage;
}
if (playerStats.armorUnit == "dt") {
let dtDamage = playerStats.health-(damageOutput-armor);
if (dtDamage < 0) {
dtDamage = 0;
}
playerStats.health - dtDamage;
return dtDamage;
}
}
}