index.html 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Dead Cells calculator</title>
  6. <link rel="stylesheet" href="style.css">
  7. <script>
  8. let diff_tier = [
  9. 0, // 0 cells
  10. 2, // 1 cell
  11. 5, // 2 cells
  12. 8, // 3 cells
  13. 11 // 4 cells
  14. ];
  15. let level_tier = [
  16. [1, 0], // PrisonStart
  17. [3, 0], // PrisonCourtyard
  18. [7, 2], // PrisonDepths
  19. [3, 2], // SewerShort
  20. [6, 2], // PrisonRoof
  21. [8, 2], // Ossuary
  22. [7, 3], // SewerDepths
  23. [11, 0], // Bridge
  24. [11, 0], // Beholder
  25. // [9, 0], // PrisonCorrupt
  26. [11, 2], // StiltVillage
  27. [12, 2], // AncientTemple
  28. [12, 2], // Cemetery
  29. [15, 2], // Crypt
  30. [16, 2], // ClockTower
  31. // [13, 0], // Cavern
  32. [21, 0], // TopClockTower
  33. // [16, 0], // Giant
  34. [22, 2], // Castle
  35. [26, 0] // Throne
  36. ];
  37. let mob_hp = [
  38. 120 // Zombie
  39. ];
  40. let stats = [1, 1, 1];
  41. let diff = 0;
  42. let mob = -1;
  43. let level = -1;
  44. let counter = 0;
  45. function recalc(force) {
  46. if(mob == -1 || level == -1 || stats.includes(0)) {
  47. if(force) {
  48. if(counter == 7) {
  49. alert('f̴̈̃͑̽̓͋ͧͨ͆͏̢̙̲͈̩̺̣̖̱̙̪̺̼̦͇͕͈͞ù̬̝̬̻͇̗̟̝̥̰ͭ̆̄͂̃͟c͕͚̠͍̬̋͗ͪ̍ͭͯͯ̑͡k̸̹̦̩̠ͦͩͣ̾͊̂̀͟ì̷̛̪̠̳̩̟͎̯̜̪̠̯͕̝̯̝͓ͨ̑̈́ͯͤ̏ͦ̋̀͋́͜͠͝n̸̺̰̻̼̬̯̗̩͉̆ͪ̑͑ͨ͒ͩ̉ͨ̂̃͋̇̔̚ͅg̶̡̛̛̱͎̙̺̬͒ͥ̊͒ͮ̂̂ͧ̂ͩͦͫͦ̓ͩͫ͢ ̆͌̄͊́ͩ̄̇ͬ̾̊ͫ͊̑̒͊͏̯͇̟̩̬ͅd̛̽̒̈ͫ̈͌̑͋ͬ͡͏̗̲̞̬̟̠̳̝̙͚̪͕ā̸̡̨̻͇̭̘̬̤̳̟̲̩̩̭͕̫͙̙̘̒̃ͫͣͩͥ́ͅt̡̖̥̲̰̺͉̼͌̊ͮͤ̽̐̈́̀̕͜͟ȧ̷̢̫̯̳͕̗̟̻̦͙͇̻̻̹͇͈̊̋̾̅̋͒̈̌͋̋̅͞m̵̵̷̷̨͓̳̟̙̠̘̘̤̭͓̠̉́ͯ̉̎͗̅ͭͮ̔̇̒ͪm̛̦̤̳͈͍͖̹̖͊̓͑̽̽̀̒̚͘m̡̼͎̘̻͇͔̻͖̩̩̞̠̳̜͍͕ͭ͋ͪ̑ͨ̒ͬ͐̈̽ͩ̾͛̀ͦͣ͘͢͡m̸̴̶̧͍̟̭̯̟͙̦̼̰̝͚̘̲̻̩̣̩̬̬̾̈́̓ͪ́ͥ̾̽̎̈́͊͂͑͢m̞͖̗͓̯͔̰͍̖̫͖̙͍̮ͨ̎͗͌ͨͤ̀͝m̒̾ͣ̂ͦ̒̚҉͝͏͇̺̞̩͕͔̝m̶̷̛̤͉̥̯̟̄ͬ̾̎͐͆ͦ̈̔ͭͬ̀͘m̨͈͙̤̺̺̲̦̮͇̭̫̥̞̮̌̔͋͊͛̔̆̍̑ͩ̽͋̇̋͑̂ͤ̚͜m͓̟̳̦̻̻̼̠͇͔̰̽̉ͪ͗̓̐̐͆̋̓̓̽́̕͘ͅm̵̷̔̓̔ͬ̒̆͆̽̌҉̘̱̪͙̹͍̤̫̼̗͚̟̟̙̤͠ͅm̷̶̲̣̯̭͚̤͍̤̐ͥͣ͗̇ͨͩ͛̀m̸̨̰̥͖̠̥͎̼̝̹͔̯̺ͤ̔̓̎͡ͅm̶̷̢̡̻͇̺̝̥̤͉̑ͣ̄ͭ͌ͧͦͦͩm̱̖̪͈͔̭̤̝̹͇̳̠͎̬͎͙͉ͫͬ̆̃ͨ̀͠ͅḿ̷̷̧̹̩̹̗͖̺̤͇͙̔̌͘͠m̵ͨ͋̓͌̽̉ͬ͛̎͒̅ͯͥ̿ͧ̔͏̗̬̭̠̜̝͍͙̫̲͉͙̯̘ͅṃ̷̣̩̖͔̬͓̖͇̠͕̜͖͆ͫ̒̐̽̾̔̎ͨ͌ͥ̚̚̚͢͠ṃ̢̭̹̖̳ͩ̈͆ͧͪ̒̌̆͑ͤͪ͊ͦͤm̧͂̈́̇͌ͬ̇̓ͮͨ̏͋̓̔͝͡͏̪̱̝̠̬̮͕̠̟̥m̛̞͉͓̮͚̥̭͔̼̰͑̆ͬ̊̔̿ͦͬ̇̑̋̑m̵̷̢̼̝̫̞̤͎ͩ̉͒ͧͭ̐͐ͨ̈́̽͌͐͐̎̓͛̒̅͞m͂͌̅̎҉̺͓̟̤̺̫̖̮̖̰̺̯̭̼͢m͐̎ͣͧ̅͆̚͏̷̙̬̗̱͙̥͢͟͞m͂͌͋͊ͦ͂̏̍҉̨̩̜͖̟̞̠̫̱̖̭̰̮̺̗̭̕͜ͅm̷͆ͭ͊ͪ̉̌̆͛̚͘҉͉̰̣͚̭̫͞ṃ̵̷̖̪̹͓ͣ͂̎̑͐ͭ͂́͊̍̆̌̑͊͛͟ͅͅm̶̴̡͊̆̀̈͗҉̴̗͓̟̱̭̤͔͇ͅͅm̡͓͈̞͓̪̮̰̖̝̱̻͓̝͉̳ͫ̑͂̓̋mͬͣ̇ͤ̋͋̊ͪ̆̅ͪ̊̌̉́ͩ̚̕͜͠͏̛͖̥͖̗͙̤̣̘̯̤̞̼͕͎̗̮̜̯͖m̛̰͔̲̜̜ͭ͊̀͊͌̉͞m̨̼̰̗͙̯̱ͦͫ̇ͨͬ̄̆͒̑̅̔ͪͮ́͘͜͝');
  50. }
  51. else {
  52. alert('You must specify all the values.');
  53. }
  54. ++counter;
  55. }
  56. return;
  57. }
  58. let result = 0;
  59. let result1 = 0;
  60. let result2 = 0;
  61. let allstats = Number(stats[0]) + Number(stats[1]) + Number(stats[2]) - 3;
  62. let current_diff = diff_tier[diff];
  63. let current_mob_hp = mob_hp[mob];
  64. let current_level_mintier = Number(current_diff) + Number(level_tier[level][0]);
  65. let current_level_maxtier = Number(current_diff + level_tier[level][0]) + Number(level_tier[level][1]);
  66. // alert(current_mob_hp + ' ' + current_level_mintier + ' ' + current_level_maxtier + ' ' + allstats);
  67. result1 = Math.round(current_mob_hp * (1 + current_level_mintier * .12) * Math.pow(1.08, allstats));
  68. result2 = Math.round(current_mob_hp * (1 + current_level_maxtier * .12) * Math.pow(1.08, allstats));
  69. if(result1 === result2) {
  70. result = result1;
  71. }
  72. else {
  73. result = result1 + "-" + result2;
  74. }
  75. document.getElementById('result').innerHTML = result;
  76. }
  77. function update_stat(type, val) {
  78. stats[type] = val;
  79. recalc(false);
  80. }
  81. function update_diff(val) {
  82. diff = val;
  83. recalc(false);
  84. }
  85. function update_mob(val) {
  86. mob = val;
  87. recalc(false);
  88. }
  89. function update_level(val) {
  90. level = val;
  91. recalc(false);
  92. }
  93. function init() {
  94. stats[0] = document.getElementById('brut').value;
  95. stats[1] = document.getElementById('tact').value;
  96. stats[2] = document.getElementById('surv').value;
  97. }
  98. </script>
  99. </head>
  100. <body onload="document.getElementById('frm').reset();">
  101. <div class="navbar">
  102. <a href="https://docs.google.com/spreadsheets/d/1TxHlmb7zKaXEcbKbqoPMMUzOEdp_LLM-RMcdqH7-mpM">Stat spreadsheet</a>
  103. </div>
  104. <h1>Dead Cells HP calculator</h1>
  105. <datalist id="browsers">
  106. <option value="Internet Explorer">
  107. <option value="Firefox">
  108. <option value="Google Chrome">
  109. <option value="Opera">
  110. <option value="Safari">
  111. </datalist>
  112. <form id="frm">
  113. Brutality: <input value="1" min="1" step="1" type="number" onchange="update_stat(0, this.value)" id="brut" /><br />
  114. Tactics: <input value="1" min="1" step="1" type="number" onchange="update_stat(1, this.value)" id="tact" /><br />
  115. Survival: <input value="1" min="1" step="1" type="number" onchange="update_stat(2, this.value)" id="surv" /><br />
  116. Difficulty: <input value="0" min="0" max="4" step="1" type="number" onchange="update_diff(this.value)" id="diff" /><br />
  117. Level:
  118. <select id="level" onchange="update_level(this.value)">
  119. <option value="-1">&lt;choose&gt;</option>
  120. <option value="0">Prisoners' Quarters</option>
  121. <option value="1">PrisonCourtyard</option>
  122. <option value="2">PrisonDepths</option>
  123. <option value="3">SewerShort</option>
  124. <option value="4">PrisonRoof</option>
  125. <option value="5">Ossuary</option>
  126. <option value="6">SewerDepths</option>
  127. <option value="7">Bridge</option>
  128. <option value="8">Beholder</option>
  129. <option value="9">StiltVillage</option>
  130. <option value="10">AncientTemple</option>
  131. <option value="11">Cemetery</option>
  132. <option value="12">Crypt</option>
  133. <option value="13">ClockTower</option>
  134. <option value="14">TopClockTower</option>
  135. <option value="15">Castle</option>
  136. <option value="16">Throne</option>
  137. </select><br />
  138. Mob:
  139. <select id="mob" onchange="update_mob(this.value)">
  140. <option value="-1">&lt;choose&gt;</option>
  141. <option value="0">Zombie</option>
  142. <option value="1">Running Zombie</option>
  143. <option value="2">Purulent Zombie (Graveyard)</option>
  144. <option value="3">Buzzcutter</option>
  145. <option value="4">Purulent Zombie (Sewers)</option>
  146. <option value="5"></option>
  147. <option value="6"></option>
  148. <option value="7"></option>
  149. <option value="8"></option>
  150. <option value="9"></option>
  151. <option value="10"></option>
  152. <option value="11"></option>
  153. <option value="12"></option>
  154. <option value="13"></option>
  155. <option value="14"></option>
  156. <option value="15"></option>
  157. <option value="16"></option>
  158. <option value="17"></option>
  159. <option value="18"></option>
  160. <option value="19"></option>
  161. <option value="20"></option>
  162. <option value="21"></option>
  163. <option value="22"></option>
  164. <option value="23"></option>
  165. <option value="24"></option>
  166. <option value="25"></option>
  167. <option value="26"></option>
  168. <option value="27"></option>
  169. <option value="28"></option>
  170. <option value="29"></option>
  171. <option value="30"></option>
  172. <option value="31"></option>
  173. <option value="32"></option>
  174. <option value="33"></option>
  175. <option value="34"></option>
  176. <option value="35"></option>
  177. </select>
  178. </form>
  179. <button onclick="recalc(true)">Update</button>
  180. <button onclick="document.getElementById('frm').reset();">Reset</button>
  181. <div class="yay">HP: <span id="result">-</span></div>
  182. </body>
  183. </html>