Simpletrixx-LearningJS/simpletrixx.js

612 lines
43 KiB
JavaScript

"use strict";
const Character = {
firstname: "",
surname: "",
background: {
arctic:false, temperate:false, tropical:false,
mountains:false, plains:false, coast:false,
forest:false, desert:false, urban:false,
},
SoulShards: {remainingSoulShards:2,
strength:0, perception:0, agility:0, charisma:0, endurance:0,
magic: { //something like this
whmb1sp1:0, whmb1sp2:0, whmb1sp3:0, whmb1rad:0, whmb1wav:0, whmb1dur:0, whmb1crit:0, whmb1num:0,
whmb2sp1:0, whmb2sp2:0, whmb2sp3:0, whmb2rad:0, whmb2wav:0, whmb2dur:0, whmb2crit:0, whmb2num:0,
whmb3sp1:0, whmb3sp2:0, whmb3sp3:0, whmb3rad:0, whmb3wav:0, whmb3dur:0, whmb3crit:0, whmb3num:0,
elmb1sp1:0, elmb1sp2:0, elmb1sp3:0, elmb1rad:0, elmb1wav:0, elmb1dur:0, elmb1crit:0, elmb1num:0,
elmb2sp1:0, elmb2sp2:0, elmb2sp3:0, elmb2rad:0, elmb2wav:0, elmb2dur:0, elmb2crit:0, elmb2num:0,
elmb3sp1:0, elmb3sp2:0, elmb3sp3:0, elmb3rad:0, elmb3wav:0, elmb3dur:0, elmb3crit:0, elmb3num:0,
drub1sp1:0, drub1sp2:0, drub1sp3:0, drub1rad:0, drub1wav:0, drub1dur:0, drub1crit:0, drub1num:0,
drub2sp1:0, drub2sp2:0, drub2sp3:0, drub2rad:0, drub2wav:0, drub2dur:0, drub2crit:0, drub2num:0,
drub3sp1:0, drub3sp2:0, drub3sp3:0, drub3rad:0, drub3wav:0, drub3dur:0, drub3crit:0, drub3num:0,
mirb1sp1:0, mirb1sp2:0, mirb1sp3:0, mirb1rad:0, mirb1wav:0, mirb1dur:0, mirb1crit:0, mirb1num:0,
mirb2sp1:0, mirb2sp2:0, mirb2sp3:0, mirb2rad:0, mirb2wav:0, mirb2dur:0, mirb2crit:0, mirb2num:0,
mirb3sp1:0, mirb3sp2:0, mirb3sp3:0, mirb3rad:0, mirb3wav:0, mirb3dur:0, mirb3crit:0, mirb3num:0,
necb1sp1:0, necb1sp2:0, necb1sp3:0, necb1rad:0, necb1wav:0, necb1dur:0, necb1crit:0, necb1num:0,
necb2sp1:0, necb2sp2:0, necb2sp3:0, necb2rad:0, necb2wav:0, necb2dur:0, necb2crit:0, necb2num:0,
necb3sp1:0, necb3sp2:0, necb3sp3:0, necb3rad:0, necb3wav:0, necb3dur:0, necb3crit:0, necb3num:0,
},
mutations: {
gills:false, wings:false, senses:false,
metabolism:0, //use more elixirs at once
naturalArmor:0,
magicalAffinity:0 //use more magical items at once
},
resistances: {
bleed:0, disease:0, poison:0, burn:0, freeze:0, stun:0, stagger:0,
slow:0, root:0, calm:0, frenzy:0, confusion:0, panic:0, paralyze:0,
blind:0, turn:0, knockback:0, prone:0, deaf:0
}
},
skillLevelUpFactors: {
athletics:0, evasion:0, stealth:0,
negotiation:0, charm:0, command:0,
medical:0, nature:0, engineering:0,
arcana:0, security:0, liberal_arts:0,
slash:0, hew:0, stab:0, parry:0, shoot:0, throw:0,
white_magic:0, elemental_magic:0, druidic_magic:0, mirror_magic:0, necromancy:0
},
XP:8,
equipment: {
weaponslot1:undefined, shieldslot1:undefined, weaponslot2:undefined, shieldslot2:undefined,
armor:undefined, helmet:undefined, leftglove:undefined, rightglove:undefined, boots:undefined,
shirt:undefined, trousers:undefined, cloak:undefined, belt:undefined, backpack:undefined,
magicItem1:undefined, magicItem2:undefined, magicItem3:undefined,
quickItems:undefined,
spells:undefined //to be determined
},
Inventory: {
carriedItems:undefined, craftingComponents:undefined, stash:undefined
},
Journal: {
questlog:undefined, map:undefined, notes:undefined
}
};
const fillVals = ()=>{
const attribute = {
attibuteXP:0, attributeItemXP:0, attributeSoulShards:0, skillWeights:0
};
const skill = {
skillXP:0, skillItemXP:0, attributeWeights:0, LevelUpFactor:0
};
const background = {
numberOfBackgrounds:0, backgroundAttrib:0, backgroundSkill:0
}
Character.firstname = document.getElementById("firstname").value;
Character.surname = document.getElementById("surname").value;
//Soul (background)
//Climate
let arctic = document.getElementById("Arctic"), temperate = document.getElementById("Temperate"), tropical = document.getElementById("Tropical");
//Elevation
let mountains = document.getElementById("Mountains"), plains = document.getElementById("Plains"), coast = document.getElementById("Coast");
//Vegetation
let forest = document.getElementById("Forest"), desert = document.getElementById("Desert"), urban = document.getElementById("Urban");
//Attributes and skills
let strength=0, perception=0, agility=0, charisma=0, endurance=0;
let athletics=0, evasion=0, stealth=0, negotiation=0, charm=0, command=0, medical=0, nature=0, engineering=0, arcana=0, security=0, liberal_arts=0; //Skills
//transport element and translate into number
function transPortLate(element) {
return parseInt(document.getElementById(element).value||document.getElementById(element).innerHTML||0)
}
let numberOfBackgrounds=0 //the overall BackgroundXP is divided by this number to ensure balancing.
//Attribute and skill changes due to your soul (background)
function backgroundAttrib(a1, a2, a3, a4, a5) {
return strength+=a1, perception+=a2, agility+=a3, charisma+=a4, endurance+=a5;
}
function backgroundSkill(s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12) {
return athletics+=s1, evasion+=s2, stealth+=s3, negotiation+=s4, charm+=s5, command+=s6, medical+=s7, nature+=s8, engineering+=s9, arcana+=s10, security+=s11, liberal_arts+=s12;
}
if (arctic.checked==true) {
backgroundAttrib(1,4,1,1,3), backgroundSkill(1,0,1,3,0,0,2,0,2,1,2,0), numberOfBackgrounds+=1;
}
if (temperate.checked==true) {
backgroundAttrib(2,2,2,3,1), backgroundSkill(0,0,1,0,1,2,0,2,0,1,2,3), numberOfBackgrounds+=1;
}
if (tropical.checked==true) {
backgroundAttrib(1,1,3,3,2), backgroundSkill(1,0,2,0,2,0,0,2,2,1,1,1), numberOfBackgrounds+=1;
}
if (mountains.checked==true) {
backgroundAttrib(4,1,1,1,3), backgroundSkill(3,1,1,1,0,3,1,0,2,0,0,0), numberOfBackgrounds+=1;
}
if (plains.checked==true) {
backgroundAttrib(2,2,2,2,2), backgroundSkill(0,2,1,0,2,2,1,2,0,2,0,0), numberOfBackgrounds+=1;
}
if (coast.checked==true) {
backgroundAttrib(1,3,2,3,1), backgroundSkill(1,1,1,1,1,0,2,0,1,1,0,3), numberOfBackgrounds+=1;
}
if (forest.checked==true) {
backgroundAttrib(1,2,3,1,3), backgroundSkill(2,2,2,0,0,1,0,2,1,1,1,0), numberOfBackgrounds+=1;
}
if (desert.checked==true) {
backgroundAttrib(2,3,2,1,2), backgroundSkill(1,1,0,3,0,0,2,1,0,2,2,0), numberOfBackgrounds+=1;
}
if (urban.checked==true) {
backgroundAttrib(2,2,1,4,1), backgroundSkill(0,2,0,1,3,1,1,0,1,0,1,2), numberOfBackgrounds+=1;
}
if (numberOfBackgrounds==0) {
backgroundAttrib(2,2,2,2,2), backgroundSkill(1,1,1,1,1,1,1,1,1,1,1,1), numberOfBackgrounds=1;
}
//The BackgroundXP gets divided
athletics/=numberOfBackgrounds;
evasion/=numberOfBackgrounds;
stealth/=numberOfBackgrounds;
negotiation/=numberOfBackgrounds;
charm/=numberOfBackgrounds;
command/=numberOfBackgrounds;
medical/=numberOfBackgrounds;
nature/=numberOfBackgrounds;
engineering/=numberOfBackgrounds;
arcana/=numberOfBackgrounds;
security/=numberOfBackgrounds;
liberal_arts/=numberOfBackgrounds;
//Your soul (background) gives you passive Soul Shards
let SoulShardBackground = 6;
//Being a human gives you distributable Soul Shards
let SoulShards = -2;
//Soul Shards for attributes
let StrengthSoulShard = transPortLate("StrengthIncreaseField"), PerceptionSoulShard = transPortLate("PerceptionIncreaseField"), AgilitySoulShard = transPortLate("AgilityIncreaseField"), CharismaSoulShard = transPortLate("CharismaIncreaseField"), EnduranceSoulShard = transPortLate("EnduranceIncreaseField");
let FireBolt = transPortLate("FireBoltField"), FireWave = transPortLate("FireWaveField"), FireShield = transPortLate("FireShieldField"), WallOfFire = transPortLate("WallOfFireField"), FireSummon = transPortLate("FireSummonField"), FireRad = transPortLate("FireRadField"), FireBurn = transPortLate("FireBurnField"), FireStagger = transPortLate("FireStaggerField"), FirePanic = transPortLate("FirePanicField"), FireSummonEquip = transPortLate("FireSummonEquipField");
let FrostBlast = transPortLate("FrostBlastField"), IceShard = transPortLate("IceShardField"), FrostWeapon = transPortLate("FrostWeaponField"), WallOfIce = transPortLate("WallOfIceField"), IceSummon = transPortLate("IceSummonField"), FrostRad = transPortLate("FrostRadField"), FrostFreeze = transPortLate("FrostFreezeField"), PiercingCold = transPortLate("PiercingColdField"), FrostBlind = transPortLate("FrostBlindField"), IceSummonEquip = transPortLate("IceSummonEquipField");
let LightningStrike = transPortLate("LightningStrikeField"), Lightning = transPortLate("LightningField"), ShockWeapon = transPortLate("ShockWeaponField"), WallOfLightning = transPortLate("WallOfLightningField"), ShockSummon = transPortLate("ShockSummonField"), ShockRad = transPortLate("ShockRadField"), ShockStun = transPortLate("ShockStunField"), ShockBlind = transPortLate("ShockBlindField"), ShockDeafen = transPortLate("ShockDeafenField"), ShockSummonEquip = transPortLate("ShockSummonEquipField");
let VampDrain = transPortLate("VampDrainField"), VampSlow = transPortLate("VampSlowField"), VampJoy = transPortLate("VampJoyField"), VampFog = transPortLate("VampFogField"), VampFlow = transPortLate("VampFlowField"), VampRad = transPortLate("VampRadField"), VampWeapon = transPortLate("VampWeaponField"), VampKnight = transPortLate("VampKnightField"), KnightDrain = transPortLate("KnightDrainField"), KnightSlow = transPortLate("KnightSlowField");
let ArmyMinion = transPortLate("ArmyMinionField"), ArmyChampion = transPortLate("ArmyChampionField"), ArmyGeneral = transPortLate("ArmyGeneralField"), ArmyPoison = transPortLate("ArmyPoisonField"), ArmyDisease = transPortLate("ArmyDiseaseField"), ArmyEquip = transPortLate("ArmyEquipField"), ArmyPanic = transPortLate("ArmyPanicField"), ArmyKnight = transPortLate("ArmyKnightField"), KnightPanic = transPortLate("KnightPanicField"), KnightSummonEquip = transPortLate("KnightSummonEquipField");
let DeathRay = transPortLate("DeathRayField"), DeathParalyze = transPortLate("DeathParalyzeField"), DeathFinger = transPortLate("DeathFingerField"), FingerCripple = transPortLate("FingerCrippleField"), FingerVulnerate = transPortLate("FingerVulnerateField"), DeathWeapon = transPortLate("DeathWeaponField"), DeathKnight = transPortLate("DeathKnightField"), KnightPoison = transPortLate("KnightPoisonField"), KnightDisease = transPortLate("KnightDiseaseField"), KnightDarknessAura = transPortLate("KnightDarknessAuraField");
let WrathBolt = transPortLate("WrathBoltField"), WrathChannel = transPortLate("WrathChannelField"), WrathWeapon = transPortLate("WrathWeaponField"), WrathSmite = transPortLate("WrathSmiteField"), WrathBlind = transPortLate("WrathBlindField"), WrathTurn = transPortLate("WrathTurnField"), WrathRad = transPortLate("WrathRadField"), WrathKnight = transPortLate("WrathKnightField"), KnightTurn = transPortLate("KnightTurnField"), KnightHolyDamage = transPortLate("KnightHolyDamageField");
let MercyHeal = transPortLate("MercyHealField"), HealCure = transPortLate("HealCureField"), HealBreakCurse = transPortLate("HealBreakCurseField"), MercyBuff = transPortLate("MercyBuffField"), BuffResistance = transPortLate("BuffResistanceField"), MercyWeapon = transPortLate("MercyWeaponField"), MercyKB = transPortLate("MercyKBField"), MercyRad = transPortLate("MercyRadField"), MercyKnight = transPortLate("MercyKnightField"), KnightDefenseAura = transPortLate("KnightDefenseAuraField");
let StrBless = transPortLate("StrBlessField"), BlessSaves = transPortLate("BlessSavesField"), BlessOff = transPortLate("BlessOffField"), StrHaste = transPortLate("StrHasteField"), StrAura = transPortLate("StrAuraField"), StrAuraPure = transPortLate("StrAuraPureField"), StrAuraReg = transPortLate("StrAuraRegField"), StrRad = transPortLate("StrRadField"), StrKnight = transPortLate("StrKnightField"), KnightEquip = transPortLate("KnightEquipField");
let WrathSoulShard = WrathBolt+WrathChannel+WrathWeapon+WrathSmite+WrathBlind+WrathTurn+WrathRad+WrathKnight+KnightTurn+KnightHolyDamage;
let MercySoulShard = MercyHeal+HealCure+HealBreakCurse+MercyBuff+BuffResistance+MercyWeapon+MercyKB+MercyRad+MercyKnight+KnightDefenseAura;
let StrMagSoulShard = StrBless+BlessSaves+BlessOff+StrHaste+StrAura+StrAuraPure+StrAuraReg+StrRad+StrKnight+KnightEquip;
let VampSoulShard = VampDrain+VampSlow+VampJoy+VampFog+VampFlow+VampRad+VampWeapon+VampKnight+KnightDrain+KnightSlow;
let ArmySoulShard = ArmyMinion+ArmyChampion+ArmyGeneral+ArmyPoison+ArmyDisease+ArmyEquip+ArmyPanic+ArmyKnight+KnightPanic+KnightSummonEquip;
let DeathSoulShard = DeathRay+DeathParalyze+DeathFinger+FingerCripple+FingerVulnerate+DeathWeapon+DeathKnight+KnightPoison+KnightDisease+KnightDarknessAura;
let FireSoulShard = FireBolt+FireWave+FireShield+WallOfFire+FireSummon+FireRad+FireBurn+FireStagger+FirePanic+FireSummonEquip;
let FrostSoulShard = FrostBlast+IceShard+FrostWeapon+WallOfIce+IceSummon+FrostRad+FrostFreeze+FrostBlind+PiercingCold+IceSummonEquip;
let LightningSoulShard = LightningStrike+Lightning+ShockWeapon+WallOfLightning+ShockSummon+ShockRad+ShockStun+ShockBlind+ShockDeafen+ShockSummonEquip;
let WhiteSoulShard = WrathSoulShard+MercySoulShard+StrMagSoulShard;
let NecromancySoulShard = VampSoulShard+ArmySoulShard+DeathSoulShard;
let ElementalSoulShard = FireSoulShard+FrostSoulShard+LightningSoulShard;
let SoulShardTotal = SoulShards + StrengthSoulShard + PerceptionSoulShard + AgilitySoulShard + CharismaSoulShard + EnduranceSoulShard + ElementalSoulShard + NecromancySoulShard + WhiteSoulShard;
document.getElementById("SoulShardTotal").innerHTML="Soul Power Level "+SoulShardTotal;
let SilentKnightSoulShard = ArmyKnight+VampKnight+DeathKnight+KnightDarknessAura+KnightDisease+KnightDrain+KnightPanic+KnightPoison+KnightSlow+KnightSummonEquip;
let HolyKnightSoulShard = WrathKnight+MercyKnight+StrKnight+KnightEquip+KnightHolyDamage+KnightDefenseAura+KnightTurn;
let StrengthSoulShardTotal = strength/numberOfBackgrounds*SoulShardBackground/10+StrengthSoulShard;
let PerceptionSoulShardTotal = perception/numberOfBackgrounds*SoulShardBackground/10+PerceptionSoulShard;
let AgilitySoulShardTotal = agility/numberOfBackgrounds*SoulShardBackground/10+AgilitySoulShard;
let CharismaSoulShardTotal = charisma/numberOfBackgrounds*SoulShardBackground/10+CharismaSoulShard;
let EnduranceSoulShardTotal = endurance/numberOfBackgrounds*SoulShardBackground/10+EnduranceSoulShard;
let SkillFactor=transPortLate("Athletics")+transPortLate("Evasion")+transPortLate("Stealth")+transPortLate("Negotiation")+transPortLate("Charm")+transPortLate("Command")+transPortLate("Medical")+transPortLate("Nature")+transPortLate("Engineering")+transPortLate("Arcana")+transPortLate("Security")+transPortLate("Liberal_Arts")+transPortLate("Slash")+transPortLate("Hew")+transPortLate("Stab")+transPortLate("Parry")+transPortLate("Shoot")+transPortLate("Throw")+transPortLate("White Magic")+transPortLate("Elemental Magic")+transPortLate("Druidic Magic")+transPortLate("Mirror Magic")+transPortLate("Necromancy")+(athletics+evasion+stealth+negotiation+charm+command+medical+nature+engineering+arcana+security+liberal_arts)*5;
let TotalXP=transPortLate("TotalXP")+8, Level = Math.floor(Math.sqrt(transPortLate("TotalXP")));
document.getElementById("Level").innerHTML="Level "+Level;
//Combat and magic skills do not recieve BackgroundXP
let SlashLevelUpXP=transPortLate("Slash")*TotalXP/SkillFactor, HewLevelUpXP=transPortLate("Hew")*TotalXP/SkillFactor, StabLevelUpXP=transPortLate("Stab")*TotalXP/SkillFactor, ParryLevelUpXP=transPortLate("Parry")*TotalXP/SkillFactor, ShootLevelUpXP=transPortLate("Shoot")*TotalXP/SkillFactor, ThrowLevelUpXP=transPortLate("Throw")*TotalXP/SkillFactor;
let WhiteMagicLevelUpXP=transPortLate("White Magic")*TotalXP/SkillFactor, ElementalMagicLevelUpXP=transPortLate("Elemental Magic")*TotalXP/SkillFactor, DruidicMagicLevelUpXP=transPortLate("Druidic Magic")*TotalXP/SkillFactor, MirrorMagicLevelUpXP=transPortLate("Mirror Magic")*TotalXP/SkillFactor, NecromancyLevelUpXP=transPortLate("Necromancy")*TotalXP/SkillFactor;
//Your starting Skills are added into the LevelUpXP-Mix, because you can get the boy out of the Mountains, but you can't get the Mountains out of the boy.
let AthleticsLevelUpXP=(transPortLate("Athletics")+athletics*5)*TotalXP/SkillFactor;
let EvasionLevelUpXP=(transPortLate("Evasion")+evasion*5)*TotalXP/SkillFactor;
let StealthLevelUpXP=(transPortLate("Stealth")+stealth*5)*TotalXP/SkillFactor;
let NegotiationLevelUpXP=(transPortLate("Negotiation")+negotiation*5)*TotalXP/SkillFactor;
let CharmLevelUpXP=(transPortLate("Charm")+charm*5)*TotalXP/SkillFactor;
let CommandLevelUpXP=(transPortLate("Command")+command*5)*TotalXP/SkillFactor;
let MedicalLevelUpXP=(transPortLate("Medical")+medical*5)*TotalXP/SkillFactor;
let NatureLevelUpXP=(transPortLate("Nature")+nature*5)*TotalXP/SkillFactor;
let EngineeringLevelUpXP=(transPortLate("Engineering")+engineering*5)*TotalXP/SkillFactor;
let ArcanaLevelUpXP=(transPortLate("Arcana")+arcana*5)*TotalXP/SkillFactor;
let SecurityLevelUpXP=(transPortLate("Security")+security*5)*TotalXP/SkillFactor
let Liberal_ArtsLevelUpXP=(transPortLate("Liberal_Arts")+liberal_arts*5)*TotalXP/SkillFactor;
//Magical items and spells will give you XP, as long as the item is equipped or the spell endures.
let AthleticsItemXP=0, EvasionItemXP=0, StealthItemXP=0, NegotiationItemXP=0, CharmItemXP=0, CommandItemXP=0, MedicalItemXP=0, NatureItemXP=0, EngineeringItemXP=0, ArcanaItemXP=0, SecurityItemXP=0, Liberal_ArtsItemXP=0;
let SlashItemXP=0, HewItemXP=0, StabItemXP=0, ParryItemXP=0, ShootItemXP=0, ThrowItemXP=0;
let StrengthItemXP=0, PerceptionItemXP=0, AgilityItemXP=0, CharismaItemXP=0, EnduranceItemXP=0;
let WhiteMagicItemXP=0, ElementalMagicItemXP=0, DruidicMagicItemXP=0, MirrorMagicItemXP=0, NecromancyItemXP=0;
//Raw AttributeXP derived from Skills - other than Soul Shards, you cannot raise your attributes directly.
//The higher your skills, the higher your attributes. The numbers inbetween are the weights.
function SkillWeight(s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18) {
return (athletics+AthleticsLevelUpXP)*s1+(evasion+EvasionLevelUpXP)*s2+(stealth+StealthLevelUpXP)*s3+(negotiation+NegotiationLevelUpXP)*s4+(charm+CharmLevelUpXP)*s5+(command+CommandLevelUpXP)*s6+(medical+MedicalLevelUpXP)*s7+(nature+NatureLevelUpXP)*s8+(engineering+EngineeringLevelUpXP)*s9+(arcana+ArcanaLevelUpXP)*s10+(security+SecurityLevelUpXP)*s11+(liberal_arts+Liberal_ArtsLevelUpXP)*s12+SlashLevelUpXP*s13+HewLevelUpXP*s14+StabLevelUpXP*s15+ParryLevelUpXP*s16+ShootLevelUpXP*s17+ThrowLevelUpXP*s18;
}
function MagicWeight(m1, m2, m3, m4, m5) {
return WhiteMagicLevelUpXP*m1+ElementalMagicLevelUpXP*m2+DruidicMagicLevelUpXP*m3+MirrorMagicLevelUpXP*m4+NecromancyLevelUpXP*m5;
}
let StrengthXP=SkillWeight(3,0,0,0,0,3,0,2,0,0,0,1,4,5,3,0,0,5)+StrengthItemXP+MagicWeight(3,0,2,0,0);
let PerceptionXP=SkillWeight(0,5,3,0,6,0,4,2,7,4,6,1,0,0,0,4,4,2)+PerceptionItemXP+MagicWeight(0,2,2,4,4);
let AgilityXP=SkillWeight(3,5,5,0,0,0,2,2,3,0,4,1,4,0,3,4,4,2)+AgilityItemXP+MagicWeight(0,2,2,0,0);
let CharismaXP=SkillWeight(0,0,2,7,4,5,0,2,0,6,0,6,2,0,0,2,0,0)+CharismaItemXP+MagicWeight(4,3,2,3,2);
let EnduranceXP=SkillWeight(4,0,0,3,0,2,4,2,0,0,0,1,0,5,4,0,2,1)+EnduranceItemXP+MagicWeight(3,3,2,3,4);
//This is the calculation of the Attribute Score and the resulting Attribute Modification. The values are analogous to the D20 System.
let StrengthFlat=(Math.log(StrengthXP)/Math.log(2.1)+StrengthSoulShardTotal)*2, PerceptionFlat=(Math.log(PerceptionXP)/Math.log(2.1)+PerceptionSoulShardTotal)*2, AgilityFlat=(Math.log(AgilityXP)/Math.log(2.1)+AgilitySoulShardTotal)*2, CharismaFlat=(Math.log(CharismaXP)/Math.log(2.1)+CharismaSoulShardTotal)*2, EnduranceFlat=(Math.log(EnduranceXP)/Math.log(2.1)+EnduranceSoulShardTotal)*2;
let StrengthMod=(StrengthFlat-10)/2, PerceptionMod=(PerceptionFlat-10)/2, AgilityMod=(AgilityFlat-10)/2, CharismaMod=(CharismaFlat-10)/2, EnduranceMod=(EnduranceFlat-10)/2;
//Complete calculation of SkillXP
let AthleticsTotalXP = athletics+AthleticsLevelUpXP+AthleticsItemXP;
let EvasionTotalXP = evasion+EvasionLevelUpXP+EvasionItemXP;
let StealthTotalXP = stealth+StealthLevelUpXP+StealthItemXP;
let NegotiationTotalXP = negotiation+NegotiationLevelUpXP+NegotiationItemXP;
let CharmTotalXP = charm+CharmLevelUpXP+CharmItemXP;
let CommandTotalXP = command+CommandLevelUpXP+CommandItemXP;
let MedicalTotalXP = medical+MedicalLevelUpXP+MedicalItemXP;
let NatureTotalXP = nature+NatureLevelUpXP+NatureItemXP;
let EngineeringTotalXP = engineering+EngineeringLevelUpXP+EngineeringItemXP;
let ArcanaTotalXP = arcana+ArcanaLevelUpXP+ArcanaItemXP;
let SecurityTotalXP = security+SecurityLevelUpXP+SecurityItemXP;
let Liberal_ArtsTotalXP = liberal_arts+Liberal_ArtsLevelUpXP+Liberal_ArtsItemXP;
let SlashTotalXP = SlashLevelUpXP+SlashItemXP;
let HewTotalXP = HewLevelUpXP+HewItemXP;
let StabTotalXP = StabLevelUpXP+StabItemXP;
let ParryTotalXP = ParryLevelUpXP+ParryItemXP;
let ShootTotalXP = ShootLevelUpXP+ShootItemXP;
let ThrowTotalXP = ThrowLevelUpXP+ThrowItemXP;
let WhiteMagicTotalXP = WhiteMagicLevelUpXP+WhiteMagicItemXP;
let ElementalMagicTotalXP = ElementalMagicLevelUpXP+ElementalMagicItemXP;
let DruidicMagicTotalXP = DruidicMagicLevelUpXP+DruidicMagicItemXP;
let MirrorMagicTotalXP = MirrorMagicLevelUpXP+MirrorMagicItemXP;
let NecromancyTotalXP = NecromancyLevelUpXP+NecromancyItemXP;
//Skill Value Calculation. The higher the corresponding attributes, the higher the bonus to the skill.
//Attribute weights are the same as for the skills.
function Attribonus(a1, a2, a3, a4, a5) {
return (StrengthMod*a1+PerceptionMod*a2+AgilityMod*a3+CharismaMod*a4+EnduranceMod*a5)/10;
}
function SkillCalc(element) {
return Math.log(element+1)/Math.log(1.6182733);
}
let AthleticsValue=SkillCalc(AthleticsTotalXP)+Attribonus(3,0,3,0,4);
let EvasionValue=SkillCalc(EvasionTotalXP)+Attribonus(0,5,5,0,0);
let StealthValue=SkillCalc(StealthTotalXP)+Attribonus(0,3,5,2,0);
let NegotiationValue=SkillCalc(NegotiationTotalXP)+Attribonus(0,0,0,7,3);
let CharmValue=SkillCalc(CharmTotalXP)+Attribonus(0,6,0,4,0);
let CommandValue=SkillCalc(CommandTotalXP)+Attribonus(3,0,0,5,2);
let MedicalValue=SkillCalc(MedicalTotalXP)+Attribonus(0,4,2,0,4);
let NatureValue=SkillCalc(NatureTotalXP)+Attribonus(2,2,2,2,2);
let EngineeringValue=SkillCalc(EngineeringTotalXP)+Attribonus(0,7,3,0,0);
let ArcanaValue=SkillCalc(ArcanaTotalXP)+Attribonus(0,4,0,6,0);
let SecurityValue=SkillCalc(SecurityTotalXP)+Attribonus(0,6,4,0,0);
let Liberal_ArtsValue=SkillCalc(Liberal_ArtsTotalXP)+Attribonus(1,1,1,6,1);
let SlashValue=SkillCalc(SlashTotalXP)+Attribonus(4,0,4,2,0);
let HewValue=SkillCalc(HewTotalXP)+Attribonus(5,0,0,0,5);
let StabValue=SkillCalc(StabTotalXP)+Attribonus(3,0,3,0,4);
let ParryValue=SkillCalc(ParryTotalXP)+Attribonus(0,4,4,2,0)
let ShootValue=SkillCalc(ShootTotalXP)+Attribonus(0,4,4,0,2);
let ThrowValue=SkillCalc(ThrowTotalXP)+Attribonus(5,2,2,0,1);
let WhiteValue=SkillCalc(WhiteMagicTotalXP)+Attribonus(3,0,0,4,3);
let ElementalValue=SkillCalc(ElementalMagicTotalXP)+Attribonus(0,2,2,3,3);
let DruidicValue=SkillCalc(DruidicMagicTotalXP)+Attribonus(2,2,2,2,2)
let MirrorValue=SkillCalc(MirrorMagicTotalXP)+Attribonus(0,4,0,3,3);
let NecroValue=SkillCalc(NecromancyTotalXP)+Attribonus(0,4,0,2,4);
//Secondary attributes derived from primary ones.
let ArmorTotal=0;
let HealthItem=0, HealthTemp=0, HealthDamage=0;
let HealthMAX = EnduranceFlat*1.61 + HealthItem + HealthTemp;
let Health = HealthMAX-HealthDamage;
let ArmorClass = Math.pow(SkillCalc(PerceptionMod*0.25+AgilityMod*0.5+EnduranceMod*0.25+ArmorTotal)/4,3); //Damage Reduction as follows: Damage/(ArmorClass+1)*2
let Mana = CharismaMod+2; //how long spellcasting can be maintained
let Exertion = EnduranceMod;
let Composure=PerceptionMod+CharismaMod, Reaction=PerceptionMod+AgilityMod, Fortitude=StrengthMod+EnduranceMod;
//Help! I tracked the NaN Problem to this Function
function Weapon (name, slash, hew, weight, range, level){
const assocDam = name+"Dam"; //probably right here
const weaponDamage = document.getElementById(assocDam)
const weaponSlashDamage = Math.round((range + weight)*1.01**(level*5 + SlashValue)*slash*AgilityMod*100)/100
const weaponHewDamage = Math.round((range + weight)*1.01**(level*5 + HewValue)*hew*StrengthMod*100)/100
weaponDamage.innerHTML = Math.max(weaponSlashDamage, weaponHewDamage)//and here
const assocIni = name + "Ini"
const weaponSpeed = document.getElementById(assocIni)
weaponSpeed.innerHTML = Math.round(0.99**((AgilityMod+PerceptionMod)*2)*Math.exp((weight+range)/5)*50)/100
}
function SilentKnight(spell) {
const num = Mana/0.99**((AgilityMod+PerceptionMod)*2)/Math.exp(1/5)*2
const assocDam = spell+"Dam"
const spelldamage = document.getElementById(assocDam)
spelldamage.innerHTML = Math.round(1.01**(NecroValue+VampSoulShard+ArmySoulShard+DeathSoulShard)*(PerceptionMod/2+SilentKnightSoulShard+transPortLate("VampKnightField")+transPortLate("ArmyKnightField")+transPortLate("DeathKnightField"))*num*100)/100
const assocIni = spell+"Ini"
const spellSpeed = document.getElementById(assocIni)
spellSpeed.innerHTML = Math.round(0.99**((AgilityMod+PerceptionMod)*2)*Math.exp(1/5)*50*num)/100
}
function HolyKnight(spell) {
const num = Mana/0.99**((AgilityMod+PerceptionMod)*2)/Math.exp(1/5)*2
const assocDam = spell+"Dam"
const spelldamage = document.getElementById(assocDam)
spelldamage.innerHTML = Math.round(1.01**(WhiteValue+WrathSoulShard+MercySoulShard+StrMagSoulShard)*(PerceptionMod/2+HolyKnightSoulShard+transPortLate("WrathKnightField")+transPortLate("MercyKnightField")+transPortLate("StrKnightField"))*num*100)/100
const assocIni = spell+"Ini"
const spellSpeed = document.getElementById(assocIni)
spellSpeed.innerHTML = Math.round(0.99**((AgilityMod+PerceptionMod)*2)*Math.exp(1/5)*50*num)/100
}
function SpellChannel (name, Skill, branch) {
const num = 1/0.99**((AgilityMod+PerceptionMod)*2)/Math.exp(1/5)*2
const assocDam = name+"Dam"
const spellDamage = document.getElementById(assocDam)
spellDamage.innerHTML = Math.round(1.01**(Skill)*(PerceptionMod/2+branch+transPortLate(name+"Field"))*num*100)/100
const assocIni = name + "Ini"
const spellSpeed = document.getElementById(assocIni)
spellSpeed.innerHTML = Math.round(0.99**((AgilityMod+PerceptionMod)*2)*Math.exp(1/5)*50*num)/100
}
function Spell (name, Skill, branch) {
const num = Mana/0.99**((AgilityMod+PerceptionMod)*2)/Math.exp(1/5)*2
const assocDam = name+"Dam"
const spellDamage = document.getElementById(assocDam)
spellDamage.innerHTML = Math.round(1.01**(Skill)*(PerceptionMod/2+branch+transPortLate(name+"Field"))*num*100)/100
const assocIni = name + "Ini"
const spellSpeed = document.getElementById(assocIni)
spellSpeed.innerHTML = Math.round(0.99**((AgilityMod+PerceptionMod)*2)*Math.exp(1/5)*50*num)/100
}
Weapon("Dagger", 1, 0.2, 1, 1, 1, 0);//single-handed dagger - double weight is dual wielding
Weapon("Scimitar", 1, 0.8, 0.5, 4, 1.5, 5);//dual wield
Weapon("Casomyr", 1, 1, 1, 6, 1.5, 20);//two-handed greatsword
SpellChannel("VampDrain", NecroValue, VampSoulShard);
Spell("ArmyMinion", NecroValue, ArmySoulShard);
SilentKnight("SilentKnight");
HolyKnight("HolyKnight");
let StrengthDisplay=Math.floor(StrengthFlat), StrengthDisMod=Math.floor(StrengthMod).toString();
let PerceptionDisplay=Math.floor(PerceptionFlat), PerceptionDisMod=Math.floor(PerceptionMod).toString();
let AgilityDisplay=Math.floor(AgilityFlat), AgilityDisMod=Math.floor(AgilityMod).toString();
let CharismaDisplay=Math.floor(CharismaFlat), CharismaDisMod=Math.floor(CharismaMod).toString();
let EnduranceDisplay=Math.floor(EnduranceFlat), EnduranceDisMod=Math.floor(EnduranceMod).toString();
function displayCharTest() {
document.getElementById("Str").innerHTML = StrengthDisplay, document.getElementById("StrM").innerHTML = StrengthDisMod;
document.getElementById("Per").innerHTML = PerceptionDisplay, document.getElementById("PerM").innerHTML = PerceptionDisMod;
document.getElementById("Agi").innerHTML = AgilityDisplay, document.getElementById("AgiM").innerHTML = AgilityDisMod;
document.getElementById("Cha").innerHTML = CharismaDisplay, document.getElementById("ChaM").innerHTML = CharismaDisMod;
document.getElementById("End").innerHTML = EnduranceDisplay, document.getElementById("EndM").innerHTML = EnduranceDisMod;
document.getElementById("SAth").innerHTML = Math.floor(AthleticsValue);
document.getElementById("SEva").innerHTML = Math.floor(EvasionValue);
document.getElementById("SSte").innerHTML = Math.floor(StealthValue);
document.getElementById("SNeg").innerHTML = Math.floor(NegotiationValue);
document.getElementById("SCha").innerHTML = Math.floor(CharmValue);
document.getElementById("SCom").innerHTML = Math.floor(CommandValue);
document.getElementById("SMed").innerHTML = Math.floor(MedicalValue);
document.getElementById("SNat").innerHTML = Math.floor(NatureValue);
document.getElementById("SEng").innerHTML = Math.floor(EngineeringValue);
document.getElementById("SArc").innerHTML = Math.floor(ArcanaValue);
document.getElementById("SSec").innerHTML = Math.floor(SecurityValue);
document.getElementById("SLib").innerHTML = Math.floor(Liberal_ArtsValue);
document.getElementById("SSla").innerHTML = Math.floor(SlashValue);
document.getElementById("SHew").innerHTML = Math.floor(HewValue);
document.getElementById("SSta").innerHTML = Math.floor(StabValue);
document.getElementById("SPar").innerHTML = Math.floor(ParryValue);
document.getElementById("SSho").innerHTML = Math.floor(ShootValue);
document.getElementById("SThr").innerHTML = Math.floor(ThrowValue);
document.getElementById("SWhi").innerHTML = Math.floor(WhiteValue);
document.getElementById("SEle").innerHTML = Math.floor(ElementalValue);
document.getElementById("SDru").innerHTML = Math.floor(DruidicValue);
document.getElementById("SMir").innerHTML = Math.floor(MirrorValue);
document.getElementById("SNec").innerHTML = Math.floor(NecroValue);
document.getElementById("Health").innerHTML = Math.round(HealthMAX);
document.getElementById("ArmorClass").innerHTML = Math.round(ArmorClass);
document.getElementById("Exertion").innerHTML = Math.round(Exertion);
document.getElementById("Mana").innerHTML = Math.round(Mana);
document.getElementById("Composure").innerHTML = Math.round(Composure);
document.getElementById("Reaction").innerHTML = Math.round(Reaction);
document.getElementById("Fortitude").innerHTML = Math.round(Fortitude);
}
displayCharTest()
}
document.getElementById("Arctic").addEventListener("change",fillVals);
document.getElementById("Temperate").addEventListener("change",fillVals);
document.getElementById("Tropical").addEventListener("change",fillVals);
document.getElementById("Mountains").addEventListener("change",fillVals);
document.getElementById("Plains").addEventListener("change",fillVals);
document.getElementById("Coast").addEventListener("change",fillVals);
document.getElementById("Forest").addEventListener("change",fillVals);
document.getElementById("Desert").addEventListener("change",fillVals);
document.getElementById("Urban").addEventListener("change",fillVals);
document.getElementById("TotalXP").addEventListener("change",fillVals);
document.getElementById("Athletics").onchange = fillVals;
document.getElementById("Evasion").onchange = fillVals;
document.getElementById("Stealth").onchange = fillVals;
document.getElementById("Negotiation").onchange = fillVals;
document.getElementById("Charm").onchange = fillVals;
document.getElementById("Command").onchange = fillVals;
document.getElementById("Medical").onchange = fillVals;
document.getElementById("Nature").onchange = fillVals;
document.getElementById("Engineering").onchange = fillVals;
document.getElementById("Arcana").onchange = fillVals;
document.getElementById("Security").onchange = fillVals;
document.getElementById("Liberal_Arts").onchange = fillVals;
document.getElementById("Slash").onchange = fillVals;
document.getElementById("Hew").onchange = fillVals;
document.getElementById("Stab").onchange = fillVals;
document.getElementById("Parry").onchange = fillVals;
document.getElementById("Shoot").onchange = fillVals;
document.getElementById("Throw").onchange = fillVals;
document.getElementById("White Magic").onchange = fillVals;
document.getElementById("Elemental Magic").onchange = fillVals;
document.getElementById("Druidic Magic").onchange = fillVals;
document.getElementById("Mirror Magic").onchange = fillVals;
document.getElementById("Necromancy").onchange = fillVals;
/*function gaussianDiceRoll(ev) {
const assocField = ev.target.id.replace("Button", "Field")
const assocDam = ev.target.id.replace("Button", "Dam")
let u = 0, v = 0;
while(u === 0) u = Math.random();
while(v === 0) v = Math.random();
const mean = parseInt(document.getElementById(assocDam).value)
const storeGaussVal = Math.sqrt( -2.0 * Math.log( u ) ) * Math.cos( 2.0 * Math.PI * v );
const elementToChange = document.getElementById(assocField)
elementToChange.innerHTML = storeGaussVal*mean/3.6+mean
return elementToChange.innerHTML
}*/
function gaussRoll(mean ) {
let u = 0, v = 0;
while(u === 0) u = Math.random();
while(v === 0) v = Math.random();
const storeGaussVal = Math.sqrt( -2.0 * Math.log( u ) ) * Math.cos( 2.0 * Math.PI * v );
return storeGaussVal*mean/3.6+mean
}
function eventHandler(ev) {
const assocField = ev.target.id.replace("Press", "Output")
const assocDam = ev.target.id.replace("Press", "Dam")
const elementToChange = document.getElementById(assocField)
const mean = parseFloat(document.getElementById(assocDam).innerHTML)
elementToChange.innerHTML = gaussRoll(mean)
return elementToChange.innerHTML
}
function SoulShardIncrease(ev) {
const addocField = ev.target.id.replace("Button", "Field")
const elementToChange = document.getElementById(addocField)
elementToChange.innerHTML = parseInt(elementToChange.innerHTML)+1
fillVals()
}
document.getElementById("VampDrainPress").addEventListener("click", eventHandler);
document.getElementById("DaggerPress").addEventListener("click", eventHandler);
document.getElementById("ScimitarPress").addEventListener("click", eventHandler);
document.getElementById("CasomyrPress").addEventListener("click", eventHandler);
document.getElementById("StrengthIncreaseButton").addEventListener("click", SoulShardIncrease);
document.getElementById("PerceptionIncreaseButton").addEventListener("click", SoulShardIncrease);
document.getElementById("AgilityIncreaseButton").addEventListener("click", SoulShardIncrease);
document.getElementById("CharismaIncreaseButton").addEventListener("click", SoulShardIncrease);
document.getElementById("EnduranceIncreaseButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FireBoltButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FireWaveButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FireShieldButton").addEventListener("click", SoulShardIncrease);
document.getElementById("WallOfFireButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FireSummonButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FireRadButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FireBurnButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FireStaggerButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FirePanicButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FireSummonEquipButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FrostBlastButton").addEventListener("click", SoulShardIncrease);
document.getElementById("IceShardButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FrostWeaponButton").addEventListener("click", SoulShardIncrease);
document.getElementById("WallOfIceButton").addEventListener("click", SoulShardIncrease);
document.getElementById("IceSummonButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FrostRadButton").addEventListener("click", SoulShardIncrease);
document.getElementById("PiercingColdButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FrostFreezeButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FrostBlindButton").addEventListener("click", SoulShardIncrease);
document.getElementById("IceSummonEquipButton").addEventListener("click", SoulShardIncrease);
document.getElementById("LightningStrikeButton").addEventListener("click", SoulShardIncrease);
document.getElementById("LightningButton").addEventListener("click", SoulShardIncrease);
document.getElementById("ShockWeaponButton").addEventListener("click", SoulShardIncrease);
document.getElementById("WallOfLightningButton").addEventListener("click", SoulShardIncrease);
document.getElementById("ShockSummonButton").addEventListener("click", SoulShardIncrease);
document.getElementById("ShockRadButton").addEventListener("click", SoulShardIncrease);
document.getElementById("ShockStunButton").addEventListener("click", SoulShardIncrease);
document.getElementById("ShockBlindButton").addEventListener("click", SoulShardIncrease);
document.getElementById("ShockDeafenButton").addEventListener("click", SoulShardIncrease);
document.getElementById("ShockSummonEquipButton").addEventListener("click", SoulShardIncrease);
document.getElementById("VampDrainButton").addEventListener("click", SoulShardIncrease);
document.getElementById("VampSlowButton").addEventListener("click", SoulShardIncrease);
document.getElementById("VampJoyButton").addEventListener("click", SoulShardIncrease);
document.getElementById("VampFogButton").addEventListener("click", SoulShardIncrease);
document.getElementById("VampFlowButton").addEventListener("click", SoulShardIncrease);
document.getElementById("VampRadButton").addEventListener("click", SoulShardIncrease);
document.getElementById("VampWeaponButton").addEventListener("click", SoulShardIncrease);
document.getElementById("VampKnightButton").addEventListener("click", SoulShardIncrease);
document.getElementById("KnightDrainButton").addEventListener("click", SoulShardIncrease);
document.getElementById("KnightSlowButton").addEventListener("click", SoulShardIncrease);
document.getElementById("ArmyMinionButton").addEventListener("click", SoulShardIncrease);
document.getElementById("ArmyChampionButton").addEventListener("click", SoulShardIncrease);
document.getElementById("ArmyGeneralButton").addEventListener("click", SoulShardIncrease);
document.getElementById("ArmyPoisonButton").addEventListener("click", SoulShardIncrease);
document.getElementById("ArmyDiseaseButton").addEventListener("click", SoulShardIncrease);
document.getElementById("ArmyEquipButton").addEventListener("click", SoulShardIncrease);
document.getElementById("ArmyPanicButton").addEventListener("click", SoulShardIncrease);
document.getElementById("ArmyKnightButton").addEventListener("click", SoulShardIncrease);
document.getElementById("KnightPanicButton").addEventListener("click", SoulShardIncrease);
document.getElementById("KnightSummonEquipButton").addEventListener("click", SoulShardIncrease);
document.getElementById("DeathRayButton").addEventListener("click", SoulShardIncrease);
document.getElementById("DeathParalyzeButton").addEventListener("click", SoulShardIncrease);
document.getElementById("DeathFingerButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FingerCrippleButton").addEventListener("click", SoulShardIncrease);
document.getElementById("FingerVulnerateButton").addEventListener("click", SoulShardIncrease);
document.getElementById("DeathWeaponButton").addEventListener("click", SoulShardIncrease);
document.getElementById("DeathKnightButton").addEventListener("click", SoulShardIncrease);
document.getElementById("KnightPoisonButton").addEventListener("click", SoulShardIncrease);
document.getElementById("KnightDiseaseButton").addEventListener("click", SoulShardIncrease);
document.getElementById("KnightDarknessAuraButton").addEventListener("click", SoulShardIncrease);
document.getElementById("WrathBoltButton").addEventListener("click", SoulShardIncrease);
document.getElementById("WrathChannelButton").addEventListener("click", SoulShardIncrease);
document.getElementById("WrathWeaponButton").addEventListener("click", SoulShardIncrease);
document.getElementById("WrathSmiteButton").addEventListener("click", SoulShardIncrease);
document.getElementById("WrathBlindButton").addEventListener("click", SoulShardIncrease);
document.getElementById("WrathTurnButton").addEventListener("click", SoulShardIncrease);
document.getElementById("WrathRadButton").addEventListener("click", SoulShardIncrease);
document.getElementById("WrathKnightButton").addEventListener("click", SoulShardIncrease);
document.getElementById("KnightTurnButton").addEventListener("click", SoulShardIncrease);
document.getElementById("KnightHolyDamageButton").addEventListener("click", SoulShardIncrease);
document.getElementById("MercyHealButton").addEventListener("click", SoulShardIncrease);
document.getElementById("HealCureButton").addEventListener("click", SoulShardIncrease);
document.getElementById("HealBreakCurseButton").addEventListener("click", SoulShardIncrease);
document.getElementById("MercyBuffButton").addEventListener("click", SoulShardIncrease);
document.getElementById("BuffResistanceButton").addEventListener("click", SoulShardIncrease);
document.getElementById("MercyWeaponButton").addEventListener("click", SoulShardIncrease);
document.getElementById("MercyKBButton").addEventListener("click", SoulShardIncrease);
document.getElementById("MercyRadButton").addEventListener("click", SoulShardIncrease);
document.getElementById("MercyKnightButton").addEventListener("click", SoulShardIncrease);
document.getElementById("KnightDefenseAuraButton").addEventListener("click", SoulShardIncrease);
document.getElementById("StrBlessButton").addEventListener("click", SoulShardIncrease);
document.getElementById("BlessSavesButton").addEventListener("click", SoulShardIncrease);
document.getElementById("BlessOffButton").addEventListener("click", SoulShardIncrease);
document.getElementById("StrHasteButton").addEventListener("click", SoulShardIncrease);
document.getElementById("StrAuraButton").addEventListener("click", SoulShardIncrease);
document.getElementById("StrAuraPureButton").addEventListener("click", SoulShardIncrease);
document.getElementById("StrAuraRegButton").addEventListener("click", SoulShardIncrease);
document.getElementById("StrRadButton").addEventListener("click", SoulShardIncrease);
document.getElementById("StrKnightButton").addEventListener("click", SoulShardIncrease);
document.getElementById("KnightEquipButton").addEventListener("click", SoulShardIncrease);
fillVals()