Hyper Stat Counter
Very... improvised, but whatever!
by MegaScience
HTML
<form>
<fieldset>
<legend>
Hyper Stat Calculator
</legend>
<table id="levelInfo">
<tr>
<td>Level: </td>
<td>
<select id="inputLevel" onchange="countHSPoints()">
</select>
</td>
</tr>
<tr>
<td>Total Points: </td>
<td id="hyperPoints"></td>
</tr>
<tr>
<td>Current Points: </td>
<td id="currentPoints"></td>
</tr>
</table>
<table id="stats">
<tr>
<th>Stat</th>
<th>Level</th>
<th>Stat Amount</th>
</tr>
<tr>
<td>STR</td>
<td>
<select data-max-level="10" data-id="str" data-type="0" data-value="15" onchange="updatePoints(this)"></select>
</td>
<td id="str"></td>
</tr>
<tr>
<td>DEX</td>
<td>
<select data-max-level="10" data-id="dex" data-type="0" data-value="15" onchange="updatePoints(this)"></select>
</td>
<td id="dex"></td>
</tr>
<tr>
<td>INT</td>
<td>
<select data-max-level="10" data-id="int" data-type="0" data-value="15" onchange="updatePoints(this)"></select>
</td>
<td id="int"></td>
</tr>
<tr>
<td>LUK</td>
<td>
<select data-max-level="10" data-id="luk" data-type="0" data-value="15" onchange="updatePoints(this)"></select>
</td>
<td id="luk"></td>
</tr>
<tr>
<td>HP</td>
<td>
<select data-max-level="10" data-percent data-id="hp" data-type="0" data-value="2" onchange="updatePoints(this)"></select>
</td>
<td id="hp"></td>
</tr>
<tr>
<td>MP</td>
<td>
<select data-max-level="10" data-percent data-id="mp" data-type="0" data-value="2" onchange="updatePoints(this)"></select>
</td>
<td id="mp"></td>
</tr>
<tr>
<td>Demon Force</td>
<td>
<select...
CSS
form {
display: table;
margin: 0 auto;
}
#levelInfo {
margin: 0 auto;
}
input {
width: 50px;
}
select {
min-width: 45px;
}
table {
border-collapse: collapse;
}
tr:not(:last-child) td,
th {
border-bottom: 1px #bfbfbf solid;
}
td:last-child {
text-align: right;
}
#stats option {
color: green;
}
#stats option:disabled {
color: #bf4040;
background-color: #f6f3ee;
}
JavaScript
//--------------------------------------
// I know this code is pretty ugly.
// If you can improve it, just make
// sure to mention to me.
//--------------------------------------
var information = {
currentLevel: 0,
currentPoints: 0,
currentUsed: 0,
remainder: 0,
currentStatLevels: {
str: 0,
dex: 0,
int: 0,
luk: 0,
hp: 0,
mp: 0,
demFor: 0,
speed: 0,
jump: 0,
critRate: 0,
minCrit: 0,
maxCrit: 0,
ignDef: 0,
damage: 0,
bDamage: 0,
eleResist: 0,
statResist: 0,
stance: 0
},
levelAmounts: [0, 1, 2, 4, 8, 10, 15, 20, 25, 30, 35],
levelTotals: [0, 1, 3, 7, 15, 25, 40, 60, 85, 115, 150],
//specialIncr: [0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3],
specialIncr: [0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
};
function init() {
var levelSelection = document.getElementById("inputLevel");
var stats = document.getElementById("stats").getElementsByTagName("select");
var optionElement;
for (var countLevel = 140; countLevel < 251; countLevel++) {
optionElement = document.createElement("option");
optionElement.value = optionElement.text = countLevel;
levelSelection.appendChild(optionElement);
}
for (var eleCounter = 0; eleCounter < stats.length; eleCounter++) {
//console.log(stats[eleCounter].attributes);
var maxOptions = (stats[eleCounter].dataset.maxLevel == "5" ? 6 : 11);
for (var statLevel = 0; statLevel < maxOptions; statLevel++) {
optionElement = document.createElement("option");
optionElement.value = optionElement.text = statLevel;
stats[eleCounter].appendChild(optionElement);
}
calculateStat(stats[eleCounter]);
}
countHSPoints();
}
function isInt(value) {
var x;
return isNaN(value) ? !1 : (x = parseFloat(value), (0 | x) === x);
}
function countHSPoints() {
if (information.currentLevel > document.getElementById("inputLevel").value) resetStats();
var inputLevel = information.currentLevel =...