164 lines
6.4 KiB
JavaScript
164 lines
6.4 KiB
JavaScript
//Created by student A
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
|