CINXE.COM
Natural Selection Damage Calculator
<html> <head><script type="text/javascript" src="https://web-static.archive.org/_static/js/bundle-playback.js?v=7YQSqjSh" charset="utf-8"></script> <script type="text/javascript" src="https://web-static.archive.org/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="https://web-static.archive.org/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("http://www.lerk.de:80/damage-calculator.htm","20090813151317","https://web.archive.org/","web","https://web-static.archive.org/_static/", "1250176397"); </script> <link rel="stylesheet" type="text/css" href="https://web-static.archive.org/_static/css/banner-styles.css?v=p7PEIJWi" /> <link rel="stylesheet" type="text/css" href="https://web-static.archive.org/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <title>Natural Selection Damage Calculator</title> </head> <script language="JavaScript"> <!-- var selWeapUp; var selMarWeap; var selHive; var selCara; var selAlienTarget; var selShots ; var kKNDamage=30; //knife var kHGDamage=20; //pistol, or hand gun var kMGDamage=10; //lmg var kSGDamage=17; //shotgun var kSGBulletsPerShot=10 var kSGTotalDamage = kSGDamage* kSGBulletsPerShot; var kHMGDamage=20; var kGrenadeDamage=125; //grenade launcher var kWelderDamage=4; var kMineDamage=125; var kHandGrenadeDamage=80; var kKNROF=0.65; var kHGROF=0.20; var kMGROF=0.10; var kSGROF=1.30; var kHMGROF=0.10; var kGGROF=1.20; //grenade gun, aka grenade launcher var kWelderROF=1.00; var kHandGrenadePrimeTime=1.00; var kSkulkHealth=70 var kSkulkArmorUpgrade= 20; var kSkulkBaseArmor= 10; var kGorgeHealth=150 var kGorgeArmorUpgrade= 50; var kGorgeBaseArmor= 70; var kLerkHealth=125 var kLerkArmorUpgrade= 30; var kLerkBaseArmor= 30; var kFadeHealth=300 var kFadeArmorUpgrade= 100; var kFadeBaseArmor= 150; var kOnosHealth=950 var kOnosArmorUpgrade= 350; var kOnosBaseArmor= 600; var kHiveHealth =7000; var kAlienResourceTowerHealth = 2500; var kDefenseChamberHealth = 1200; var kMovementChamberHealth = 1000; var kSensoryChamberHealth = 800; var kOffenseChamberHealth = 1000; //percentage of damage that goes to health on every shot var kArmorAbsorptionPerExtraHive = 0.20; var kBaseAlienArmorAbsorb = 0.70; // how many health points 1 armor point is worth at 1 hive var kArmorToHealth = 2.0 var objKnife; var objPistol; var objLMG; var objSG; var objHMG; var objGG; var objWelder; var objMine; var objHG; var objSkulkTarget; var objGorgeTarget; var objeLerkTarget; var objFadeTarget; var objOnosTarget; var objHive; var objRT; var objDC; var objMC; var objSC; var objOC; var totalShots = 0; //just a safety during development var counter = 0; var objAlienTarget; var objMarineWeapon; var percentToArmor ; var percentToHealth; var tblMarineResult; function marineVsAlienCalculate(){ tblMarineResult=""; totalShots=0; initializeObjectsMvA(); getUI(); objAlienTarget = getAlienTarget(selAlienTarget, selCara); objMarineWeapon = getMarineWeapon(selMarWeap, selWeapUp); //since it's per EXTRA hive, hive 1 doesnt' count percentToArmor = Math.round((kBaseAlienArmorAbsorb + kArmorAbsorptionPerExtraHive*(selHive-1))*100)/100; percentToHealth = Math.round((1.0 - percentToArmor)*100)/100; //alert("percent to health "+ percentToHealth+", percent to armor"+percentToArmor); tblMarineResult; //set moddmg according to struct muliplier if this target is a struct if(objAlienTarget.targetType=="structure"){ objMarineWeapon.modDmg = objMarineWeapon.modDmg * objMarineWeapon.dmgVsStructMultiplier; } if(selShots=="dead"){ while(objAlienTarget.health>=1){ calculate(); } }else if(selShots=="rounds"){ var numOfRounds = document.formmVa.txtRounds.value; if(parseInt(numOfRounds)=="NaN"){ alert("Please enter a valid integer for number of rounds"); } else{ while(totalShots<numOfRounds){ calculate(); } } } var tdmg = objMarineWeapon.typeOfDmg; if(totalShots==1){ tdmg = tdmg.substring(0, tdmg.length-1); } var txtArmorResult = ""; if(!objAlienTarget.modArmor==0){ txtArmorResult = " and has armor of : " + Math.round(objAlienTarget.modArmor); } var txtTimeToKill = Math.round(objMarineWeapon.ROF*totalShots*100)/100; document.formmVa.txtMarineTotal.value= totalShots +" "+ tdmg + ", each doing " + objMarineWeapon.modDmg + " damage to " + objAlienTarget.name + " has health of : " + (Math.round(objAlienTarget.health)<0?0:Math.round(objAlienTarget.health)) + txtArmorResult + ", in " + txtTimeToKill + " seconds, excluding reload times." ; document.formmVa.txtMarineTbl.value=tblMarineResult; } function calculate(){ totalShots++; counter++; if(objAlienTarget.modArmor<=0){ objAlienTarget.health = objAlienTarget.health - objMarineWeapon.modDmg; }else{ objAlienTarget.health = objAlienTarget.health - objMarineWeapon.modDmg*percentToHealth; //armor at 1 hives is worth 2.5 health points, 70% dmg //armor at 2 hives is worth 3.0 health points, 80% dmg //armor at 3 hives is worth 3.5 health points, 90% dmg objAlienTarget.modArmor = objAlienTarget.modArmor - (objMarineWeapon.modDmg*percentToArmor)/(kArmorToHealth + (1.0 * selHive-1)); //take damage that was still calc against armor when armor was zero, and apply it to health if(objAlienTarget.modArmor<0){ var armorDmg = objAlienTarget.modArmor * -1; objAlienTarget.health = objAlienTarget.health - armorDmg*(2 + (0.5 * selHive-1)); objAlienTarget.modArmor =0; } } if(tblMarineResult==null){ tblMarineResult=""; } var txtArmor = ""; if(!objAlienTarget.modArmor<=0){ txtArmor = " armor: " + Math.round(objAlienTarget.modArmor) } tblMarineResult = tblMarineResult + objMarineWeapon.typeOfDmg.substring(0,objMarineWeapon.typeOfDmg.length-1) + " "+ totalShots + " " + objAlienTarget.name + " health: "+Math.round(objAlienTarget.health) + txtArmor + "\n"; } function initializeObjectsMvA(){ objKnife = new MarineWeapon(kKNDamage, kKNROF, "swipes", 1); objPistol = new MarineWeapon(kHGDamage, kHGROF, "shots", 1); objLMG = new MarineWeapon(kMGDamage, kMGROF, "shots", 1); objSG = new MarineWeapon(kSGTotalDamage, kSGROF, "shots", 1); objHMG = new MarineWeapon(kHMGDamage, kHMGROF, "shots", .5); objGG = new MarineWeapon(kGrenadeDamage, kGGROF, "grenades", 2); objWelder = new MarineWeapon(kWelderDamage, kWelderROF, "hits", 1); objMine = new MarineWeapon(kMineDamage, 0, "mines", 1); objHG = new MarineWeapon(kHandGrenadeDamage, kHandGrenadePrimeTime, "hand grenades", 1); objSkulkTarget = new AlienTarget(kSkulkHealth, kSkulkBaseArmor, kSkulkArmorUpgrade, "skulk", "alien"); objGorgeTarget = new AlienTarget(kGorgeHealth, kGorgeBaseArmor, kGorgeArmorUpgrade, "gorge", "alien"); objeLerkTarget = new AlienTarget(kLerkHealth, kLerkBaseArmor, kLerkArmorUpgrade, "lerk", "alien"); objFadeTarget = new AlienTarget(kFadeHealth, kFadeBaseArmor, kFadeArmorUpgrade, "fade", "alien"); objOnosTarget = new AlienTarget(kOnosHealth, kOnosBaseArmor, kOnosArmorUpgrade, "onos", "alien"); objHiveTarget = new AlienTarget(kHiveHealth, 0, 0, "hive", "structure"); objRTTarget = new AlienTarget(kAlienResourceTowerHealth, 0, 0, "resource tower", "structure"); objDCTarget = new AlienTarget(kDefenseChamberHealth, 0, 0, "defense chamber", "structure"); objMCTarget = new AlienTarget(kMovementChamberHealth, 0, 0, "movement chamber", "structure"); objSCTarget = new AlienTarget(kSensoryChamberHealth, 0, 0, "sensory chamber", "structure"); objOCTarget = new AlienTarget(kOffenseChamberHealth, 0, 0, "offense chamber", "structure"); } /** Takes UI and returns objects **/ //Takes the selected alien, gives back the data object //uses selected cara lvl upgrade to determine amt of armor function getAlienTarget(pSelAlien, pSelCara){ var retObjAlien; if(pSelAlien=="skulk"){ retObjAlien = objSkulkTarget; }else if(pSelAlien=="gorge"){ retObjAlien = objGorgeTarget; }else if(pSelAlien=="lerk"){ retObjAlien = objeLerkTarget; }else if(pSelAlien=="fade"){ retObjAlien = objFadeTarget; }else if(pSelAlien=="onos"){ retObjAlien = objOnosTarget; }else if(pSelAlien=="hive"){ retObjAlien = objHiveTarget; }else if(pSelAlien=="rt"){ retObjAlien = objRTTarget; }else if(pSelAlien=="dc"){ retObjAlien = objDCTarget; }else if(pSelAlien=="mc"){ retObjAlien = objMCTarget; }else if(pSelAlien=="sc"){ retObjAlien = objSCTarget; }else if(pSelAlien=="oc"){ retObjAlien = objOCTarget; } retObjAlien.modArmor = retObjAlien.baseArmor + (retObjAlien.armorUpgrade*(pSelCara/3)); // alert("The "+ pSelAlien + " was selected, with cara lvl"+pSelCara+ ", total armor " + retObjAlien.modArmor); return retObjAlien; } //Takes selected marine weapon and upgrade, returns weapon object function getMarineWeapon(pWeapon, pUpgrade){ var retObj; var canBeUpgraded = true; if(pWeapon=="knife"){ canBeUpgraded = false; retObj = objKnife; }else if(pWeapon=="pistol"){ retObj = objPistol; }else if(pWeapon=="lmg"){ retObj = objLMG; }else if(pWeapon=="sg"){ retObj = objSG; }else if(pWeapon=="hmg"){ retObj = objHMG; }else if(pWeapon=="gl"){ retObj = objGG; }else if(pWeapon=="welder"){ canBeUpgraded = true; retObj = objWelder; }else if(pWeapon=="mine"){ canBeUpgraded = true; retObj = objMine; }else if(pWeapon=="hg"){ canBeUpgraded = true; retObj = objHG; } if(canBeUpgraded){ retObj.modDmg = retObj.baseDmg + (retObj.baseDmg * pUpgrade); }else{ retObj.modDmg = retObj.baseDmg; } /** alert(pWeapon + ", Base Damage:"+ retObj.baseDmg + ", ROF: " + retObj.ROF + ", Modfied Damage: " + retObj.modDmg);<br> **/ return retObj; } /** Getting raw UI input. **/ //Gets all the user input function getUI(){ selWeapUp=getValueFromRadio(document.formmVa.rWeapUp); selMarWeap=getValueFromRadio(document.formmVa.rMarWeap); selHive=getValueFromRadio(document.formmVa.rHive); selCara=getValueFromRadio(document.formmVa.rCara); selAlienTarget=getValueFromRadio(document.formmVa.rAlienTarget); selShots = getValueFromRadio(document.formmVa.rShots); } function getValueFromRadio(radioButtonSet){ var rValue; for (var counter = 0; counter < radioButtonSet.length; counter++){ if (radioButtonSet[counter].checked){ rValue = radioButtonSet[counter].value; } } return rValue; } /** Constructors for data value objects **/ function AlienTarget(pHealth, pBaseArmor, pArmorUpgrade, pAlienName, pTargetType){ this.health = pHealth; this.baseArmor = pBaseArmor; this.armorUpgrade = pArmorUpgrade; this.modArmor = 0; this.name = pAlienName; //structure or alien this.targetType=pTargetType; } function MarineWeapon(pBaseDamage, pROF, pTypeOfDmg, pDmgVsStructMultiplier){ this.baseDmg = pBaseDamage; this.ROF = pROF; this.modDmg = 0; this.typeOfDmg=pTypeOfDmg; this.dmgVsStructMultiplier=pDmgVsStructMultiplier; } --> </script> <!-- Alienscripts --> <script language="javascript"> /**@todo: how are these factored in?! var kMarineArmorLevelOne=0.20; var kMarineArmorLevelTwo=0.40; var kMarineArmorLevelThree=0.60; **/ var kMarineBaseArmor = 30; var kMarineBaseHeavyArmor=200; var kMarineHeavyArmorUpgrade=90; var kMarineArmorUpgrade=60; var kHeavyArmorAbsorbPercent=95; var kBaseMarineArmorAbsorb = 0.70; var kAdvArmoryHealth = 4000; var kArmoryHealth = 2400; var kArmsLabHealth = 2200; var kCommandStationHealth = 10000; var kInfantryPortalHealth = 2500; var kMarineHealth = 100; var kObservatoryHealth = 1700; var kPhaseGateHealth = 3000; var kPrototypeLabHealth = 4000; var kResourceTowerHealth = 6000; var kSiegeHealth = 2000; var kTurretFactoryHealth = 3000; var kSentryHealth = 1300; var kParasiteDamage=10; var kBiteDamage= 75; var kLeapDamage= 80; var kDivineWindDamage= 200; var kSpitGDamage= 30; var kHealingSprayDamage= 13; var kBileBombDamage = 200; var kBite2Damage= 60; var kSporeDamage= 7; var kSwipeDamage= 80; var kAcidRocketDamage= 25; var kClawsDamage= 90; var kDevourDamage= 3; var kChargeDamage= 320; var kFocusDamageUpgradePercentPerLevel =1/3; var objSkulkAttacker; var objGorgeAttacker; var objLerkAttacker; var objFadeAttacker; var objOnosAttacker; var objCCTarget; var objIPTarget; var objRTTarget; var objArmoryTarget; var objAdvArmoryTarget; var objALTarget; var objTFTarget; var objTurrTarget; var objSiegeTarget; var objObsTarget; var objPGTarget; var objPLTarget; var objGruntTarget; var objMarineTarget; var objAlienAttacker; var abilityChosen; var totalHits; var counter; var percToArmorAvM; var percToHealthAvM; var tblAlienResult; var lastResult; function alienVsMarineCalculate(){ tblAlienResult=""; lastResult = "" totalHits = 0; counter =0; initializeObjectsAvM(); var selMarineTarget = getValueFromRadio(document.formaVm.rMarineTarget); objMarineTarget = getMarineTarget(selMarineTarget); objMarineTarget.isHA = document.formaVm.chHA.checked; if(objMarineTarget.isHA) objMarineTarget.marineName = "heavy armored marine"; setPercToArmorToHealth(); objAlienAttacker = getAlien(); abilityChosen = document.formaVm.sAbility.selectedIndex; setAlienDmg(); if((objMarineTarget.isStruct && objAlienAttacker.dmgVsStructMultiplierArr[abilityChosen]==0) || (!objMarineTarget.isStruct && objAlienAttacker.dmgVsGruntMultiplierArr[abilityChosen]==0)){ tblAlienResult = ""; lastResult=objAlienAttacker.weapNameArr[abilityChosen] + " cannot damage " + objMarineTarget.marineName + "." ; } else{ while(counter<1000 && objMarineTarget.hP>0){ totalHits++; counter++; if(objMarineTarget.totalArmor<=0||objAlienAttacker.weapValueArr[abilityChosen]=="devour" ){ objMarineTarget.hP = objMarineTarget.hP - objAlienAttacker.weapDmg[abilityChosen]; }else{ objMarineTarget.hP = objMarineTarget.hP - objAlienAttacker.weapDmg[abilityChosen]*percToHealthAvM; //assuming one armor point is worth 2 health points objMarineTarget.totalArmor = objMarineTarget.totalArmor - (objAlienAttacker.weapDmg[abilityChosen]*percToArmorAvM)/2 //take damage that was still calc against armor when armor was zero, and apply it to health if(objMarineTarget.totalArmor<0){ var armorDmg = objMarineTarget.totalArmor * -1; objMarineTarget.hP = objMarineTarget.hP - armorDmg*2; objMarineTarget.totalArmor =0; } } if(tblAlienResult==null){ tblAlienResult =""; } var txtArmor =""; if (!objMarineTarget.isStruct){ txtArmor= ", armor: " + Math.round(objMarineTarget.totalArmor); } lastResult=objMarineTarget.marineName + " health: "+Math.round(objMarineTarget.hP) + txtArmor + "\n"; tblAlienResult = tblAlienResult + objAlienAttacker.dmgTypeArr[abilityChosen].substring(0,objAlienAttacker.dmgTypeArr[abilityChosen].length-1) + " "+ totalHits + " " +" " +lastResult; } lastResult = displayEndResult(); } document.formaVm.txtAlienTotal.value = lastResult; document.formaVm.txtAlienTbl.value = tblAlienResult; } function displayEndResult(){ //have it show singular version if only one hit required if(totalHits==1){ objAlienAttacker.dmgTypeArr[abilityChosen] = objAlienAttacker.dmgTypeArr[abilityChosen].substring(0,objAlienAttacker.dmgTypeArr[abilityChosen].length-1) } if(objAlienAttacker.weapNameArr[abilityChosen]=="Spore"&&objMarineTarget.isHA){ lastResult = "Heavy Armored marines cannot be harmed by spores."; } lastResult =totalHits + " " + objAlienAttacker.dmgTypeArr[abilityChosen] + " " + lastResult + " each " +objAlienAttacker.dmgTypeArr[abilityChosen].substring(0,objAlienAttacker.dmgTypeArr[abilityChosen].length-1) +" doing " +objAlienAttacker.weapDmg[abilityChosen] + " damage."; return lastResult; } function setPercToArmorToHealth(){ if(!objMarineTarget.isStruct){ if(objMarineTarget.isHA){ percToArmorAvM = kHeavyArmorAbsorbPercent/100; objMarineTarget.totalArmor = kMarineBaseHeavyArmor + kMarineHeavyArmorUpgrade*(objMarineTarget.armorUp/3); }else{ percToArmorAvM = kBaseMarineArmorAbsorb; objMarineTarget.totalArmor = kMarineBaseArmor + kMarineArmorUpgrade*(objMarineTarget.armorUp/3); } percToHealthAvM = 1-percToArmorAvM; } else if (objMarineTarget.isStruct){ percToHealthAvM = 1; } } function getAlien(){ var selAlien = getValueFromRadio(document.formaVm.rAlien); objAlienAttacker = getAlienAttacker(selAlien); return objAlienAttacker; } //determines type of damage based on focus or not function setAlienDmg(){ var sFocus = document.formaVm.sFocus.value; if(isFocus()&& sFocus!="none"){ objAlienAttacker.weapDmg[abilityChosen] = objAlienAttacker.weapDmg[abilityChosen] + objAlienAttacker.weapDmg[abilityChosen]*sFocus*kFocusDamageUpgradePercentPerLevel; } if(objMarineTarget.isStruct){ objAlienAttacker.weapDmg[abilityChosen]=objAlienAttacker.weapDmg[abilityChosen]*objAlienAttacker.dmgVsStructMultiplierArr[abilityChosen]; } return objAlienAttacker.weapDmg[abilityChosen]; } function handleAlienSel(){ //using a utility funciton from the mVa section initializeObjectsAvM(); objAlienAttacker = getAlien(); privPopAbilitySel(); } //populate the abilities based on the alien selected function privPopAbilitySel(){ privClearSelBox(document.formaVm.sAbility); for(i = 0; i < objAlienAttacker.weapNameArr.length; i++){ document.formaVm.sAbility.options[i] = new Option(objAlienAttacker.weapNameArr[i] , objAlienAttacker.weapValueArr[i]); } document.formaVm.sAbility.options.selectedIndex = 0; handleAbilitySel(); } //only allows for focus selection if a slot one weapon is picked function handleAbilitySel(){ if(isFocus()){ document.formaVm.sFocus.options[0]= new Option("None","none"); document.formaVm.sFocus.options[1]= new Option("1","1"); document.formaVm.sFocus.options[2]= new Option("2","2"); document.formaVm.sFocus.options[3]= new Option("3","3"); document.formaVm.sFocus.options.selectedIndex = 0; }else{ privClearSelBox(document.formaVm.sFocus); document.formaVm.sFocus.options[0]= new Option("N/A",""); } } function isFocus(){ objAlienAttacker = getAlien(); var sAbil = document.formaVm.sAbility; return (document.formaVm.sAbility.value==objAlienAttacker.weapValueArr[0]); } function privClearSelBox(pSelBox){ for(i = 0 ; i < 4 ; i++){ pSelBox.options[0]=null; } } function initializeObjectsAvM(){ /** pWeapNameArr , pWeapValueArr , pWeapDamageArr , pName , pDmgTypeArr , pDmgVsStructMultiplierArr , pDmgVsGruntMultiplierArr **/ objSkulkAttacker = new AlienAttacker(["Bite","Parasite","Leap","Xenocide"] , ["bite","para","leap","xeno"] , [kBiteDamage,kParasiteDamage,kLeapDamage,kDivineWindDamage] , "skulk" , ["bites","parasites","leaps","xenocides"] , [1,1,1,1] , [1,1,1,1] ); objGorgeAttacker = new AlienAttacker(["Spit","Heal Spray", "Bile Bomb"] , ["spit","spray", "bb"] , [kSpitGDamage,kHealingSprayDamage, kBileBombDamage] , "gorge" , ["hits","sprays", "bombs"] , [1,0,1] , [1,1,0] ); objLerkAttacker = new AlienAttacker(["Bite","Spore"] , ["bite","spore"] , [kBite2Damage,kSporeDamage] , "lerk" , ["bites","seconds"] , [1,0] , [1,1] ); objFadeAttacker = new AlienAttacker(["Swipe","Acid Rocket"] , ["swipe","ar"] , [kSwipeDamage,kAcidRocketDamage] , "fade" , ["swipes","rockets"] , [1,1] , [1,1] ); objOnosAttacker = new AlienAttacker(["Gore","Devour","Charge"] , ["gore","devour","charge"] , [kClawsDamage,kDevourDamage,kChargeDamage] , "onos" , ["gores","seconds","seconds"] , [2,0,1] , [1,1,1] ); objCCTarget = new MarineTarget(true, kCommandStationHealth, 0, false, "command chair", 0); objIPTarget= new MarineTarget(true, kInfantryPortalHealth, 0, false, "infantry portal", 0); objRTTarget= new MarineTarget(true, kResourceTowerHealth, 0, false, "resource tower", 0); objArmoryTarget= new MarineTarget(true, kArmoryHealth, 0, false, "armory", 0); objAdvArmoryTarget= new MarineTarget(true, kAdvArmoryHealth, 0, false, "advanced armory", 0); objALTarget= new MarineTarget(true, kArmsLabHealth, 0, false, "arms lab", 0); objTFTarget= new MarineTarget(true, kTurretFactoryHealth, 0, false, "turret factory", 0); objTurrTarget= new MarineTarget(true, kSentryHealth, 0, false, "sentry turret", 0); objSiegeTarget= new MarineTarget(true, kSiegeHealth, 0, false, "siege turret", 0); objObsTarget= new MarineTarget(true, kObservatoryHealth, 0, false, "Observatory", 0); objPGTarget= new MarineTarget(true, kPhaseGateHealth, 0, false, "phase gate", 0); objPLTarget= new MarineTarget(true, kPrototypeLabHealth, 0, false, "prototype lab", 0); objGruntTarget= new MarineTarget(false, kMarineHealth, 0, false, "marine", 0); } function getAlienAttacker(pSelAlien){ var retObjAlien; if(pSelAlien=="skulk"){ retObjAlien = objSkulkAttacker; }else if(pSelAlien=="gorge"){ retObjAlien = objGorgeAttacker; }else if(pSelAlien=="lerk"){ retObjAlien = objLerkAttacker; }else if(pSelAlien=="fade"){ retObjAlien = objFadeAttacker; }else if(pSelAlien=="onos"){ retObjAlien = objOnosAttacker; } return retObjAlien; } function getMarineTarget(pSelMarine){ var retObjMarine; if(pSelMarine=="cc"){ retObjMarine = objCCTarget; }else if(pSelMarine=="ip"){ retObjMarine = objIPTarget; }else if(pSelMarine=="rt"){ retObjMarine = objRTTarget; }else if(pSelMarine=="armory"){ retObjMarine = objArmoryTarget; }else if(pSelMarine=="aa"){ retObjMarine = objAdvArmoryTarget; }else if(pSelMarine=="al"){ retObjMarine = objALTarget; }else if(pSelMarine=="tf"){ retObjMarine = objTFTarget; }else if(pSelMarine=="turr"){ retObjMarine = objTurrTarget; }else if(pSelMarine=="siege"){ retObjMarine = objSiegeTarget; }else if(pSelMarine=="obs"){ retObjMarine = objObsTarget; }else if(pSelMarine=="pg"){ retObjMarine = objPGTarget; }else if(pSelMarine=="pl"){ retObjMarine = objPLTarget; }else{ retObjMarine = objGruntTarget; objGruntTarget.armorUp=pSelMarine; } return retObjMarine; } function AlienAttacker(pWeapNameArr , pWeapValueArr , pWeapDamageArr , pName , pDmgTypeArr , pDmgVsStructMultiplierArr , pDmgVsGruntMultiplierArr){ this.weapNameArr = pWeapNameArr; this.weapValueArr = pWeapValueArr; this.weapDmg = pWeapDamageArr; this.name = pName; this.dmgTypeArr = pDmgTypeArr; this.dmgVsStructMultiplierArr = pDmgVsStructMultiplierArr; this.dmgVsGruntMultiplierArr = pDmgVsGruntMultiplierArr; } function MarineTarget(pIsStruct , pHP , pArmorUp , pIsHA , pMarineName , pTotalArmor){ this.isStruct=pIsStruct; this.hP=pHP; this.armorUp=pArmorUp; this.isHA=pIsHA; this.marineName = pMarineName; this.totalArmor = pTotalArmor; } function disableHA(){ document.formaVm.chHA.checked=false; document.formaVm.chHA.disabled=true; } function enableHA(){ document.formaVm.chHA.disabled=false; } </script> <body link="#006633" vlink="#006633" alink="#006633" text="#006633" bgcolor="#000000" onload="handleAlienSel()"> <h1>Natural Selection Damage Calculator</h1> <p>This is a Natural Selection Damage Calculator based on the <a href="https://web.archive.org/web/20090813151317/http://www.unknownworlds.com/ns/static/comm_manual/basic/damageCalculator.htm">original Damage Calculator</a> and tweaked by GameOver.</p> <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" width="100%" id="AutoNumber1"> <tr> <td width="50%"><b>Englisch</b><br> Try out our <a href="https://web.archive.org/web/20090813151317/http://www.lerk.de/natural_selection_search_engine.htm"> Natural Selection Search Engine</a> aswell.</td> <td width="50%"><b>German / Deutsch</b><br> Drei Angebote f黵 euch: <a href="https://web.archive.org/web/20090813151317/http://www.lerk.de/">Natural Selection News</a>, <a href="https://web.archive.org/web/20090813151317/http://www.lerk.de/forum/">Natural Selection Forum</a> und <a href="https://web.archive.org/web/20090813151317/http://www.nswiki.de.vu/">Natural Selection Wiki</a></td> </tr> </table> <h2>Known Bugs</h2> <ul> <li>Pressing F5 / reloading the page will solve most problems</li> </ul> <p> </p> <form name="formmVa" method="post" action=""> <table border="1"> <td colspan="5" class="marinePageTitle"><h2>Marine</h2></td> </tr> <td width="197" class="marineTableTitle"><b>Attacking</b></td> <td colspan="3" class="alienTableTitle"><b>Target</b></td> </tr> <tr> <td class="marineTableTitle"><b>Weapon Upgrade</b></td> <td width="80" class="alienTableTitle"><b>Alien</b></td> <td width="89" class="alienTableTitle"><b>Carapace Level</b></td> <td width="66" class="alienTableTitle"><b># of Hives</b></td> </tr> <tr> <td> <input name="rWeapUp" type="radio" value="0" checked> None<br> <input name="rWeapUp" type="radio" value=".1"> 1<br> <input name="rWeapUp" type="radio" value=".2"> 2<br> <input name="rWeapUp" type="radio" value=".3"> 3 </td> <td valign="top"> <input name="rAlienTarget" type="radio" value="skulk" checked> Skulk <br> <input name="rAlienTarget" type="radio" value="gorge"> Gorge <br> <input name="rAlienTarget" type="radio" value="lerk"> Lerk<br> <input name="rAlienTarget" type="radio" value="fade"> Fade<br> <input name="rAlienTarget" type="radio" value="onos"> Onos </td> <td> <input name="rCara" type="radio" value="0" checked> None<br> <input name="rCara" type="radio" value="1"> 1<br> <input name="rCara" type="radio" value="2"> 2<br> <input name="rCara" type="radio" value="3"> 3 </td> <td> <input name="rHive" type="radio" value="1" checked> 1/2 <br> <input name="rHive" type="radio" value="2"> 3 </td> </tr> <tr> <td class="marineTableTitle"><b>Weapon</b></td> <td colspan="3" class="alienTableTitle"><b>Structures</b></td> </tr> <tr> <td valign="top"> <p> <input name="rMarWeap" type="radio" value="knife" checked> Knife<br> <input name="rMarWeap" type="radio" value="welder"> Welder <br> <input name="rMarWeap" type="radio" value="pistol"> Pistol<br> <input name="rMarWeap" type="radio" value="lmg"> Light Machine Gun<br> <input name="rMarWeap" type="radio" value="sg"> Shotgun<br> <input name="rMarWeap" type="radio" value="hmg"> Heavy Machine Gun<br> <input name="rMarWeap" type="radio" value="gl"> Grenade Launcher<br> <input name="rMarWeap" type="radio" value="mine"> Mine<br> <input name="rMarWeap" type="radio" value="hg"> Hand Grenade </p> </td> <td colspan="3" valign="top"> <input name="rAlienTarget" type="radio" value="hive"> Hive<br> <input name="rAlienTarget" type="radio" value="rt"> Resource Tower<br> <input name="rAlienTarget" type="radio" value="dc"> Defense Chamber<br> <input name="rAlienTarget" type="radio" value="mc"> Movement Chamber<br> <input name="rAlienTarget" type="radio" value="sc"> Sensory Chamber<br> <input name="rAlienTarget" type="radio" value="oc"> Offense Chamber </div> <p> </p> </td> </tr> <tr> <td valign="top" class="marineTableTitle"><b>Specify Shots </b> </td> <td colspan="3" rowspan="2"> <textarea name="txtMarineTbl" cols="40" rows="10" id="txtMarineTbl" readonly></textarea> </td> </tr> <tr> <td valign="top"><br> <p> <input name="rShots" type="radio" value="dead" onclick="javascript:document.formmVa.txtRounds.value=''" checked> Until dead <br> <input name="rShots" type="radio" value="rounds"> This many rounds </p> <p> <input name="txtRounds" type="text" id="txtRounds" size="20"> </p> </td> </tr> </table> <p> </p> <p> <textarea name="txtMarineTotal" cols="75" rows="3" id="txtMarineTotal" readonly></textarea> </p> <p> <input name="btnCalculateMvA" type="Button" value="Calculate" onclick="marineVsAlienCalculate()"> </form> </p> <p> </p> <p><br> <!-- Alienstuff --> <form name="formaVm" method="post" action=""> <table border="1"> <tr> <td colspan="3" class="alienPageTitle"><h2>Alien</h2></td> </tr> <tr> <td width="125" class="alienTableTitle"><b>Attacking</b></td> <td colspan="2" class="marineTableTitle"><b>Target</b></td> </tr> <tr> <td class="alienTableTitle"><b>Class</b></td> <td width="125" class="marineTableTitle"><b>Marine Armor Level </b> </td> <td width="200" class="marineTableTitle"><b>Structure</b></td> </tr> <tr> <td> <input name="rAlien" type="radio" onclick="handleAlienSel();" value="skulk" checked> Skulk <br> <input name="rAlien" type="radio" value="gorge" onclick="handleAlienSel();"> Gorge <br> <input name="rAlien" type="radio" value="lerk" onclick="handleAlienSel();"> Lerk<br> <input name="rAlien" type="radio" value="fade" onclick="handleAlienSel();"> Fade<br> <input name="rAlien" type="radio" value="onos" onclick="handleAlienSel();"> Onos </td> <td rowspan="4" valign="top"> <p> <input name="rMarineTarget" type="radio" value="0" checked onclick="enableHA();"> none<br> <input name="rMarineTarget" type="radio" value="1" onclick="enableHA();"> 1<br> <input name="rMarineTarget" type="radio" value="2" onclick="enableHA();"> 2<br> <input name="rMarineTarget" type="radio" value="3" onclick="enableHA();"> 3 </p> <p> <input name="chHA" type="checkbox" value="checkbox"> Heavy Armor <br> </p></td> <td rowspan="4" valign="top"> <input name="rMarineTarget" type="radio" value="cc" onclick="disableHA();"> Command Chair <br> <input name="rMarineTarget" type="radio" value="ip" onclick="disableHA();"> Infantry Portal <br> <input name="rMarineTarget" type="radio" value="rt" onclick="disableHA();"> Resource Tower <br> <input name="rMarineTarget" type="radio" value="armory" onclick="disableHA();"> Armory<br> <input name="rMarineTarget" type="radio" value="aa" onclick="disableHA();"> Advanced Armory <br> <input name="rMarineTarget" type="radio" value="al" onclick="disableHA();"> Arms Lab <br> <input name="rMarineTarget" type="radio" value="tf" onclick="disableHA();"> Turret Factory <br> <input name="rMarineTarget" type="radio" value="turr" onclick="disableHA();"> Sentry Turret <br> <input name="rMarineTarget" type="radio" value="siege" onclick="disableHA();"> Siege Turret <br> <input name="rMarineTarget" type="radio" value="obs" onclick="disableHA();"> Observatory<br> <input name="rMarineTarget" type="radio" value="pg" onclick="disableHA();"> Phase Gate <br> <input name="rMarineTarget" type="radio" value="pl" onclick="disableHA();"> Prototype Lab <br> </td> </tr> <tr> <td class="alienTableTitle"><b>Ability</b></td> </tr> <tr> <td height="90" valign="top"> <select name="sAbility" size="4" onclick="handleAbilitySel();"> <option value=""></option> <option value=""></option> <option value=""></option> <option value=""></option> </select></td> </tr> <tr> <td width="125" class="alienTableTitle"><b>Focus Level </b> </td> </tr> <tr> <td width="125" valign="top"><select name="sFocus" size="5"> <option value=" "></option> <option value=""></option> <option value=""></option> <option value=""></option> </select></td> <td colspan="2"><textarea name="txtAlienTbl" cols="40" rows="10" id="txtAlienTbl" readonly></textarea></td> </tr> </table> <p> <textarea name="txtAlienTotal" cols="75" rows="3" id="txtAlienTotal" readonly></textarea> <br> </p> <p> <input name="btnCalculateAvM" type="Button" value="Calculate" onclick="alienVsMarineCalculate()"> </p> </form> </td> </tr> </table> <p> <link rel="SHORTCUT ICON" href="https://web.archive.org/web/20090813151317im_/http://manual.nsguides.org/ns.ico"> <script language="JAVASCRIPT"> //used to preload rollover images if (document.images) { imgM1 = new Image(); imgM2 = new Image(); imgA1 = new Image(); imgA2 = new Image(); imgG1 = new Image(); imgG2 = new Image(); imgMCell= new Image(); imgACell = new Image(); imgM1.src= "../images/marineTabOver.gif"; imgM2.src= "../images/marineTabNormal.gif"; imgA1.src= "../images/alienTabOver.gif"; imgA2.src= "../images/alienTabNormal.gif"; imgG1.src= "../images/generalTabOver.gif"; imgG2.src= "../images/generalTabNormal.gif"; imgMCell.src = "../images/marineMenuCell.gif"; imgACell.src = "../images/alienMenuCell.gif"; } </script> </p> <script type="text/javascript"> <!-- lastmod = document.lastModified // get string of last modified date lastmoddate = Date.parse(lastmod) // convert modified string to date document.writeln("<font size='1pt'><i>") if (lastmoddate == 0) { // unknown date (or January 1, 1970 GMT) document.writeln("Last Modified: Unknown") } else { document.writeln("Last Modified: " + lastmod) }// --> document.writeln("<i></font>") </script> </p> <script src="https://web.archive.org/web/20090813151317js_/http://www.google-analytics.com/urchin.js" type="text/javascript"> </script> <script type="text/javascript"> _uacct = "UA-132172-6"; urchinTracker(); </script> </body> <!-- InstanceEnd --></html><!-- FILE ARCHIVED ON 15:13:17 Aug 13, 2009 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 19:16:19 Feb 26, 2025. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 0.644 exclusion.robots: 0.034 exclusion.robots.policy: 0.02 esindex: 0.012 cdx.remote: 399.008 LoadShardBlock: 240.432 (3) PetaboxLoader3.datanode: 169.25 (4) PetaboxLoader3.resolve: 156.487 (2) load_resource: 170.59 -->