DragonRealms CONVERT Calculator

Calculate the number of ranks you will end up in a Crafting skill after you CONVERT all of your Mechanical Lore.

by padhg

HTML

<h1 id="title">DragonRealms CONVERT Calculator</h1>

<ul class="list">
  <li><label for="mechRanks">Mechanical Lore:</label></li>
  <li><input id="mechRanks" type="number" value="0"/></li>
  <li><label for="craftRanks">Crafting skill:</label></li>
  <li><input id="craftRanks" type="number" value="0"/></li>
</ul>

<button id="convertButton" type="button">Convert</button>

<div id="result" class="hidden">
You will end up with approximately <span id="ranks"></span> ranks in your Crafting skill.
</div>

CSS

.hidden {
  display: none;
}
.list {
  list-style: none;
  padding-left:0;
}

JavaScript

var ranksToBits = function (n) {
	// count up 200 + 201 + 202 + ... + 200+(n-1)
	// bits = ranks * (ranks + 399) / 2
	return n*(n+399)/2;
},
bitsToRanks = function(totalBits) {
	// find the rank based on totalBits
	// ranks = (-399 + sqrt(399^2-4*2*bits)) / 2
	return Math.floor((Math.sqrt(159201+8*totalBits)-399)/2)
},
calculateRanks = function () {
	// read the entered skill values
	var mechRanks = parseInt(document.getElementById('mechRanks').value),
	craftRanks = parseInt(document.getElementById('craftRanks').value);

	// return the reached number of ranks
	return bitsToRanks(ranksToBits(mechRanks) + ranksToBits(craftRanks));
},
convertButton = document.getElementById('convertButton');

convertButton.addEventListener("click", function () {
	// set the ranks value
	document.getElementById('ranks').innerHTML = calculateRanks();
	// unhide the result
	document.getElementById('result').className = '';
});