@robsonbittencourt/calc 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc +12 -0
  3. package/bundle +107 -0
  4. package/dist/adaptable.d.ts +6 -0
  5. package/dist/adaptable.js +28 -0
  6. package/dist/adaptable.js.map +1 -0
  7. package/dist/calc.d.ts +6 -0
  8. package/dist/calc.js +26 -0
  9. package/dist/calc.js.map +1 -0
  10. package/dist/data/abilities.d.ts +15 -0
  11. package/dist/data/abilities.js +448 -0
  12. package/dist/data/abilities.js.map +1 -0
  13. package/dist/data/index.d.ts +2 -0
  14. package/dist/data/index.js +30 -0
  15. package/dist/data/index.js.map +1 -0
  16. package/dist/data/interface.d.ts +150 -0
  17. package/dist/data/interface.js +3 -0
  18. package/dist/data/interface.js.map +1 -0
  19. package/dist/data/items.d.ts +24 -0
  20. package/dist/data/items.js +708 -0
  21. package/dist/data/items.js.map +1 -0
  22. package/dist/data/moves.d.ts +86 -0
  23. package/dist/data/moves.js +5014 -0
  24. package/dist/data/moves.js.map +1 -0
  25. package/dist/data/natures.d.ts +17 -0
  26. package/dist/data/natures.js +127 -0
  27. package/dist/data/natures.js.map +1 -0
  28. package/dist/data/production.min.js +1 -0
  29. package/dist/data/species.d.ts +48 -0
  30. package/dist/data/species.js +10126 -0
  31. package/dist/data/species.js.map +1 -0
  32. package/dist/data/types.d.ts +23 -0
  33. package/dist/data/types.js +538 -0
  34. package/dist/data/types.js.map +1 -0
  35. package/dist/desc.d.ts +65 -0
  36. package/dist/desc.js +866 -0
  37. package/dist/desc.js.map +1 -0
  38. package/dist/field.d.ts +49 -0
  39. package/dist/field.js +111 -0
  40. package/dist/field.js.map +1 -0
  41. package/dist/index.d.ts +44 -0
  42. package/dist/index.js +99 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/items.d.ts +13 -0
  45. package/dist/items.js +434 -0
  46. package/dist/items.js.map +1 -0
  47. package/dist/mechanics/gen12.d.ts +6 -0
  48. package/dist/mechanics/gen12.js +271 -0
  49. package/dist/mechanics/gen12.js.map +1 -0
  50. package/dist/mechanics/gen3.d.ts +11 -0
  51. package/dist/mechanics/gen3.js +371 -0
  52. package/dist/mechanics/gen3.js.map +1 -0
  53. package/dist/mechanics/gen4.d.ts +11 -0
  54. package/dist/mechanics/gen4.js +596 -0
  55. package/dist/mechanics/gen4.js.map +1 -0
  56. package/dist/mechanics/gen56.d.ts +13 -0
  57. package/dist/mechanics/gen56.js +836 -0
  58. package/dist/mechanics/gen56.js.map +1 -0
  59. package/dist/mechanics/gen789.d.ts +14 -0
  60. package/dist/mechanics/gen789.js +1325 -0
  61. package/dist/mechanics/gen789.js.map +1 -0
  62. package/dist/mechanics/util.d.ts +39 -0
  63. package/dist/mechanics/util.js +675 -0
  64. package/dist/mechanics/util.js.map +1 -0
  65. package/dist/move.d.ts +50 -0
  66. package/dist/move.js +324 -0
  67. package/dist/move.js.map +1 -0
  68. package/dist/pokemon.d.ts +55 -0
  69. package/dist/pokemon.js +240 -0
  70. package/dist/pokemon.js.map +1 -0
  71. package/dist/production.min.js +1 -0
  72. package/dist/result.d.ts +34 -0
  73. package/dist/result.js +94 -0
  74. package/dist/result.js.map +1 -0
  75. package/dist/state.d.ts +77 -0
  76. package/dist/state.js +3 -0
  77. package/dist/state.js.map +1 -0
  78. package/dist/stats.d.ts +26 -0
  79. package/dist/stats.js +183 -0
  80. package/dist/stats.js.map +1 -0
  81. package/dist/test/calc.test.d.ts +1 -0
  82. package/dist/test/calc.test.js +1297 -0
  83. package/dist/test/calc.test.js.map +1 -0
  84. package/dist/test/data.test.d.ts +1 -0
  85. package/dist/test/data.test.js +368 -0
  86. package/dist/test/data.test.js.map +1 -0
  87. package/dist/test/gen.d.ts +135 -0
  88. package/dist/test/gen.js +636 -0
  89. package/dist/test/gen.js.map +1 -0
  90. package/dist/test/helper.d.ts +55 -0
  91. package/dist/test/helper.js +174 -0
  92. package/dist/test/helper.js.map +1 -0
  93. package/dist/test/move.test.d.ts +1 -0
  94. package/dist/test/move.test.js +14 -0
  95. package/dist/test/move.test.js.map +1 -0
  96. package/dist/test/pokemon.test.d.ts +1 -0
  97. package/dist/test/pokemon.test.js +102 -0
  98. package/dist/test/pokemon.test.js.map +1 -0
  99. package/dist/test/stats.test.d.ts +1 -0
  100. package/dist/test/stats.test.js +64 -0
  101. package/dist/test/stats.test.js.map +1 -0
  102. package/dist/test/utils.test.d.ts +1 -0
  103. package/dist/test/utils.test.js +19 -0
  104. package/dist/test/utils.test.js.map +1 -0
  105. package/dist/util.d.ts +17 -0
  106. package/dist/util.js +115 -0
  107. package/dist/util.js.map +1 -0
  108. package/jest.config.js +11 -0
  109. package/package.json +40 -0
  110. package/src/adaptable.ts +12 -0
  111. package/src/calc.ts +40 -0
  112. package/src/data/abilities.ts +383 -0
  113. package/src/data/index.ts +36 -0
  114. package/src/data/interface.ts +176 -0
  115. package/src/data/items.ts +632 -0
  116. package/src/data/moves.ts +5028 -0
  117. package/src/data/natures.ts +65 -0
  118. package/src/data/species.ts +10098 -0
  119. package/src/data/types.ts +478 -0
  120. package/src/desc.ts +1063 -0
  121. package/src/field.ts +124 -0
  122. package/src/index.ts +156 -0
  123. package/src/items.ts +423 -0
  124. package/src/mechanics/gen12.ts +297 -0
  125. package/src/mechanics/gen3.ts +444 -0
  126. package/src/mechanics/gen4.ts +702 -0
  127. package/src/mechanics/gen56.ts +1134 -0
  128. package/src/mechanics/gen789.ts +1788 -0
  129. package/src/mechanics/util.ts +676 -0
  130. package/src/move.ts +337 -0
  131. package/src/pokemon.ts +244 -0
  132. package/src/result.ts +106 -0
  133. package/src/state.ts +81 -0
  134. package/src/stats.ts +213 -0
  135. package/src/test/calc.test.ts +1588 -0
  136. package/src/test/data.test.ts +129 -0
  137. package/src/test/gen.ts +514 -0
  138. package/src/test/helper.ts +185 -0
  139. package/src/test/move.test.ts +13 -0
  140. package/src/test/pokemon.test.ts +121 -0
  141. package/src/test/stats.test.ts +84 -0
  142. package/src/test/utils.test.ts +18 -0
  143. package/src/util.ts +153 -0
  144. package/tsconfig.json +10 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen3.js","sourceRoot":"","sources":["../../src/mechanics/gen3.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kCAA0C;AAK1C,oCAAiC;AACjC,+BAUgB;AAEhB,SAAgB,YAAY,CAC1B,GAAe,EACf,QAAiB,EACjB,QAAiB,EACjB,IAAU,EACV,KAAY;;IAEZ,IAAA,mBAAY,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC9B,IAAA,mBAAY,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC9B,IAAA,oBAAa,EAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,IAAA,oBAAa,EAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,IAAA,sBAAe,EAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzC,IAAA,sBAAe,EAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,IAAA,oBAAa,EAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC7E,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,IAAA,oBAAa,EAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAE7E,IAAM,IAAI,GAAY;QACpB,YAAY,EAAE,QAAQ,CAAC,IAAI;QAC3B,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,YAAY,EAAE,QAAQ,CAAC,IAAI;KAC5B,CAAC;IAEF,IAAM,MAAM,GAAG,IAAI,eAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAEzE,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;QAC7D,OAAO,MAAM,CAAC;KACf;IAED,IAAI,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE;QAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,MAAM,CAAC;KACf;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;QAC9B,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,OAAO,MAAM,CAAC;KACf;IAED,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;QAC9B,IAAI,CAAC,IAAI;YACP,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;gBAChC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO;oBACpC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;wBACnC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;4BAClC,CAAC,CAAC,QAAQ,CAAC;QACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;KACvB;SAAM,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;QACpC,KAAK,CAAC,YAAY,CAAC,SAAS,GAAG,KAAK,CAAC;QACrC,KAAK,CAAC,YAAY,CAAC,aAAa,GAAG,KAAK,CAAC;KAC1C;IAED,IAAM,gCAAgC,GAAG;QACvC,QAAQ;QACR,MAAM;QACN,OAAO;QACP,UAAU;QACV,OAAO;QACP,KAAK;QACL,UAAU;QACV,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,KAAK;QACL,MAAM;QACN,OAAO;QACP,QAAQ;QACR,MAAM;QACN,OAAO;KACR,CAAC;IAEF,IAAI,iBAAiB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,kBAAkB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3C,IAAI,kBAAkB,IAAI,iBAAiB,KAAK,kBAAkB,EAAE;QAClE,IAAM,mBAAmB,GAAG,gCAAgC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACxF,IAAM,oBAAoB,GAAG,gCAAgC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAE1F,IAAI,mBAAmB,GAAG,oBAAoB,EAAE;YAC9C,KAAA,OAA0C,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,IAAA,EAAhF,iBAAiB,QAAA,EAAE,kBAAkB,QAAA,CAA4C;SACnF;KACF;IAED,IAAM,kBAAkB,GAAG,IAAA,2BAAoB,EAC7C,GAAG,EACH,IAAI,EACJ,iBAAiB,EACjB,KAAK,CAAC,YAAY,CAAC,WAAW,CAC/B,CAAC;IACF,IAAM,kBAAkB,GAAG,kBAAkB;QAC3C,CAAC,CAAC,IAAA,2BAAoB,EAAC,GAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC;QACrF,CAAC,CAAC,CAAC,CAAC;IACN,IAAM,iBAAiB,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;IAElE,IAAI,iBAAiB,KAAK,CAAC,EAAE;QAC3B,OAAO,MAAM,CAAC;KACf;IAED,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3D,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAChE,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9D,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,iBAAiB,IAAI,CAAC,CAAC;QACvF,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EACzD;QACA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC;QACxC,OAAO,MAAM,CAAC;KACf;IAED,IAAI,CAAC,KAAK,GAAG,IAAA,6BAAsB,EAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAEzD,IAAM,WAAW,GAAG,IAAA,6BAAsB,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3D,IAAI,WAAW,EAAE;QACf,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC;QAC5B,OAAO,MAAM,CAAC;KACf;IAED,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;KACvB;IAED,IAAI,EAAE,GAAG,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAE/D,IAAI,EAAE,KAAK,CAAC,EAAE;QACZ,OAAO,MAAM,CAAC;KACf;IACD,EAAE,GAAG,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAElD,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IACtF,IAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/E,IAAM,EAAE,GAAG,mBAAmB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAEtE,IAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC1B,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAE5F,UAAU,GAAG,qBAAqB,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAExF,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,iBAAiB,CAAC,CAAC;IACxD,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;KACzE;IAED,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAU,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;QAE7D,IAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACvC,IAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;QACtC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAU,GAAG,CAAC,EAAE;YAC1C,IAAI,CAAC,SAAS,GAAG,eAAQ,IAAI,CAAC,SAAS,WAAQ,CAAC;YAChD,UAAU,GAAG,IAAI,CAAC,SAAU,CAAC;SAC9B;aAAM;YACL,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;SACxB;QACD,IAAI,SAAS,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gCACtB,KAAK;YACZ,SAAS,GAAG,IAAA,yBAAkB,EAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAC1D,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YAClF,IAAI,KAAK,GAAG,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAClE,KAAK,GAAG,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACxD,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CACzB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CACrE,CAAC;YACF,UAAU,GAAG,qBAAqB,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YACxF,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,iBAAiB,CAAC,CAAC;YAExD,IAAI,gBAAgB,GAAG,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAA,cAAc;gBAC9C,IAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,gBAAgB,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBACtF,gBAAgB,EAAE,CAAC;gBACnB,OAAO,cAAc,GAAG,cAAc,CAAC;YACzC,CAAC,CAAC,CAAC;;QAjBL,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,EAAE,KAAK,EAAE;oBAAtC,KAAK;SAkBb;QACD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC;KACjC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAxLD,oCAwLC;AAED,SAAgB,qBAAqB,CACnC,QAAiB,EACjB,QAAiB,EACjB,IAAU,EACV,IAAa,EACb,GAAO;IAAP,oBAAA,EAAA,OAAO;IAEP,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACjB,QAAQ,IAAI,CAAC,IAAI,EAAE;QACnB,KAAK,OAAO,CAAC;QACb,KAAK,UAAU;YACb,IAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YACjE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,MAAM;QACR,KAAK,UAAU,CAAC;QAChB,KAAK,aAAa;YAChB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC1E,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,MAAM;QACR,KAAK,UAAU;YACb,IAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAC5B,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvF,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,MAAM;QACR,KAAK,QAAQ;YACX,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE;gBAClD,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;gBACjB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;aAClB;YACD,MAAM;QACR,KAAK,cAAc;YACjB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;YAC3B,EAAE,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YACxB,MAAM;QACR,KAAK,aAAa;YAChB,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,MAAM;QACR;YACE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;KACd;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AA5CD,sDA4CC;AAED,SAAgB,kBAAkB,CAChC,QAAiB,EACjB,IAAU,EACV,IAAa,EACb,SAAiB;IAEjB,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAI,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;QAC1C,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1D,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACtD,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACzD,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EACvD;QACA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC;KACzC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAhBD,gDAgBC;AAED,SAAgB,kBAAkB,CAChC,GAAe,EACf,QAAiB,EACjB,QAAiB,EACjB,IAAU,EACV,IAAa,EACb,UAAkB;IAAlB,2BAAA,EAAA,kBAAkB;IAElB,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC;IAChD,IAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9C,IAAI,CAAC,SAAS,GAAG,IAAA,6BAAsB,EAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEpF,IAAI,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEvC,IAAI,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE;QACjE,EAAE,IAAI,CAAC,CAAC;QACR,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC;KACzC;IAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAA,wBAAgB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;QACrF,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;KACnC;SAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QACnE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;KACnC;SAAM,IACL,CAAC,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC/C,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,EACnF;QACA,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;KACnC;SAAM,IACL,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACjF,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5E,CAAC,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EACrF;QACA,EAAE,IAAI,CAAC,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;KACnC;IAED,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE;QACrE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC;KACzC;IAED,IAAI,CAAC,UAAU;QACb,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACpF,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC3E;QACA,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC;KACzC;IAED,IAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,WAAW,GAAG,CAAC,CAAC,EAAE;QACvD,EAAE,GAAG,IAAA,sBAAe,EAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;KAChC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AA3DD,gDA2DC;AAED,SAAgB,mBAAmB,CACjC,GAAe,EACf,QAAiB,EACjB,IAAU,EACV,IAAa,EACb,UAAkB;IAAlB,2BAAA,EAAA,kBAAkB;IAElB,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC;IAChD,IAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/C,IAAI,CAAC,UAAU,GAAG,IAAA,6BAAsB,EAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEtF,IAAI,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAExC,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrF,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;KACnC;SAAM,IACL,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACjF,CAAC,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAC3E;QACA,EAAE,IAAI,CAAC,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;KACnC;IAED,IAAI,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE;QACxE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC;KACzC;IAED,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE;QAC5C,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;KACzB;IAED,IAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAClD,IAAI,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,YAAY,GAAG,CAAC,CAAC,EAAE;QACzD,EAAE,GAAG,IAAA,sBAAe,EAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;KAClC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAvCD,kDAuCC;AAED,SAAS,qBAAqB,CAC5B,UAAkB,EAClB,QAAiB,EACjB,IAAU,EACV,KAAY,EACZ,IAAa,EACb,UAAkB;IAAlB,2BAAA,EAAA,kBAAkB;IAElB,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC;IAChD,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,UAAU,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QAC3E,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;IAED,IAAI,CAAC,UAAU,EAAE;QACf,IAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtE,IAAI,UAAU,IAAI,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE;YAC9C,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,gBAAgB,CAAC,CAAC;YACvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACvB;aAAM,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE;YAC1D,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,gBAAgB,CAAC,CAAC;YACvD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;KACF;IAED,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,WAAW,KAAK,KAAK,EAAE;QACrE,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC1B;IAED,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,iBAAiB,EAAE;QACrE,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;KACzC;IAED,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE;QACvD,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;KAC9B;SAAM,IACL,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EACtE;QACA,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;KAC9B;IAED,IAAI,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACnF,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC;KACrC;IAED,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACvF,IAAI,UAAU,EAAE;QACd,UAAU,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;KACxB;IAED,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE;QAC/C,UAAU,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;KAC3B;IAED,IAAI,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE;QACpC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;KAC3B;IAED,IAAI,IAAI,CAAC,OAAO,OAAZ,IAAI,2BAAY,QAAQ,CAAC,KAAK,YAAG;QACnC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;KAC3C;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Generation } from '../data/interface';
