Advertisement
Guest User

DCSS Calculator Beta v0.1

a guest
Sep 23rd, 2016
481
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 36.49 KB | None | 0 0
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
  3. <html>
  4.  
  5. <head>
  6. <meta charset="utf-8">
  7. </head>
  8.  
  9. <script language="JavaScript">
  10. function calcmelee(f) {
  11.  
  12. if (f.str.value == "") {
  13. f.str.value = 10
  14. }
  15. if (f.intel.value == "") {
  16. f.intel.value = 10
  17. }
  18. if (f.dex.value == "") {
  19. f.dex.value = 10
  20. }
  21. if (f.skill_fighting.value == "") {
  22. f.skill_fighting.value = 0
  23. }
  24. if (f.skill_weapon.value == "") {
  25. f.skill_weapon.value = 0
  26. }
  27. if (f.skill_unarmed.value == "") {
  28. f.skill_unarmed.value = 0
  29. }
  30. if (f.skill_armour.value == "") {
  31. f.skill_armour.value = 0
  32. }
  33. if (f.skill_dodging.value == "") {
  34. f.skill_dodging.value = 0
  35. }
  36. if (f.skill_shield.value == "") {
  37. f.skill_shield.value = 0
  38. }
  39. if (f.skill_spellcasting.value == "") {
  40. f.skill_spellcasting.value = 0
  41. }
  42. if (f.skill_magic1.value == "") {
  43. f.skill_magic1.value = 0
  44. }
  45. if (f.skill_magic2.value == "") {
  46. f.skill_magic2.value = 0
  47. }
  48. if (f.skill_magic3.value == "") {
  49. f.skill_magic3.value = 0
  50. }
  51. if (f.slay.value == "") {
  52. f.slay.value = 0
  53. }
  54. if (f.claws.value == "") {
  55. f.claws.value = 0
  56. }
  57. if (f.mons_ac.value == "") {
  58. f.mons_ac.value = 5
  59. }
  60. if (f.mons_ev.value == "") {
  61. f.mons_ev.value = 10
  62. }
  63. if (f.claws.value > 3) {
  64. f.claws.value = 3
  65. }
  66. if (f.spell_level.value == "") {
  67. f.spell_level.value = 1
  68. }
  69. if (f.spell_level.value > 9) {
  70. f.spell_level.value = 9
  71. }
  72.  
  73. var i = 0;
  74. var j = 0;
  75.  
  76. var bdam = 0;
  77. var bacc = 0;
  78. var atkturn = 0;
  79. var minatkturn = 0;
  80. var twohand = 0;
  81. var notweapon = 0;
  82. var claws = parseInt(f.claws.value);
  83.  
  84. var playerstr = parseInt(f.str.value);
  85. var playerdex = parseInt(f.dex.value);
  86. var playerint = parseInt(f.intel.value);
  87.  
  88. if (f.might.checked) {
  89. playerstr += 5;
  90. }
  91. if (f.agility.checked) {
  92. playerdex += 5;
  93. }
  94. if (f.brilliance.checked) {
  95. playerint += 5;
  96. }
  97.  
  98. var skillfighting = parseInt(f.skill_fighting.value);
  99. var skillweapon = parseInt(f.skill_weapon.value);
  100. var skillarmour = parseInt(f.skill_armour.value);
  101. var skillshield = parseInt(f.skill_shield.value);
  102. var skillunarmed = parseInt(f.skill_unarmed.value);
  103.  
  104. if (f.weapon.selectedIndex == 0) {
  105. // dagger
  106. bdam = 4;
  107. bacc = 6;
  108. atkturn = 1;
  109. minatkturn = 0.5;
  110. twohand = 0;
  111. } else if (f.weapon.selectedIndex == 1) {
  112. // quick blade
  113. bdam = 5;
  114. bacc = 6;
  115. atkturn = 0.7;
  116. minatkturn = 0.3;
  117. twohand = 0;
  118. } else if (f.weapon.selectedIndex == 2) {
  119. // short sword
  120. bdam = 6;
  121. bacc = 4;
  122. atkturn = 1.1;
  123. minatkturn = 0.5;
  124. twohand = 0;
  125. } else if (f.weapon.selectedIndex == 3) {
  126. // rapier
  127. bdam = 8;
  128. bacc = 4;
  129. atkturn = 1.2;
  130. minatkturn = 0.5;
  131. twohand = 0;
  132. } else if (f.weapon.selectedIndex == 4) {
  133. // falchion
  134. bdam = 7;
  135. bacc = 2;
  136. atkturn = 1.3;
  137. minatkturn = 0.6;
  138. twohand = 0;
  139. } else if (f.weapon.selectedIndex == 5) {
  140. // long sword
  141. bdam = 9;
  142. bacc = 1;
  143. atkturn = 1.4;
  144. minatkturn = 0.7;
  145. twohand = 0;
  146. } else if (f.weapon.selectedIndex == 6) {
  147. // scimitar
  148. bdam = 11;
  149. bacc = -2;
  150. atkturn = 1.4;
  151. minatkturn = 0.7;
  152. twohand = 0;
  153. } else if (f.weapon.selectedIndex == 7) {
  154. // demon blade
  155. bdam = 12;
  156. bacc = -1;
  157. atkturn = 1.3;
  158. minatkturn = 0.6;
  159. twohand = 0;
  160. } else if (f.weapon.selectedIndex == 8) {
  161. // eudemon blade
  162. bdam = 13;
  163. bacc = -2;
  164. atkturn = 1.2;
  165. minatkturn = 0.6;
  166. twohand = 0;
  167. } else if (f.weapon.selectedIndex == 9) {
  168. // double sword
  169. bdam = 14;
  170. bacc = -1;
  171. atkturn = 1.5;
  172. minatkturn = 0.7;
  173. twohand = 0;
  174. } else if (f.weapon.selectedIndex == 10) {
  175. // great sword
  176. bdam = 14;
  177. bacc = -3;
  178. atkturn = 1.6;
  179. minatkturn = 0.7;
  180. twohand = 1;
  181. } else if (f.weapon.selectedIndex == 11) {
  182. // triple sword
  183. bdam = 17;
  184. bacc = -4;
  185. atkturn = 1.9;
  186. minatkturn = 0.7;
  187. twohand = 1;
  188. } else if (f.weapon.selectedIndex == 12) {
  189. // club
  190. bdam = 5;
  191. bacc = 3;
  192. atkturn = 1.3;
  193. minatkturn = 0.6;
  194. twohand = 0;
  195. } else if (f.weapon.selectedIndex == 13) {
  196. // whip
  197. bdam = 6;
  198. bacc = 2;
  199. atkturn = 1.1;
  200. minatkturn = 0.5;
  201. twohand = 0;
  202. } else if (f.weapon.selectedIndex == 14) {
  203. // mace
  204. bdam = 8;
  205. bacc = 3;
  206. atkturn = 1.4;
  207. minatkturn = 0.7;
  208. twohand = 0;
  209. } else if (f.weapon.selectedIndex == 15) {
  210. // flail
  211. bdam = 10;
  212. bacc = 0;
  213. atkturn = 1.4;
  214. minatkturn = 0.7;
  215. twohand = 0;
  216. } else if (f.weapon.selectedIndex == 16) {
  217. // demon whip
  218. bdam = 11;
  219. bacc = 1;
  220. atkturn = 1.1;
  221. minatkturn = 0.5;
  222. twohand = 0;
  223. } else if (f.weapon.selectedIndex == 17) {
  224. // sacred scourge
  225. bdam = 12;
  226. bacc = 0;
  227. atkturn = 1.1;
  228. minatkturn = 0.5;
  229. twohand = 0;
  230. } else if (f.weapon.selectedIndex == 18) {
  231. // morningstar
  232. bdam = 13;
  233. bacc = -2;
  234. atkturn = 1.5;
  235. minatkturn = 0.7;
  236. twohand = 0;
  237. } else if (f.weapon.selectedIndex == 19) {
  238. // dire flail
  239. bdam = 13;
  240. bacc = -3;
  241. atkturn = 1.3;
  242. minatkturn = 0.6;
  243. twohand = 1;
  244. } else if (f.weapon.selectedIndex == 20) {
  245. // eveningstar
  246. bdam = 15;
  247. bacc = -1;
  248. atkturn = 1.5;
  249. minatkturn = 0.7;
  250. twohand = 0;
  251. } else if (f.weapon.selectedIndex == 21) {
  252. // great mace
  253. bdam = 17;
  254. bacc = -4;
  255. atkturn = 1.7;
  256. minatkturn = 0.7;
  257. twohand = 1;
  258. } else if (f.weapon.selectedIndex == 22) {
  259. // giant club
  260. bdam = 20;
  261. bacc = -6;
  262. atkturn = 1.6;
  263. minatkturn = 0.7;
  264. twohand = 1;
  265. } else if (f.weapon.selectedIndex == 23) {
  266. // giant spiked club
  267. bdam = 22;
  268. bacc = -7;
  269. atkturn = 1.9;
  270. minatkturn = 0.7;
  271. twohand = 1;
  272. } else if (f.weapon.selectedIndex == 24) {
  273. // hand axe
  274. bdam = 7;
  275. bacc = 3;
  276. atkturn = 1.3;
  277. minatkturn = 0.6;
  278. twohand = 0;
  279. } else if (f.weapon.selectedIndex == 25) {
  280. // war axe
  281. bdam = 11;
  282. bacc = 0;
  283. atkturn = 1.5;
  284. minatkturn = 0.7;
  285. twohand = 0;
  286. } else if (f.weapon.selectedIndex == 26) {
  287. // broad axe
  288. bdam = 13;
  289. bacc = -2;
  290. atkturn = 1.6;
  291. minatkturn = 0.7;
  292. twohand = 0;
  293. } else if (f.weapon.selectedIndex == 27) {
  294. // battle axe
  295. bdam = 15;
  296. bacc = -4;
  297. atkturn = 1.7;
  298. minatkturn = 0.7;
  299. twohand = 1;
  300. } else if (f.weapon.selectedIndex == 28) {
  301. // executioner's axe
  302. bdam = 18;
  303. bacc = -6;
  304. atkturn = 2.0;
  305. minatkturn = 0.7;
  306. twohand = 1;
  307. } else if (f.weapon.selectedIndex == 29) {
  308. // spear
  309. bdam = 6;
  310. bacc = 4;
  311. atkturn = 1.1;
  312. minatkturn = 0.5;
  313. twohand = 0;
  314. } else if (f.weapon.selectedIndex == 30) {
  315. // trident
  316. bdam = 9;
  317. bacc = 1;
  318. atkturn = 1.3;
  319. minatkturn = 0.6;
  320. twohand = 0;
  321. } else if (f.weapon.selectedIndex == 31) {
  322. // demon trident
  323. bdam = 12;
  324. bacc = 1;
  325. atkturn = 1.3;
  326. minatkturn = 0.6;
  327. twohand = 0;
  328. } else if (f.weapon.selectedIndex == 32) {
  329. // trishula
  330. bdam = 13;
  331. bacc = 0;
  332. atkturn = 1.3;
  333. minatkturn = 0.6;
  334. twohand = 0;
  335. } else if (f.weapon.selectedIndex == 33) {
  336. // halberd
  337. bdam = 13;
  338. bacc = -3;
  339. atkturn = 1.5;
  340. minatkturn = 0.7;
  341. twohand = 1;
  342. } else if (f.weapon.selectedIndex == 34) {
  343. // scythe
  344. bdam = 14;
  345. bacc = -4;
  346. atkturn = 2.0;
  347. minatkturn = 0.7;
  348. twohand = 1;
  349. } else if (f.weapon.selectedIndex == 35) {
  350. // glaive
  351. bdam = 15;
  352. bacc = -3;
  353. atkturn = 1.7;
  354. minatkturn = 0.7;
  355. twohand = 1;
  356. } else if (f.weapon.selectedIndex == 36) {
  357. // bardiche
  358. bdam = 18;
  359. bacc = -6;
  360. atkturn = 2.0;
  361. minatkturn = 0.7;
  362. twohand = 1;
  363. } else if (f.weapon.selectedIndex == 37) {
  364. // quarterstaff
  365. bdam = 10;
  366. bacc = 3;
  367. atkturn = 1.3;
  368. minatkturn = 0.6;
  369. twohand = 1;
  370. } else if (f.weapon.selectedIndex == 38) {
  371. // lajatang
  372. bdam = 16;
  373. bacc = -3;
  374. atkturn = 1.4;
  375. minatkturn = 0.7;
  376. twohand = 1;
  377. } else if (f.weapon.selectedIndex == 39) {
  378. // sling
  379. bdam = 9;
  380. bacc = 2;
  381. atkturn = 1.2;
  382. minatkturn = 0.6;
  383. twohand = 0;
  384. } else if (f.weapon.selectedIndex == 40) {
  385. // greatsling
  386. bdam = 12;
  387. bacc = -1;
  388. atkturn = 1.4;
  389. minatkturn = 0.7;
  390. twohand = 0;
  391. } else if (f.weapon.selectedIndex == 41) {
  392. // shortbow
  393. bdam = 9;
  394. bacc = 2;
  395. atkturn = 1.3;
  396. minatkturn = 0.6;
  397. twohand = 1;
  398. } else if (f.weapon.selectedIndex == 42) {
  399. // longbow
  400. bdam = 15;
  401. bacc = 0;
  402. atkturn = 1.7;
  403. minatkturn = 0.7;
  404. twohand = 1;
  405. } else if (f.weapon.selectedIndex == 43) {
  406. // hand crossbow
  407. bdam = 12;
  408. bacc = 5;
  409. atkturn = 1.5;
  410. minatkturn = 1.0;
  411. twohand = 0;
  412. } else if (f.weapon.selectedIndex == 44) {
  413. // arbalest
  414. bdam = 18;
  415. bacc = 2;
  416. atkturn = 1.9;
  417. minatkturn = 1.0;
  418. twohand = 1;
  419. } else if (f.weapon.selectedIndex == 45) {
  420. // triple crossbow
  421. bdam = 22;
  422. bacc = 0;
  423. atkturn = 2.3;
  424. minatkturn = 1.0;
  425. twohand = 1;
  426. } else if (f.weapon.selectedIndex == 46) {
  427. // unarmed
  428. bdam = 3 + skillunarmed;
  429. bacc = 2 * claws;
  430. atkturn = 1.0;
  431. minatkturn = 0.5;
  432. notweapon = 1;
  433. } else if (f.weapon.selectedIndex == 47) {
  434. // spider form
  435. playerdex += 5;
  436. bdam = 5 + skillunarmed;
  437. bacc = 2 * claws;
  438. atkturn = 1.0;
  439. minatkturn = 0.5;
  440. notweapon = 1;
  441. } else if (f.weapon.selectedIndex == 48) {
  442. // ice form
  443. bdam = 12 + skillunarmed;
  444. bacc = 2 * claws;
  445. atkturn = 1.0;
  446. minatkturn = 0.5;
  447. notweapon = 1;
  448. } else if (f.weapon.selectedIndex == 49) {
  449. // blade hands
  450. bdam = 8 + skillunarmed + (playerstr + playerdex) / 3;
  451. bacc = 0;
  452. atkturn = 1.0;
  453. minatkturn = 0.5;
  454. notweapon = 1;
  455. } else if (f.weapon.selectedIndex == 50) {
  456. // statue form
  457. playerstr += 2;
  458. bdam = 6 + skillunarmed + (playerstr) / 3;
  459. bacc = 0;
  460. atkturn = 1.0;
  461. minatkturn = 0.5;
  462. notweapon = 1;
  463. } else if (f.weapon.selectedIndex == 51) {
  464. // dragon form
  465. playerstr += 10;
  466. claws = 3;
  467. bdam = 12 + skillunarmed + (2 * playerstr) / 3;
  468. bacc = 0;
  469. atkturn = 1.0;
  470. minatkturn = 0.5;
  471. notweapon = 1;
  472. }
  473.  
  474. var slay = parseInt(f.slay.value);
  475.  
  476. var monac = parseInt(f.mons_ac.value);
  477. var monev = parseInt(f.mons_ev.value);
  478.  
  479. var baseac = 0;
  480. var er = 0;
  481. var gdr = 0;
  482.  
  483. if (f.armour.selectedIndex == 0) {
  484. // robe
  485. baseac = 2;
  486. er = 0;
  487. gdr = 0;
  488. } else if (f.armour.selectedIndex == 1) {
  489. // leather armour
  490. baseac = 3;
  491. er = 4;
  492. gdr = 0.14;
  493. } else if (f.armour.selectedIndex == 2) {
  494. // ring mail
  495. baseac = 5;
  496. er = 7;
  497. gdr = 0.24;
  498. } else if (f.armour.selectedIndex == 3) {
  499. // scale mail
  500. baseac = 6;
  501. er = 10;
  502. gdr = 0.34;
  503. } else if (f.armour.selectedIndex == 4) {
  504. // chain mail
  505. baseac = 8;
  506. er = 15;
  507. gdr = 0.34;
  508. } else if (f.armour.selectedIndex == 5) {
  509. // plate armour
  510. baseac = 10;
  511. er = 18;
  512. gdr = 0.39;
  513. } else if (f.armour.selectedIndex == 6) {
  514. // crystal plate armour
  515. baseac = 14;
  516. er = 23;
  517. gdr = 0.48;
  518. } else if (f.armour.selectedIndex == 7) {
  519. // troll leather armour
  520. baseac = 4;
  521. er = 4;
  522. gdr = 0.19;
  523. } else if (f.armour.selectedIndex == 8) {
  524. // steam dragon armour
  525. baseac = 5;
  526. er = 0;
  527. gdr = 0.24;
  528. } else if (f.armour.selectedIndex == 9) {
  529. // mottled dragon armour
  530. baseac = 6;
  531. er = 5;
  532. gdr = 0.28;
  533. } else if (f.armour.selectedIndex == 10) {
  534. // swamp dragon armour
  535. baseac = 7;
  536. er = 7;
  537. gdr = 0.31;
  538. } else if (f.armour.selectedIndex == 11) {
  539. // quicksilver dragon armour
  540. baseac = 9;
  541. er = 7;
  542. gdr = 0.37;
  543. } else if (f.armour.selectedIndex == 12) {
  544. // fire dragon armour
  545. baseac = 8;
  546. er = 11;
  547. gdr = 0.34;
  548. } else if (f.armour.selectedIndex == 13) {
  549. // ice dragon armour
  550. baseac = 8;
  551. er = 11;
  552. gdr = 0.34;
  553. } else if (f.armour.selectedIndex == 14) {
  554. // pearl dragon armour
  555. baseac = 10;
  556. er = 11;
  557. gdr = 0.39;
  558. } else if (f.armour.selectedIndex == 15) {
  559. // shadow dragon armour
  560. baseac = 10;
  561. er = 15;
  562. gdr = 0.39;
  563. } else if (f.armour.selectedIndex == 16) {
  564. // storm dragon armour
  565. baseac = 10;
  566. er = 15;
  567. gdr = 0.39;
  568. } else if (f.armour.selectedIndex == 17) {
  569. // gold dragon armour
  570. baseac = 12;
  571. er = 23;
  572. gdr = 0.44;
  573. }
  574.  
  575. var basesh = 0;
  576. var er2 = 0;
  577.  
  578. if (f.shield.selectedIndex == 0) {
  579. // no shield
  580. basesh = 0;
  581. er2 = 0;
  582. } else if (f.shield.selectedIndex == 1) {
  583. // buckler
  584. basesh = 3;
  585. er2 = 0.8;
  586. } else if (f.shield.selectedIndex == 2) {
  587. // shield
  588. basesh = 8;
  589. er2 = 3;
  590. } else if (f.shield.selectedIndex == 3) {
  591. // large shield
  592. basesh = 13;
  593. er2 = 5;
  594. }
  595.  
  596. var abap = 0;
  597.  
  598. abap = 2 * er * er * (450 - 10 * skillarmour) / (5 * (playerstr + 3)) / 450;
  599.  
  600. var absp = 0;
  601.  
  602. absp = (er2) - (skillshield) / 5;
  603.  
  604. var basetohit = 0;
  605.  
  606. // before +1dF+1dW
  607. basetohit = 15 + (playerdex / 2) + slay + bacc - Math.floor(abap) - Math.floor(absp);
  608.  
  609. var realatkturn = 0;
  610.  
  611. // before shield penalty
  612. if (notweapon == 0) {
  613. realatkturn = Math.max(atkturn - 0.05 * skillweapon, minatkturn);
  614. } else {
  615. realatkturn = Math.max(atkturn - (0.5 / 27) * skillunarmed, minatkturn);
  616. if (f.weapon.selectedIndex == 50) {
  617. realatkturn *= 1.5;
  618. }
  619. }
  620.  
  621. var monac = parseInt(f.mons_ac.value);
  622. var monev = parseInt(f.mons_ev.value);
  623.  
  624. var count = 10000;
  625.  
  626. var turn_elapsed = 0;
  627.  
  628. var turncount = 0;
  629. var hitcount = 0;
  630. var damage = 0;
  631. var avgdam = 0;
  632. var totaldamage = 0;
  633.  
  634. var tohit = 0;
  635.  
  636. var hitsuccess = 0;
  637. var dammod = 0;
  638. var actualatkturn = 0;
  639.  
  640.  
  641. while (turn_elapsed < count) {
  642.  
  643. // calculate accuracy
  644. tohit = basetohit + Math.floor(Math.random() * (skillfighting + 1)) + Math.floor(Math.random() * ((notweapon == 0) ? skillweapon : skillunarmed) + 1)
  645.  
  646. if (f.corona.checked) {
  647. tohit = tohit + (1 + Math.floor(Math.random() * 9));
  648. }
  649.  
  650. if (5 > Math.random() * 200) {
  651. // minimum accuracy 2.5%
  652. hitsuccess = 1;
  653. } else if (Math.floor(Math.random() * tohit) > monev) {
  654. hitsuccess = 1;
  655. } else {
  656. hitsuccess = 0;
  657. }
  658.  
  659. damage = 0;
  660.  
  661. turncount++;
  662. if (hitsuccess == 1) {
  663. hitcount++;
  664.  
  665. damage = bdam;
  666.  
  667. // str modify
  668. dammod = 39;
  669. if (playerstr >= 10) {
  670. dammod += Math.floor(Math.random() * (playerstr - 9)) * 2;
  671. } else {
  672. dammod -= Math.floor(Math.random() * (11 - playerstr)) * 3;
  673. }
  674.  
  675. damage = Math.floor(Math.random() * (1 + (damage * dammod / 39)));
  676.  
  677. // weaponskill
  678. damage *= 1 + Math.floor(Math.random() * (((notweapon == 0) ? skillweapon : skillunarmed) + 1)) / 25;
  679.  
  680. // fighting
  681. damage *= 1 + Math.floor(Math.random() * (skillfighting + 1)) / 30;
  682.  
  683. // slay
  684. damage += Math.floor(Math.random() * (slay + 1));
  685.  
  686. //might
  687. if (f.might.checked) {
  688. damage += 1 + Math.floor(Math.random() * 10);
  689. }
  690.  
  691. // apply AC
  692. damage = Math.floor(Math.max(0, damage - Math.floor(Math.random() * (monac + 1))));
  693. }
  694.  
  695. totaldamage += damage;
  696.  
  697. actualatkturn = realatkturn;
  698.  
  699. // shield atkspeed penalty
  700. actualatkturn += Math.min(Math.floor(Math.random() * (absp + 1)), Math.floor(Math.random() * (absp + 1))) / 10;
  701.  
  702. turn_elapsed += actualatkturn;
  703.  
  704.  
  705.  
  706.  
  707. }
  708.  
  709. result = "Total damage in 10000 turns : "
  710. result += totaldamage
  711. result += " (Accuracy "
  712. result += Math.floor(10000 * hitcount / turncount) / 100
  713. result += "%) <br>Average attack speed : "
  714. result += Math.floor(1000000 / turncount) / 100
  715. result += " turn<br>DPT : "
  716. result += (totaldamage) / 10000
  717.  
  718. Result.innerHTML = result
  719.  
  720.  
  721. }
  722.  
  723.  
  724. function calcspell(f) {
  725.  
  726. if (f.str.value == "") {
  727. f.str.value = 10
  728. }
  729. if (f.intel.value == "") {
  730. f.intel.value = 10
  731. }
  732. if (f.dex.value == "") {
  733. f.dex.value = 10
  734. }
  735. if (f.skill_fighting.value == "") {
  736. f.skill_fighting.value = 0
  737. }
  738. if (f.skill_weapon.value == "") {
  739. f.skill_weapon.value = 0
  740. }
  741. if (f.skill_unarmed.value == "") {
  742. f.skill_unarmed.value = 0
  743. }
  744. if (f.skill_armour.value == "") {
  745. f.skill_armour.value = 0
  746. }
  747. if (f.skill_dodging.value == "") {
  748. f.skill_dodging.value = 0
  749. }
  750. if (f.skill_shield.value == "") {
  751. f.skill_shield.value = 0
  752. }
  753. if (f.skill_spellcasting.value == "") {
  754. f.skill_spellcasting.value = 0
  755. }
  756. if (f.skill_magic1.value == "") {
  757. f.skill_magic1.value = 0
  758. }
  759. if (f.skill_magic2.value == "") {
  760. f.skill_magic2.value = 0
  761. }
  762. if (f.skill_magic3.value == "") {
  763. f.skill_magic3.value = 0
  764. }
  765. if (f.slay.value == "") {
  766. f.slay.value = 0
  767. }
  768. if (f.claws.value == "") {
  769. f.claws.value = 0
  770. }
  771. if (f.mons_ac.value == "") {
  772. f.mons_ac.value = 5
  773. }
  774. if (f.mons_ev.value == "") {
  775. f.mons_ev.value = 10
  776. }
  777. if (f.claws.value > 3) {
  778. f.claws.value = 3
  779. }
  780. if (f.spell_level.value == "") {
  781. f.spell_level.value = 1
  782. }
  783. if (f.spell_level.value > 9) {
  784. f.spell_level.value = 9
  785. }
  786. if (f.wizardry.value == "") {
  787. f.wizardry.value = 0
  788. }
  789. if (f.wizardry.value > 10) {
  790. f.wizardry.value = 10
  791. }
  792.  
  793. var i = 0;
  794. var j = 0;
  795.  
  796. var playerstr = parseInt(f.str.value);
  797. var playerdex = parseInt(f.dex.value);
  798. var playerint = parseInt(f.intel.value);
  799.  
  800. if (f.might.checked) {
  801. playerstr += 5;
  802. }
  803. if (f.agility.checked) {
  804. playerdex += 5;
  805. }
  806. if (f.brilliance.checked) {
  807. playerint += 5;
  808. }
  809.  
  810. var skillarmour = parseInt(f.skill_armour.value);
  811. var skillshield = parseInt(f.skill_shield.value);
  812.  
  813. var skillspell = parseInt(f.skill_spellcasting.value);
  814. var skillmagic1 = parseInt(f.skill_magic1.value);
  815. var skillmagic2 = parseInt(f.skill_magic2.value);
  816. var skillmagic3 = parseInt(f.skill_magic3.value);
  817.  
  818. var baseac = 0;
  819. var er = 0;
  820. var gdr = 0;
  821.  
  822. if (f.armour.selectedIndex == 0) {
  823. // robe
  824. baseac = 2;
  825. er = 0;
  826. gdr = 0;
  827. } else if (f.armour.selectedIndex == 1) {
  828. // leather armour
  829. baseac = 3;
  830. er = 4;
  831. gdr = 0.14;
  832. } else if (f.armour.selectedIndex == 2) {
  833. // ring mail
  834. baseac = 5;
  835. er = 7;
  836. gdr = 0.24;
  837. } else if (f.armour.selectedIndex == 3) {
  838. // scale mail
  839. baseac = 6;
  840. er = 10;
  841. gdr = 0.34;
  842. } else if (f.armour.selectedIndex == 4) {
  843. // chain mail
  844. baseac = 8;
  845. er = 15;
  846. gdr = 0.34;
  847. } else if (f.armour.selectedIndex == 5) {
  848. // plate armour
  849. baseac = 10;
  850. er = 18;
  851. gdr = 0.39;
  852. } else if (f.armour.selectedIndex == 6) {
  853. // crystal plate armour
  854. baseac = 14;
  855. er = 23;
  856. gdr = 0.48;
  857. } else if (f.armour.selectedIndex == 7) {
  858. // troll leather armour
  859. baseac = 4;
  860. er = 4;
  861. gdr = 0.19;
  862. } else if (f.armour.selectedIndex == 8) {
  863. // steam dragon armour
  864. baseac = 5;
  865. er = 0;
  866. gdr = 0.24;
  867. } else if (f.armour.selectedIndex == 9) {
  868. // mottled dragon armour
  869. baseac = 6;
  870. er = 5;
  871. gdr = 0.28;
  872. } else if (f.armour.selectedIndex == 10) {
  873. // swamp dragon armour
  874. baseac = 7;
  875. er = 7;
  876. gdr = 0.31;
  877. } else if (f.armour.selectedIndex == 11) {
  878. // quicksilver dragon armour
  879. baseac = 9;
  880. er = 7;
  881. gdr = 0.37;
  882. } else if (f.armour.selectedIndex == 12) {
  883. // fire dragon armour
  884. baseac = 8;
  885. er = 11;
  886. gdr = 0.34;
  887. } else if (f.armour.selectedIndex == 13) {
  888. // ice dragon armour
  889. baseac = 8;
  890. er = 11;
  891. gdr = 0.34;
  892. } else if (f.armour.selectedIndex == 14) {
  893. // pearl dragon armour
  894. baseac = 10;
  895. er = 11;
  896. gdr = 0.39;
  897. } else if (f.armour.selectedIndex == 15) {
  898. // shadow dragon armour
  899. baseac = 10;
  900. er = 15;
  901. gdr = 0.39;
  902. } else if (f.armour.selectedIndex == 16) {
  903. // storm dragon armour
  904. baseac = 10;
  905. er = 15;
  906. gdr = 0.39;
  907. } else if (f.armour.selectedIndex == 17) {
  908. // gold dragon armour
  909. baseac = 12;
  910. er = 23;
  911. gdr = 0.44;
  912. }
  913.  
  914. var basesh = 0;
  915. var er2 = 0;
  916.  
  917. if (f.shield.selectedIndex == 0) {
  918. // no shield
  919. basesh = 0;
  920. er2 = 0;
  921. } else if (f.shield.selectedIndex == 1) {
  922. // buckler
  923. basesh = 3;
  924. er2 = 0.8;
  925. } else if (f.shield.selectedIndex == 2) {
  926. // shield
  927. basesh = 8;
  928. er2 = 3;
  929. } else if (f.shield.selectedIndex == 3) {
  930. // large shield
  931. basesh = 13;
  932. er2 = 5;
  933. }
  934.  
  935. var abap = 0;
  936.  
  937. abap = 2 * er * er * (450 - 10 * skillarmour) / (5 * (playerstr + 3)) / 450;
  938.  
  939. var absp = 0;
  940.  
  941. absp = (er2) - (skillshield) / 5;
  942.  
  943. var failurerate = 0;
  944.  
  945. var spellskill = 0;
  946.  
  947. spellskill = (skillspell / 2);
  948.  
  949. if (f.spell_schools[0].checked) {
  950. spellskill += (skillmagic1) * 2;
  951. } else if (f.spell_schools[1].checked) {
  952. spellskill += skillmagic1 + skillmagic2;
  953. } else if (f.spell_schools[2].checked) {
  954. spellskill += (skillmagic1 + skillmagic2 + skillmagic3) * 2 / 3;
  955. }
  956.  
  957. spellskill = 50 * Math.log(1 + spellskill / 50) / Math.log(2);
  958.  
  959. var spelllv = parseInt(f.spell_level.value);
  960.  
  961. var spelldiff = 0;
  962.  
  963. if (spelllv == 1) {
  964. spelldiff = 3;
  965. } else if (spelllv == 2) {
  966. spelldiff = 15;
  967. } else if (spelllv == 3) {
  968. spelldiff = 35;
  969. } else if (spelllv == 4) {
  970. spelldiff = 70;
  971. } else if (spelllv == 5) {
  972. spelldiff = 100;
  973. } else if (spelllv == 6) {
  974. spelldiff = 150;
  975. } else if (spelllv == 7) {
  976. spelldiff = 200;
  977. } else if (spelllv == 8) {
  978. spelldiff = 260;
  979. } else if (spelllv == 9) {
  980. spelldiff = 330;
  981. }
  982.  
  983. failurerate = 60 - 6 * spellskill - 2 * playerint + spelldiff + 19 * abap + 19 * absp;
  984.  
  985. var frate = failurerate;
  986.  
  987. if (failurerate < 45) {
  988. frate = 45;
  989. }
  990. if (failurerate < 42) {
  991. frate = 43;
  992. }
  993. if (failurerate < 38) {
  994. frate = 41;
  995. }
  996. if (failurerate < 35) {
  997. frate = 40;
  998. }
  999. if (failurerate < 32) {
  1000. frate = 38;
  1001. }
  1002. if (failurerate < 28) {
  1003. frate = 36;
  1004. }
  1005. if (failurerate < 22) {
  1006. frate = 34;
  1007. }
  1008. if (failurerate < 16) {
  1009. frate = 32;
  1010. }
  1011. if (failurerate < 10) {
  1012. frate = 30;
  1013. }
  1014. if (failurerate < 2) {
  1015. frate = 28;
  1016. }
  1017. if (failurerate < -7) {
  1018. frate = 26;
  1019. }
  1020. if (failurerate < -12) {
  1021. frate = 24;
  1022. }
  1023. if (failurerate < -18) {
  1024. frate = 22;
  1025. }
  1026. if (failurerate < -24) {
  1027. frate = 20;
  1028. }
  1029. if (failurerate < -30) {
  1030. frate = 18;
  1031. }
  1032. if (failurerate < -38) {
  1033. frate = 16;
  1034. }
  1035. if (failurerate < -46) {
  1036. frate = 14;
  1037. }
  1038. if (failurerate < -60) {
  1039. frate = 12;
  1040. }
  1041. if (failurerate < -80) {
  1042. frate = 10;
  1043. }
  1044. if (failurerate < -100) {
  1045. frate = 8;
  1046. }
  1047. if (failurerate < -120) {
  1048. frate = 6;
  1049. }
  1050. if (failurerate < -140) {
  1051. frate = 4;
  1052. }
  1053. if (failurerate < -160) {
  1054. frate = 2;
  1055. }
  1056. if (failurerate < -180) {
  1057. frate = 0;
  1058. }
  1059.  
  1060. var freduce = 100;
  1061.  
  1062. if (f.vehumet.checked) {
  1063. freduce = freduce * 2 / 3;
  1064. }
  1065.  
  1066. var wizbonus = parseInt(f.wizardry.value);
  1067.  
  1068. if (wizbonus > 0) {
  1069.  
  1070. freduce = freduce * 6 / (7 + wizbonus);
  1071. }
  1072.  
  1073. if (f.brilliance.checked) {
  1074. freduce = freduce / 2;
  1075. }
  1076.  
  1077. if (freduce < 50) {
  1078. freduce = 50;
  1079. }
  1080.  
  1081. frate = frate * freduce / 100;
  1082.  
  1083. if (frate > 100) {
  1084. frate = 100;
  1085. }
  1086.  
  1087. var realfailrate = 0;
  1088.  
  1089. var count = 10000;
  1090.  
  1091. var success = 0;
  1092.  
  1093. for (i = 0; i < count; i++) {
  1094. if ((Math.floor(Math.random() * 101) + Math.floor(Math.random() * 101) + Math.floor(Math.random() * 100)) / 3 > frate) {
  1095. success++;
  1096. }
  1097.  
  1098.  
  1099. }
  1100.  
  1101. realfailrate = success / count;
  1102.  
  1103. result = "Actual success rate : "
  1104. result += Math.floor(10000 * realfailrate) / 100
  1105. result += "%"
  1106.  
  1107. ResultMagic.innerHTML = result
  1108.  
  1109.  
  1110.  
  1111. }
  1112. </script>
  1113.  
  1114. <form>
  1115.  
  1116. <br>STR : <input type="text" name="str" maxlength="2" size="2">
  1117. <br>INT : <input type="text" name="intel" maxlength="2" size="2">
  1118. <br>DEX : <input type="text" name="dex" maxlength="2" size="2">
  1119. <br>Might :
  1120. <input type="checkbox" name="might">&nbsp;&nbsp; Agi :
  1121. <input type="checkbox" name="agility">&nbsp;&nbsp; Brill :
  1122. <input type="checkbox" name="brilliance">
  1123. <br>
  1124. <br>Fighting skill : <input type="text" name="skill_fighting" maxlength="2" size="2">
  1125. <br>Weapon skill : <input type="text" name="skill_weapon" maxlength="2" size="2">
  1126. <br>Unarmed skill : <input type="text" name="skill_unarmed" maxlength="2" size="2"> Claws : <input type="text" name="claws" maxlength="2" size="2">
  1127. <br>Armour skill : <input type="text" name="skill_armour" maxlength="2" size="2">
  1128. <br>Dodging skill : <input type="text" name="skill_dodging" maxlength="2" size="2">
  1129. <br>Shield skill : <input type="text" name="skill_shield" maxlength="2" size="2">
  1130. <br>
  1131. <br>Spellcasting skill : <input type="text" name="skill_spellcasting" maxlength="2" size="2">
  1132. <br>Magic School 1 skill : <input type="text" name="skill_magic1" maxlength="2" size="2">
  1133. <br>Magic School 2 skill : <input type="text" name="skill_magic2" maxlength="2" size="2">
  1134. <br>Magic School 3 skill : <input type="text" name="skill_magic3" maxlength="2" size="2">
  1135. <br>
  1136. <br>Weapon type :
  1137. <select name="weapon">
  1138. <option>Dagger</option>
  1139. <option>Quick blade</option>
  1140. <option>Short sword</option>
  1141. <option>Rapier</option>
  1142. <option>Falchion</option>
  1143. <option>Long sword</option>
  1144. <option>Scimitar</option>
  1145. <option>Demon blade</option>
  1146. <option>Eudemon blade</option>
  1147. <option>Double sword</option>
  1148. <option>Great sword</option>
  1149. <option>Triple sword</option>
  1150. <option>Club</option>
  1151. <option>Whip</option>
  1152. <option>Mace</option>
  1153. <option>Flail</option>
  1154. <option>Demon whip</option>
  1155. <option>Sacred scourge</option>
  1156. <option>Morningstar</option>
  1157. <option>Dire flail</option>
  1158. <option>Eveningstar</option>
  1159. <option>Great mace</option>
  1160. <option>Giant club</option>
  1161. <option>Giant spiked club</option>
  1162. <option>Hand axe</option>
  1163. <option>War axe</option>
  1164. <option>Broad axe</option>
  1165. <option>Battleaxe</option>
  1166. <option>Executioner's axe</option>
  1167. <option>Spear</option>
  1168. <option>Trident</option>
  1169. <option>Demon trident</option>
  1170. <option>Trishula</option>
  1171. <option>Halberd</option>
  1172. <option>Scythe</option>
  1173. <option>Glaive</option>
  1174. <option>Bardiche</option>
  1175. <option>Quarterstaff</option>
  1176. <option>Lajatang</option>
  1177. <option>Sling (w/ sling bullets)</option>
  1178. <option>Greatsling (w/ sling bullets)</option>
  1179. <option>Shortbow</option>
  1180. <option>Longbow</option>
  1181. <option>Hand crossbow</option>
  1182. <option>Arbalest</option>
  1183. <option>Triple crossbow</option>
  1184. <option>Unarmed</option>
  1185. <option>Spider form</option>
  1186. <option>Ice form</option>
  1187. <option>Blade hands</option>
  1188. <option>Statue form</option>
  1189. <option>Dragon form</option>
  1190. </select>
  1191. <br>Slaying bonus (Enchantment+Slaying) : <input type="text" name="slay" maxlength="2" size="2">
  1192.  
  1193. <br>
  1194. <br>Armour type :
  1195. <select name="armour">
  1196. <option>Robe</option>
  1197. <option>Leather armour</option>
  1198. <option>Ring mail</option>
  1199. <option>Scale mail</option>
  1200. <option>Chain mail</option>
  1201. <option>Plate armour</option>
  1202. <option>Crystal plate armour</option>
  1203. <option>Troll leather armour</option>
  1204. <option>Steam dragon armour</option>
  1205. <option>Mottled dragon armour</option>
  1206. <option>Swamp dragon armour</option>
  1207. <option>Quicksilver dragon armour</option>
  1208. <option>Fire dragon armour</option>
  1209. <option>Ice dragon armour</option>
  1210. <option>Pearl dragon armour</option>
  1211. <option>Shadow dragon armour</option>
  1212. <option>Storm dragon armour</option>
  1213. <option>Gold dragon armour</option>
  1214. </select>
  1215.  
  1216. <br>Shield type :
  1217. <select name="shield">
  1218. <option>None</option>
  1219. <option>Buckler</option>
  1220. <option>Shield</option>
  1221. <option>Large shield</option>
  1222. </select>
  1223. <br><br>
  1224.  
  1225. <br>Monster stats: <br> AC : <input type="text" name="mons_ac" maxlength="2" size="2"> &nbsp;&nbsp; EV : <input type="text" name="mons_ev" maxlength="2" size="2"> &nbsp;&nbsp; Corona/Haloed :
  1226. <input type="checkbox" name="corona">
  1227. <br><br>
  1228.  
  1229. <input type="button" value="Calculate melee DPT" onclick="calcmelee(this.form);">
  1230. <div id="Result"></div>
  1231. <br><br>
  1232. <br>Spell level: <input type="text" name="spell_level" maxlength="1" size="1">&nbsp;&nbsp; Spell schools: <input type="radio" name="spell_schools" value="one" checked> One &nbsp;
  1233. <input type="radio" name="spell_schools" value="two"> Two &nbsp;
  1234. <input type="radio" name="spell_schools" value="three"> Three &nbsp;<br> Vehumet+Conjuration :
  1235. <input type="checkbox" name="vehumet">&nbsp;&nbsp;Wizardry: <input type="text" name="wizardry" maxlength="2" size="2">
  1236.  
  1237.  
  1238. <br><br>
  1239. <input type="button" value="Calculate spell success" onclick="calcspell(this.form);">
  1240. <div id="ResultMagic"></div>
  1241.  
  1242.  
  1243.  
  1244. </form>
  1245.  
  1246. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement