After that, I refined it a bit with the help of Funnyman and BTB in Chat, and decided to share it here.
Download Here
The only weapons this isn't really applicable for are those that follow a different formula than the default one that aren't named Omega Weapon.
Damage Coefficient is specifically for the Omega Weapon formula. If you select no and plug something in there (which, you have to plug something in there or the program will yell at you), it simply won't be used in the calculation.
As you can see, variance and multipliers are both included.
This is code that I plan to probably expand on at a later date. As I said it started as a 10 minute job but kinda branched out a little from there.
The calculator itself is coded in Visual Basic, and if anyone wants me to, I don't really have a problem with releasing the source code either.
Feel free to let me know what you guys think.
Source Code
Spoiler
Public Class Form1 Dim intMaxHP As Integer = 1 'Initialize Dim intCurHP As Integer = 1 'integers Dim intLvl As Integer = 1 'to Dim intVgr As Integer = 1 '1 Dim intSta As Integer = 1 'to Dim intBat As Integer = 1 'prevent Dim intDef As Integer = 1 'DivideByZero Dim intCoe As Integer = 1 'exceptions Dim intDmg As Integer = 1 Dim intVarMin As Integer Dim intVarAvg As Integer Dim intVarMax As Integer Dim intMult As Integer = 0 Dim boolDef As Boolean = True Dim boolSafe As Boolean = False Dim boolOmega As Boolean = False Dim boolPower As Boolean = False Dim boolBserk As Boolean = False Dim boolMorph As Boolean = False Dim boolJump As Boolean = False Dim boolJumpSpear As Boolean = False Dim boolThrow As Boolean = False Dim boolCrit As Boolean = False Dim boolValiant As Boolean = False Private Sub Label7_Click(sender As Object, e As EventArgs) Handles lblOutputMin.Click End Sub Private Sub btnCalc_Click(sender As Object, e As EventArgs) Handles btnCalc.Click If IsNumeric(txtMaxHP.Text) Then intMaxHP = Convert.ToInt32(txtMaxHP.Text) 'convert If IsNumeric(txtCurHP.Text) Then intCurHP = Convert.ToInt32(txtCurHP.Text) 'text If IsNumeric(txtLvl.Text) Then intLvl = Convert.ToInt32(txtLvl.Text) 'boxes If IsNumeric(txtVig.Text) Then intVgr = Convert.ToInt32(txtVig.Text) 'to If IsNumeric(txtStam.Text) Then intSta = Convert.ToInt32(txtStam.Text) 'usable If IsNumeric(txtBat.Text) Then intBat = Convert.ToInt32(txtBat.Text) 'numbers If IsNumeric(txtCoe.Text) Then intCoe = Convert.ToInt32(txtCoe.Text) 'for If IsNumeric(txtDef.Text) Then intDef = Convert.ToInt32(txtDef.Text) 'calculations Else MsgBox("You did not enter a numeric value.", , "Invalid Input") 'yell txtDef.Clear() txtDef.Focus() End If Else MsgBox("You did not enter a numeric value.", , "Invalid Input") 'at txtCoe.Clear() txtCoe.Focus() End If Else MsgBox("You did not enter a numeric value.", , "Invalid Input") 'user txtBat.Clear() txtBat.Focus() End If Else MsgBox("You did not enter a numeric value.", , "Invalid Input") 'for txtStam.Clear() txtStam.Focus() End If Else MsgBox("You did not enter a numeric value.", , "Invalid Input") 'not txtVig.Clear() txtVig.Focus() End If Else MsgBox("You did not enter a numeric value.", , "Invalid Input") 'entering txtLvl.Clear() txtLvl.Focus() End If Else MsgBox("You did not enter a numeric value.", , "Invalid Input") 'valid txtCurHP.Clear() txtCurHP.Focus() End If Else MsgBox("You did not enter a numeric value.", , "Invalid Input") 'input txtMaxHP.Clear() txtMaxHP.Focus() End If intDmg = 2 * intVgr + intBat + (((intLvl ^ 2) * intVgr / 16) * (intBat / 16)) / 24 'basic damage formula If chkCrit.Checked = True Then 'if Critical Hit is checked, set boolCrit to True boolCrit = True End If If chkBserk.Checked = True Then 'if Bserk is checked, set boolBserk to True boolBserk = True End If If chkMorph.Checked = True Then 'if Morph is checked, set boolMorph to True boolMorph = True End If If chkJump.Checked = True Then 'if Jump is checked, set boolJump to True boolJump = True End If If chkJumpSpear.Checked = True Then 'if Jump (Spear) is checked, set boolJumpSpear to True boolJumpSpear = True End If If chkThrow.Checked = True Then 'if Throw is checked, set boolThrow to True boolThrow = True End If If chkPower.Checked = True Then 'if Power Glove is checked, set boolPower to True boolPower = True End If If chkSafe.Checked = True Then 'if Safe is checked, set boolSafe to True boolSafe = True End If If chkValiant.Checked = True Then 'if Ignore Defense is checked, then ignore defense and Safe check boolDef = False boolSafe = False boolValiant = True End If If chkOmega.Checked = True Then 'if Omega Weapon is checked, ignore defense and Safe check, turn off all multipliers besides Power Glove, and use Omega Weapon formula boolDef = False boolOmega = True boolSafe = False boolBserk = False boolMorph = False boolJump = False boolJumpSpear = False boolThrow = False boolCrit = False End If If boolPower = True Then intDmg *= 1.25 End If If boolValiant = True Then intDmg += (intMaxHP - intCurHP) End If If boolOmega = True Then 'if boolOmega is True, use Omega Weapon formula intDmg = intDmg * (intLvl + (2 * intSta)) 'Step 1 intDmg = intDmg * ((intCurHP / 256) + 1) / ((intMaxHP / 256) + 1) 'Step 2 intDmg = (intDmg / 128) + 1 'Step 3 intDmg = intDmg + (intSta * intCoe) 'Step 4 End If If boolDef = True Then intDmg = (intDmg * (255 - intDef) / 256) + 1 End If If boolSafe = True Then intDmg = (intDmg * 170 / 256) + 1 End If If boolCrit = True Then 'if Critical Hit is checked, increment multiplier by 2 intMult += 2 End If If boolBserk = True Then 'if Bserk is checked, increment multiplier by 1 intMult += 1 End If If boolMorph = True Then 'if Morph is checked, increment multiplier by 1 intMult += 1 End If If boolJump = True Then 'if Jump is checked, increment multiplier by 1 intMult += 1 End If If boolJumpSpear = True Then 'if Jump (Spear) is checked, increment multiplier by 2 intMult += 2 End If If boolThrow = True Then 'if Throw is checked, increment multiplier by 2 intMult += 2 End If intDmg *= ((intMult * 0.5) + 1) intVarMin = intDmg * (224 / 256) 'minimum damage variance (lowest damage) intVarAvg = intDmg * (240 / 256) 'average damage variance (average damage) intVarMax = intDmg * (255 / 256) 'maximum damage variance (maximum damage) lblOutputMin.Text = "Minimum Damage: " & intVarMin 'output statement for minimum damage variance (lowest damage) lblOutputAvg.Text = "Average Damage: " & intVarAvg 'output statement for average damage variance (average damage) lblOutputMax.Text = "Maximum Damage: " & intVarMax 'output statement for maximum damage variance (maximum damage) intDmg = 0 'reset damage count to avoid snowballing values intMult = 0 'reset mult for the same reason as damage btnClear.Enabled = True boolDef = True 'reset boolSafe = False 'booleans boolOmega = False 'to boolPower = False 'default values boolBserk = False boolMorph = False boolJump = False boolJumpSpear = False boolThrow = False boolCrit = False boolValiant = False End Sub Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click txtMaxHP.Clear() txtCurHP.Clear() txtLvl.Clear() txtVig.Clear() txtStam.Clear() txtBat.Clear() txtCoe.Clear() txtDef.Clear() lblOutputMin.Text = "Minimum Damage: " lblOutputAvg.Text = "Average Damage: " lblOutputMax.Text = "Maximum Damage: " txtMaxHP.Focus() boolDef = True 'reset boolSafe = False 'booleans boolOmega = False 'to boolPower = False 'default values boolBserk = False boolMorph = False boolJump = False boolJumpSpear = False boolThrow = False boolCrit = False boolValiant = False chkSafe.Checked = False 'uncheck chkBserk.Checked = False 'all chkPower.Checked = False 'checkboxes chkOmega.Checked = False chkValiant.Checked = False chkMorph.Checked = False chkJump.Checked = False chkJumpSpear.Checked = False chkThrow.Checked = False chkCrit.Checked = False btnClear.Enabled = False 'disable clear button End Sub Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click Close() End Sub End Class
This post has been edited by Advent: 01 February 2015 - 03:41 PM