2
+ import type { RawDesc } from '../desc';
3
+ import type { Field } from '../field';
4
+ import type { Move } from '../move';
5
+ import type { Pokemon } from '../pokemon';
6
+ import { Result } from '../result';
7
+ export declare function calculateDPP(gen: Generation, attacker: Pokemon, defender: Pokemon, move: Move, field: Field): Result;
8
+ export declare function calculateBasePowerDPP(gen: Generation, attacker: Pokemon, defender: Pokemon, move: Move, field: Field, desc: RawDesc, hit?: number): number;
9
+ export declare function calculateBPModsDPP(attacker: Pokemon, defender: Pokemon, move: Move, field: Field, desc: RawDesc, basePower: number): number;
10
+ export declare function calculateAttackDPP(gen: Generation, attacker: Pokemon, defender: Pokemon, move: Move, field: Field, desc: RawDesc, isCritical?: boolean): number;
11
+ export declare function calculateDefenseDPP(gen: Generation, attacker: Pokemon, defender: Pokemon, move: Move, field: Field, desc: RawDesc, isCritical?: boolean): number;
@@ -0,0 +1,596 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
20
+ if (ar || !(i in from)) {
21
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
22
+ ar[i] = from[i];
23
+ }
24
+ }
25
+ return to.concat(ar || Array.prototype.slice.call(from));
26
+ };
27
+ exports.__esModule = true;
28
+ exports.calculateDefenseDPP = exports.calculateAttackDPP = exports.calculateBPModsDPP = exports.calculateBasePowerDPP = exports.calculateDPP = void 0;
29
+ var items_1 = require("../items");
30
+ var result_1 = require("../result");
31
+ var util_1 = require("./util");
32
+ function calculateDPP(gen, attacker, defender, move, field) {
33
+ var _a;
34
+ var _b;
35
+ (0, util_1.checkAirLock)(attacker, field);
36
+ (0, util_1.checkAirLock)(defender, field);
37
+ (0, util_1.checkForecast)(attacker, field.weather);
38
+ (0, util_1.checkForecast)(defender, field.weather);
39
+ (0, util_1.checkItem)(attacker);
40
+ (0, util_1.checkItem)(defender);
41
+ (0, util_1.checkIntimidate)(gen, attacker, defender);
42
+ (0, util_1.checkIntimidate)(gen, defender, attacker);
43
+ (0, util_1.checkDownload)(attacker, defender);
44
+ (0, util_1.checkDownload)(defender, attacker);
45
+ attacker.stats.spe = (0, util_1.getFinalSpeed)(gen, attacker, field, field.attackerSide);
46
+ defender.stats.spe = (0, util_1.getFinalSpeed)(gen, defender, field, field.defenderSide);
47
+ var desc = {
48
+ attackerName: attacker.name,
49
+ moveName: move.name,
50
+ defenderName: defender.name
51
+ };
52
+ var result = new result_1.Result(gen, attacker, defender, move, field, 0, desc);
53
+ if (move.category === 'Status' && !move.named('Nature Power')) {
54
+ return result;
55
+ }
56
+ if (field.defenderSide.isProtected && !move.breaksProtect) {
57
+ desc.isProtected = true;
58
+ return result;
59
+ }
60
+ if (move.name === 'Pain Split') {
61
+ var average = Math.floor((attacker.curHP() + defender.curHP()) / 2);
62
+ var damage_1 = Math.max(0, defender.curHP() - average);
63
+ result.damage = damage_1;
64
+ return result;
65
+ }
66
+ var defenderAbilityIgnored = defender.hasAbility('Battle Armor', 'Clear Body', 'Damp', 'Dry Skin', 'Filter', 'Flash Fire', 'Flower Gift', 'Heatproof', 'Hyper Cutter', 'Immunity', 'Inner Focus', 'Insomnia', 'Keen Eye', 'Leaf Guard', 'Levitate', 'Lightning Rod', 'Limber', 'Magma Armor', 'Marvel Scale', 'Motor Drive', 'Oblivious', 'Own Tempo', 'Sand Veil', 'Shell Armor', 'Shield Dust', 'Simple', 'Snow Cloak', 'Solid Rock', 'Soundproof', 'Sticky Hold', 'Storm Drain', 'Sturdy', 'Suction Cups', 'Tangled Feet', 'Thick Fat', 'Unaware', 'Vital Spirit', 'Volt Absorb', 'Water Absorb', 'Water Veil', 'White Smoke', 'Wonder Guard');
67
+ if (attacker.hasAbility('Mold Breaker') && defenderAbilityIgnored) {
68
+ defender.ability = '';
69
+ desc.attackerAbility = attacker.ability;
70
+ }
71
+ var isCritical = move.isCrit && !defender.hasAbility('Battle Armor', 'Shell Armor');
72
+ if (move.named('Weather Ball')) {
73
+ move.type =
74
+ field.hasWeather('Sun') ? 'Fire'
75
+ : field.hasWeather('Rain') ? 'Water'
76
+ : field.hasWeather('Sand') ? 'Rock'
77
+ : field.hasWeather('Hail') ? 'Ice'
78
+ : 'Normal';
79
+ desc.weather = field.weather;
80
+ desc.moveType = move.type;
81
+ }
82
+ else if (move.named('Judgment') && attacker.item && attacker.item.includes('Plate')) {
83
+ move.type = (0, items_1.getItemBoostType)(attacker.item);
84
+ }
85
+ else if (move.named('Natural Gift') && ((_b = attacker.item) === null || _b === void 0 ? void 0 : _b.endsWith('Berry'))) {
86
+ var gift = (0, items_1.getNaturalGift)(gen, attacker.item);
87
+ move.type = gift.t;
88
+ move.bp = gift.p;
89
+ desc.attackerItem = attacker.item;
90
+ desc.moveBP = move.bp;
91
+ desc.moveType = move.type;
92
+ }
93
+ else if (move.named('Brick Break')) {
94
+ field.defenderSide.isReflect = false;
95
+ field.defenderSide.isLightScreen = false;
96
+ }
97
+ if (attacker.hasAbility('Normalize') && !move.named('Struggle')) {
98
+ move.type = 'Normal';
99
+ desc.attackerAbility = attacker.ability;
100
+ }
101
+ var isGhostRevealed = attacker.hasAbility('Scrappy') || field.defenderSide.isForesight;
102
+ var typeEffectivenessPrecedenceRules = [
103
+ 'Normal',
104
+ 'Fire',
105
+ 'Water',
106
+ 'Electric',
107
+ 'Grass',
108
+ 'Ice',
109
+ 'Fighting',
110
+ 'Poison',
111
+ 'Ground',
112
+ 'Flying',
113
+ 'Psychic',
114
+ 'Bug',
115
+ 'Rock',
116
+ 'Ghost',
117
+ 'Dragon',
118
+ 'Dark',
119
+ 'Steel',
120
+ ];
121
+ var firstDefenderType = defender.types[0];
122
+ var secondDefenderType = defender.types[1];
123
+ if (secondDefenderType && firstDefenderType !== secondDefenderType) {
124
+ var firstTypePrecedence = typeEffectivenessPrecedenceRules.indexOf(firstDefenderType);
125
+ var secondTypePrecedence = typeEffectivenessPrecedenceRules.indexOf(secondDefenderType);
126
+ if (firstTypePrecedence > secondTypePrecedence) {
127
+ _a = __read([secondDefenderType, firstDefenderType], 2), firstDefenderType = _a[0], secondDefenderType = _a[1];
128
+ }
129
+ }
130
+ var type1Effectiveness = (0, util_1.getMoveEffectiveness)(gen, move, firstDefenderType, isGhostRevealed, field.isGravity);
131
+ var type2Effectiveness = secondDefenderType
132
+ ? (0, util_1.getMoveEffectiveness)(gen, move, secondDefenderType, isGhostRevealed, field.isGravity)
133
+ : 1;
134
+ var typeEffectiveness = type1Effectiveness * type2Effectiveness;
135
+ if (typeEffectiveness === 0 && move.hasType('Ground') &&
136
+ (defender.hasItem('Iron Ball') && !defender.hasAbility('Klutz'))) {
137
+ if (type1Effectiveness === 0) {
138
+ type1Effectiveness = 1;
139
+ }
140
+ else if (defender.types[1] && type2Effectiveness === 0) {
141
+ type2Effectiveness = 1;
142
+ }
143
+ typeEffectiveness = type1Effectiveness * type2Effectiveness;
144
+ }
145
+ if (typeEffectiveness === 0) {
146
+ return result;
147
+ }
148
+ var ignoresWonderGuard = move.hasType('???') || move.named('Fire Fang');
149
+ if ((!ignoresWonderGuard && defender.hasAbility('Wonder Guard') && typeEffectiveness <= 1) ||
150
+ (move.hasType('Fire') && defender.hasAbility('Flash Fire')) ||
151
+ (move.hasType('Water') && defender.hasAbility('Dry Skin', 'Water Absorb')) ||
152
+ (move.hasType('Electric') && defender.hasAbility('Motor Drive', 'Volt Absorb')) ||
153
+ (move.hasType('Ground') && !field.isGravity &&
154
+ !defender.hasItem('Iron Ball') && defender.hasAbility('Levitate')) ||
155
+ (move.flags.sound && defender.hasAbility('Soundproof'))) {
156
+ desc.defenderAbility = defender.ability;
157
+ return result;
158
+ }
159
+ desc.HPEVs = (0, util_1.getStatDescriptionText)(gen, defender, 'hp');
160
+ var fixedDamage = (0, util_1.handleFixedDamageMoves)(attacker, move);
161
+ if (fixedDamage) {
162
+ result.damage = fixedDamage;
163
+ return result;
164
+ }
165
+ if (move.hits > 1) {
166
+ desc.hits = move.hits;
167
+ }
168
+ var isPhysical = move.category === 'Physical';
169
+ var basePower = calculateBasePowerDPP(gen, attacker, defender, move, field, desc);
170
+ if (basePower === 0) {
171
+ return result;
172
+ }
173
+ basePower = calculateBPModsDPP(attacker, defender, move, field, desc, basePower);
174
+ var attack = calculateAttackDPP(gen, attacker, defender, move, field, desc, isCritical);
175
+ var defense = calculateDefenseDPP(gen, attacker, defender, move, field, desc, isCritical);
176
+ var baseDamage = Math.floor(Math.floor((Math.floor((2 * attacker.level) / 5 + 2) * basePower * attack) / 50) / defense);
177
+ if (attacker.hasStatus('brn') && isPhysical && !attacker.hasAbility('Guts')) {
178
+ baseDamage = Math.floor(baseDamage * 0.5);
179
+ desc.isBurned = true;
180
+ }
181
+ baseDamage = calculateFinalModsDPP(baseDamage, attacker, move, field, desc, isCritical);
182
+ var stabMod = 1;
183
+ if (move.hasType.apply(move, __spreadArray([], __read(attacker.types), false))) {
184
+ if (attacker.hasAbility('Adaptability')) {
185
+ stabMod = 2;
186
+ desc.attackerAbility = attacker.ability;
187
+ }
188
+ else {
189
+ stabMod = 1.5;
190
+ }
191
+ }
192
+ var filterMod = 1;
193
+ if (defender.hasAbility('Filter', 'Solid Rock') && typeEffectiveness > 1) {
194
+ filterMod = 0.75;
195
+ desc.defenderAbility = defender.ability;
196
+ }
197
+ var ebeltMod = 1;
198
+ if (attacker.hasItem('Expert Belt') && typeEffectiveness > 1) {
199
+ ebeltMod = 1.2;
200
+ desc.attackerItem = attacker.item;
201
+ }
202
+ var tintedMod = 1;
203
+ if (attacker.hasAbility('Tinted Lens') && typeEffectiveness < 1) {
204
+ tintedMod = 2;
205
+ desc.attackerAbility = attacker.ability;
206
+ }
207
+ var berryMod = 1;
208
+ if (move.hasType((0, items_1.getBerryResistType)(defender.item)) &&
209
+ (typeEffectiveness > 1 || move.hasType('Normal'))) {
210
+ berryMod = 0.5;
211
+ desc.defenderItem = defender.item;
212
+ }
213
+ var damage = [];
214
+ for (var i = 0; i < 16; i++) {
215
+ damage[i] = Math.floor((baseDamage * (85 + i)) / 100);
216
+ damage[i] = Math.floor(damage[i] * stabMod);
217
+ damage[i] = Math.floor(damage[i] * type1Effectiveness);
218
+ damage[i] = Math.floor(damage[i] * type2Effectiveness);
219
+ damage[i] = Math.floor(damage[i] * filterMod);
220
+ damage[i] = Math.floor(damage[i] * ebeltMod);
221
+ damage[i] = Math.floor(damage[i] * tintedMod);
222
+ damage[i] = Math.floor(damage[i] * berryMod);
223
+ damage[i] = Math.max(1, damage[i]);
224
+ }
225
+ result.damage = damage;
226
+ if ((move.dropsStats && move.timesUsed > 1) || move.hits > 1) {
227
+ var origDefBoost = desc.defenseBoost;
228
+ var origAtkBoost = desc.attackBoost;
229
+ var numAttacks = 1;
230
+ if (move.dropsStats && move.timesUsed > 1) {
231
+ desc.moveTurns = "over ".concat(move.timesUsed, " turns");
232
+ numAttacks = move.timesUsed;
233
+ }
234
+ else {
235
+ numAttacks = move.hits;
236
+ }
237
+ var usedItems = [false, false];
238
+ var _loop_1 = function (times) {
239
+ usedItems = (0, util_1.checkMultihitBoost)(gen, attacker, defender, move, field, desc, usedItems[0], usedItems[1]);
240
+ var newBasePower = calculateBasePowerDPP(gen, attacker, defender, move, field, desc);
241
+ newBasePower = calculateBPModsDPP(attacker, defender, move, field, desc, newBasePower);
242
+ var newAtk = calculateAttackDPP(gen, attacker, defender, move, field, desc, isCritical);
243
+ var baseDamage_1 = Math.floor(Math.floor((Math.floor((2 * attacker.level) / 5 + 2) * newBasePower * newAtk) / 50) / defense);
244
+ if (attacker.hasStatus('brn') && isPhysical && !attacker.hasAbility('Guts')) {
245
+ baseDamage_1 = Math.floor(baseDamage_1 * 0.5);
246
+ desc.isBurned = true;
247
+ }
248
+ baseDamage_1 = calculateFinalModsDPP(baseDamage_1, attacker, move, field, desc, isCritical);
249
+ var damageMultiplier = 0;
250
+ result.damage = result.damage.map(function (affectedAmount) {
251
+ var newFinalDamage = 0;
252
+ newFinalDamage = Math.floor((baseDamage_1 * (85 + damageMultiplier)) / 100);
253
+ newFinalDamage = Math.floor(newFinalDamage * stabMod);
254
+ newFinalDamage = Math.floor(newFinalDamage * type1Effectiveness);
255
+ newFinalDamage = Math.floor(newFinalDamage * type2Effectiveness);
256
+ newFinalDamage = Math.floor(newFinalDamage * filterMod);
257
+ newFinalDamage = Math.floor(newFinalDamage * ebeltMod);
258
+ newFinalDamage = Math.floor(newFinalDamage * tintedMod);
259
+ newFinalDamage = Math.max(1, newFinalDamage);
260
+ damageMultiplier++;
261
+ return affectedAmount + newFinalDamage;
262
+ });
263
+ };
264
+ for (var times = 1; times < numAttacks; times++) {
265
+ _loop_1(times);
266
+ }
267
+ desc.defenseBoost = origDefBoost;
268
+ desc.attackBoost = origAtkBoost;
269
+ }
270
+ return result;
271
+ }
272
+ exports.calculateDPP = calculateDPP;
273
+ function calculateBasePowerDPP(gen, attacker, defender, move, field, desc, hit) {
274
+ if (hit === void 0) { hit = 1; }
275
+ var basePower = move.bp;
276
+ var turnOrder = attacker.stats.spe > defender.stats.spe ? 'first' : 'last';
277
+ switch (move.name) {
278
+ case 'Brine':
279
+ if (defender.curHP() <= defender.maxHP() / 2) {
280
+ basePower *= 2;
281
+ desc.moveBP = basePower;
282
+ }
283
+ break;
284
+ case 'Eruption':
285
+ case 'Water Spout':
286
+ basePower = Math.max(1, Math.floor((basePower * attacker.curHP()) / attacker.maxHP()));
287
+ desc.moveBP = basePower;
288
+ break;
289
+ case 'Facade':
290
+ if (attacker.hasStatus('par', 'psn', 'tox', 'brn')) {
291
+ basePower = move.bp * 2;
292
+ desc.moveBP = basePower;
293
+ }
294
+ break;
295
+ case 'Flail':
296
+ case 'Reversal':
297
+ var p = Math.floor((64 * attacker.curHP()) / attacker.maxHP());
298
+ basePower = p <= 1 ? 200 : p <= 5 ? 150 : p <= 12 ? 100 : p <= 21 ? 80 : p <= 42 ? 40 : 20;
299
+ desc.moveBP = basePower;
300
+ break;
301
+ case 'Fling':
302
+ basePower = (0, items_1.getFlingPower)(attacker.item);
303
+ desc.moveBP = basePower;
304
+ desc.attackerItem = attacker.item;
305
+ break;
306
+ case 'Grass Knot':
307
+ case 'Low Kick':
308
+ var w = defender.weightkg;
309
+ basePower = w >= 200 ? 120 : w >= 100 ? 100 : w >= 50 ? 80 : w >= 25 ? 60 : w >= 10 ? 40 : 20;
310
+ desc.moveBP = basePower;
311
+ break;
312
+ case 'Gyro Ball':
313
+ basePower = Math.min(150, Math.floor((25 * defender.stats.spe) / attacker.stats.spe));
314
+ desc.moveBP = basePower;
315
+ break;
316
+ case 'Payback':
317
+ if (turnOrder !== 'first') {
318
+ basePower *= 2;
319
+ desc.moveBP = basePower;
320
+ }
321
+ break;
322
+ case 'Punishment':
323
+ basePower = Math.min(200, 60 + 20 * (0, util_1.countBoosts)(gen, defender.boosts));
324
+ desc.moveBP = basePower;
325
+ break;
326
+ case 'Wake-Up Slap':
327
+ if (defender.hasStatus('slp')) {
328
+ basePower *= 2;
329
+ desc.moveBP = basePower;
330
+ }
331
+ break;
332
+ case 'Nature Power':
333
+ move.category = 'Special';
334
+ move.secondaries = true;
335
+ basePower = 80;
336
+ desc.moveName = 'Tri Attack';
337
+ break;
338
+ case 'Crush Grip':
339
+ case 'Wring Out':
340
+ basePower = Math.floor((defender.curHP() * 120) / defender.maxHP()) + 1;
341
+ desc.moveBP = basePower;
342
+ break;
343
+ case 'Triple Kick':
344
+ basePower = hit * 10;
345
+ desc.moveBP = move.hits === 2 ? 30 : move.hits === 3 ? 60 : 10;
346
+ break;
347
+ case 'Weather Ball':
348
+ basePower = move.bp * (field.weather ? 2 : 1);
349
+ desc.moveBP = basePower;
350
+ break;
351
+ default:
352
+ basePower = move.bp;
353
+ }
354
+ return basePower;
355
+ }
356
+ exports.calculateBasePowerDPP = calculateBasePowerDPP;
357
+ function calculateBPModsDPP(attacker, defender, move, field, desc, basePower) {
358
+ if (field.attackerSide.isHelpingHand) {
359
+ basePower = Math.floor(basePower * 1.5);
360
+ desc.isHelpingHand = true;
361
+ }
362
+ var isPhysical = move.category === 'Physical';
363
+ if ((attacker.hasItem('Muscle Band') && isPhysical) ||
364
+ (attacker.hasItem('Wise Glasses') && !isPhysical)) {
365
+ basePower = Math.floor(basePower * 1.1);
366
+ desc.attackerItem = attacker.item;
367
+ }
368
+ else if (move.hasType((0, items_1.getItemBoostType)(attacker.item)) ||
369
+ (attacker.hasItem('Adamant Orb') &&
370
+ attacker.named('Dialga') &&
371
+ move.hasType('Steel', 'Dragon')) ||
372
+ (attacker.hasItem('Lustrous Orb') &&
373
+ attacker.named('Palkia') &&
374
+ move.hasType('Water', 'Dragon')) ||
375
+ (attacker.hasItem('Griseous Orb') &&
376
+ attacker.named('Giratina-Origin') &&
377
+ move.hasType('Ghost', 'Dragon'))) {
378
+ basePower = Math.floor(basePower * 1.2);
379
+ desc.attackerItem = attacker.item;
380
+ }
381
+ if ((attacker.hasAbility('Reckless') && (move.recoil || move.hasCrashDamage)) ||
382
+ (attacker.hasAbility('Iron Fist') && move.flags.punch)) {
383
+ basePower = Math.floor(basePower * 1.2);
384
+ desc.attackerAbility = attacker.ability;
385
+ }
386
+ else if ((attacker.curHP() <= attacker.maxHP() / 3 &&
387
+ ((attacker.hasAbility('Overgrow') && move.hasType('Grass')) ||
388
+ (attacker.hasAbility('Blaze') && move.hasType('Fire')) ||
389
+ (attacker.hasAbility('Torrent') && move.hasType('Water')) ||
390
+ (attacker.hasAbility('Swarm') && move.hasType('Bug')))) ||
391
+ (attacker.hasAbility('Technician') && basePower <= 60)) {
392
+ basePower = Math.floor(basePower * 1.5);
393
+ desc.attackerAbility = attacker.ability;
394
+ }
395
+ if ((defender.hasAbility('Heatproof') && move.hasType('Fire')) ||
396
+ (defender.hasAbility('Thick Fat') && (move.hasType('Fire', 'Ice')))) {
397
+ basePower = Math.floor(basePower * 0.5);
398
+ desc.defenderAbility = defender.ability;
399
+ }
400
+ else if (defender.hasAbility('Dry Skin') && move.hasType('Fire')) {
401
+ basePower = Math.floor(basePower * 1.25);
402
+ desc.defenderAbility = defender.ability;
403
+ }
404
+ return basePower;
405
+ }
406
+ exports.calculateBPModsDPP = calculateBPModsDPP;
407
+ function calculateAttackDPP(gen, attacker, defender, move, field, desc, isCritical) {
408
+ if (isCritical === void 0) { isCritical = false; }
409
+ var isPhysical = move.category === 'Physical';
410
+ var attackStat = isPhysical ? 'atk' : 'spa';
411
+ desc.attackEVs = (0, util_1.getStatDescriptionText)(gen, attacker, attackStat, attacker.nature);
412
+ var attack;
413
+ var attackBoost = attacker.boosts[attackStat];
414
+ var rawAttack = attacker.rawStats[attackStat];
415
+ if (attackBoost === 0 || (isCritical && attackBoost < 0)) {
416
+ attack = rawAttack;
417
+ }
418
+ else if (defender.hasAbility('Unaware')) {
419
+ attack = rawAttack;
420
+ desc.defenderAbility = defender.ability;
421
+ }
422
+ else if (attacker.hasAbility('Simple')) {
423
+ attack = getSimpleModifiedStat(rawAttack, attackBoost);
424
+ desc.attackerAbility = attacker.ability;
425
+ desc.attackBoost = attackBoost;
426
+ }
427
+ else {
428
+ attack = (0, util_1.getModifiedStat)(rawAttack, attackBoost);
429
+ desc.attackBoost = attackBoost;
430
+ }
431
+ if (isPhysical && attacker.hasAbility('Pure Power', 'Huge Power')) {
432
+ attack *= 2;
433
+ desc.attackerAbility = attacker.ability;
434
+ }
435
+ else if (field.hasWeather('Sun') &&
436
+ (attacker.hasAbility(isPhysical ? 'Flower Gift' : 'Solar Power'))) {
437
+ attack = Math.floor(attack * 1.5);
438
+ desc.attackerAbility = attacker.ability;
439
+ desc.weather = field.weather;
440
+ }
441
+ else if ((isPhysical &&
442
+ (attacker.hasAbility('Hustle') || (attacker.hasAbility('Guts') && attacker.status)) ||
443
+ (!isPhysical && attacker.abilityOn && attacker.hasAbility('Plus', 'Minus')))) {
444
+ attack = Math.floor(attack * 1.5);
445
+ desc.attackerAbility = attacker.ability;
446
+ }
447
+ else if (isPhysical && attacker.hasAbility('Slow Start') && attacker.abilityOn) {
448
+ attack = Math.floor(attack / 2);
449
+ desc.attackerAbility = attacker.ability;
450
+ }
451
+ if (field.attackerSide.isFlowerGift && !attacker.hasAbility('Flower Gift') &&
452
+ field.hasWeather('Sun') && isPhysical) {
453
+ attack = Math.floor(attack * 1.5);
454
+ desc.weather = field.weather;
455
+ desc.isFlowerGiftAttacker = true;
456
+ }
457
+ if ((isPhysical ? attacker.hasItem('Choice Band') : attacker.hasItem('Choice Specs')) ||
458
+ (!isPhysical && attacker.hasItem('Soul Dew') && attacker.named('Latios', 'Latias'))) {
459
+ attack = Math.floor(attack * 1.5);
460
+ desc.attackerItem = attacker.item;
461
+ }
462
+ else if ((attacker.hasItem('Light Ball') && attacker.named('Pikachu')) ||
463
+ (attacker.hasItem('Thick Club') && attacker.named('Cubone', 'Marowak') && isPhysical) ||
464
+ (attacker.hasItem('Deep Sea Tooth') && attacker.named('Clamperl') && !isPhysical)) {
465
+ attack *= 2;
466
+ desc.attackerItem = attacker.item;
467
+ }
468
+ return attack;
469
+ }
470
+ exports.calculateAttackDPP = calculateAttackDPP;
471
+ function calculateDefenseDPP(gen, attacker, defender, move, field, desc, isCritical) {
472
+ if (isCritical === void 0) { isCritical = false; }
473
+ var isPhysical = move.category === 'Physical';
474
+ var defenseStat = isPhysical ? 'def' : 'spd';
475
+ desc.defenseEVs = (0, util_1.getStatDescriptionText)(gen, defender, defenseStat, defender.nature);
476
+ var defense;
477
+ var defenseBoost = defender.boosts[defenseStat];
478
+ var rawDefense = defender.rawStats[defenseStat];
479
+ if (defenseBoost === 0 || (isCritical && defenseBoost > 0)) {
480
+ defense = rawDefense;
481
+ }
482
+ else if (attacker.hasAbility('Unaware')) {
483
+ defense = rawDefense;
484
+ desc.attackerAbility = attacker.ability;
485
+ }
486
+ else if (defender.hasAbility('Simple')) {
487
+ defense = getSimpleModifiedStat(rawDefense, defenseBoost);
488
+ desc.defenderAbility = defender.ability;
489
+ desc.defenseBoost = defenseBoost;
490
+ }
491
+ else {
492
+ defense = (0, util_1.getModifiedStat)(rawDefense, defenseBoost);
493
+ desc.defenseBoost = defenseBoost;
494
+ }
495
+ if (defender.hasAbility('Marvel Scale') && defender.status && isPhysical) {
496
+ defense = Math.floor(defense * 1.5);
497
+ desc.defenderAbility = defender.ability;
498
+ }
499
+ else if (defender.hasAbility('Flower Gift') && field.hasWeather('Sun') && !isPhysical) {
500
+ defense = Math.floor(defense * 1.5);
501
+ desc.defenderAbility = defender.ability;
502
+ desc.weather = field.weather;
503
+ }
504
+ else if (field.defenderSide.isFlowerGift && field.hasWeather('Sun') && !isPhysical) {
505
+ defense = Math.floor(defense * 1.5);
506
+ desc.weather = field.weather;
507
+ desc.isFlowerGiftDefender = true;
508
+ }
509
+ if (defender.hasItem('Soul Dew') && defender.named('Latios', 'Latias') && !isPhysical) {
510
+ defense = Math.floor(defense * 1.5);
511
+ desc.defenderItem = defender.item;
512
+ }
513
+ else if ((defender.hasItem('Deep Sea Scale') && defender.named('Clamperl') && !isPhysical) ||
514
+ (defender.hasItem('Metal Powder') && defender.named('Ditto') && isPhysical)) {
515
+ defense *= 2;
516
+ desc.defenderItem = defender.item;
517
+ }
518
+ if (field.hasWeather('Sand') && defender.hasType('Rock') && !isPhysical) {
519
+ defense = Math.floor(defense * 1.5);
520
+ desc.weather = field.weather;
521
+ }
522
+ if (move.named('Explosion') || move.named('Self-Destruct')) {
523
+ defense = Math.floor(defense * 0.5);
524
+ }
525
+ if (defense < 1) {
526
+ defense = 1;
527
+ }
528
+ return defense;
529
+ }
530
+ exports.calculateDefenseDPP = calculateDefenseDPP;
531
+ function calculateFinalModsDPP(baseDamage, attacker, move, field, desc, isCritical) {
532
+ if (isCritical === void 0) { isCritical = false; }
533
+ var isPhysical = move.category === 'Physical';
534
+ if (!isCritical) {
535
+ var screenMultiplier = field.gameType !== 'Singles' ? 2 / 3 : 1 / 2;
536
+ if (isPhysical && field.defenderSide.isReflect) {
537
+ baseDamage = Math.floor(baseDamage * screenMultiplier);
538
+ desc.isReflect = true;
539
+ }
540
+ else if (!isPhysical && field.defenderSide.isLightScreen) {
541
+ baseDamage = Math.floor(baseDamage * screenMultiplier);
542
+ desc.isLightScreen = true;
543
+ }
544
+ }
545
+ if (field.gameType !== 'Singles' &&
546
+ ['allAdjacent', 'allAdjacentFoes'].includes(move.target)) {
547
+ baseDamage = Math.floor((baseDamage * 3) / 4);
548
+ }
549
+ if ((field.hasWeather('Sun') && move.hasType('Fire')) ||
550
+ (field.hasWeather('Rain') && move.hasType('Water'))) {
551
+ baseDamage = Math.floor(baseDamage * 1.5);
552
+ desc.weather = field.weather;
553
+ }
554
+ else if ((field.hasWeather('Sun') && move.hasType('Water')) ||
555
+ (field.hasWeather('Rain') && move.hasType('Fire')) ||
556
+ (move.named('Solar Beam') && field.hasWeather('Rain', 'Sand', 'Hail'))) {
557
+ baseDamage = Math.floor(baseDamage * 0.5);
558
+ desc.weather = field.weather;
559
+ }
560
+ if (attacker.hasAbility('Flash Fire') && attacker.abilityOn && move.hasType('Fire')) {
561
+ baseDamage = Math.floor(baseDamage * 1.5);
562
+ desc.attackerAbility = 'Flash Fire';
563
+ }
564
+ baseDamage += 2;
565
+ if (isCritical) {
566
+ if (attacker.hasAbility('Sniper')) {
567
+ baseDamage *= 3;
568
+ desc.attackerAbility = attacker.ability;
569
+ }
570
+ else {
571
+ baseDamage *= 2;
572
+ }
573
+ desc.isCritical = isCritical;
574
+ }
575
+ if (attacker.hasItem('Life Orb')) {
576
+ baseDamage = Math.floor(baseDamage * 1.3);
577
+ desc.attackerItem = attacker.item;
578
+ }
579
+ if (move.named('Pursuit') && field.defenderSide.isSwitching === 'out') {
580
+ if (attacker.hasAbility('Technician')) {
581
+ baseDamage = Math.floor(baseDamage * 1);
582
+ }
583
+ else {
584
+ baseDamage = Math.floor(baseDamage * 2);
585
+ desc.isSwitching = 'out';
586
+ }
587
+ }
588
+ return baseDamage;
589
+ }
590
+ function getSimpleModifiedStat(stat, mod) {
591
+ var simpleMod = Math.min(6, Math.max(-6, mod * 2));
592
+ return simpleMod > 0
593
+ ? Math.floor((stat * (2 + simpleMod)) / 2)
594
+ : simpleMod < 0 ? Math.floor((stat * 2) / (2 - simpleMod)) : stat;
595
+ }
596
+ //# sourceMappingURL=gen4.js.map