Rerolling Hitdice

by XarX

HTML

<pre id=painted></pre>

JavaScript

var _painted = 0, $painted = document.getElementById('painted');

var runs = 25000,
current_hitpoints = 0,
next_hitpoints = 0,
con_min = 0,
con_max = 7,
highest_hitpoints = [[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]],
end_hitpoints = [[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]];

//for (i=1;i<=100;i++) 	$painted.textContent+= rollHitDie(1,6) + "\n";
for (run=1;run<=runs;run++) {
	for (hitdie=2;hitdie<=12;hitdie++) {
  	if (hitdie == 4 || hitdie == 6 || hitdie == 8 || hitdie == 10 || hitdie == 12) {
      for (con=con_min;con<=con_max;con++) {
        current_hitpoints = 0;
        for (level=1;level<=20;level++) {
          next_hitpoints = hitdie + level*con;
          for (hitdice=1;hitdice<level;hitdice++) {
            next_hitpoints+= rollHitDie(1,hitdie);
          }
          if (next_hitpoints > current_hitpoints) {
            current_hitpoints = next_hitpoints;
            //$painted.textContent+= "Current HP changed to " + current_hitpoints + " at level " + level + "\n";
          }
        }
        end_hitpoints[hitdie][con]+=current_hitpoints/runs;
        //$painted.textContent+= "Saved HP are " + end_hitpoints[hitdie][con] + " from ending HP " + current_hitpoints + " and " + runs + " runs\n";
        if (current_hitpoints > highest_hitpoints[hitdie][con]) highest_hitpoints[hitdie][con] = current_hitpoints;
      }
    }
  }
}  

for (hitdie=2;hitdie<=12;hitdie++) {
	if (hitdie == 4 || hitdie == 6 || hitdie == 8 || hitdie == 10 || hitdie == 12) {
  	$painted.textContent+= "Hitdie: " + hitdie + "\n";
  	for (con=con_min;con<=con_max;con++) {
    	$painted.textContent+=...