diff --git a/documentation/DocumentationTest.MateHpMpDocumentation.approved.md b/documentation/DocumentationTest.MateHpMpDocumentation.approved.md new file mode 100644 index 0000000..9cdf2f0 --- /dev/null +++ b/documentation/DocumentationTest.MateHpMpDocumentation.approved.md @@ -0,0 +1,369 @@ +# Mate HP/MP Table + +## Race 0 +- Factor 0 - Level 1 - HP: 156 - MP: 10 +- Factor 0 - Level 10 - HP: 363 - MP: 69 +- Factor 0 - Level 20 - HP: 688 - MP: 181 +- Factor 0 - Level 30 - HP: 1113 - MP: 344 +- Factor 0 - Level 40 - HP: 1638 - MP: 556 +- Factor 0 - Level 50 - HP: 2263 - MP: 819 +- Factor 0 - Level 60 - HP: 2988 - MP: 1131 +- Factor 0 - Level 70 - HP: 3813 - MP: 1494 +- Factor 0 - Level 80 - HP: 4738 - MP: 1906 +- Factor 0 - Level 90 - HP: 5763 - MP: 2369 +- Factor 0 - Level 99 - HP: 6771 - MP: 2828 +- Factor 4 - Level 1 - HP: 156 - MP: 10 +- Factor 4 - Level 10 - HP: 450 - MP: 97 +- Factor 4 - Level 20 - HP: 975 - MP: 290 +- Factor 4 - Level 30 - HP: 1696 - MP: 580 +- Factor 4 - Level 40 - HP: 2613 - MP: 969 +- Factor 4 - Level 50 - HP: 3726 - MP: 1455 +- Factor 4 - Level 60 - HP: 5035 - MP: 2040 +- Factor 4 - Level 70 - HP: 6540 - MP: 2722 +- Factor 4 - Level 80 - HP: 8241 - MP: 3503 +- Factor 4 - Level 90 - HP: 10138 - MP: 4381 +- Factor 4 - Level 99 - HP: 12075 - MP: 5285 +- Factor 8 - Level 1 - HP: 156 - MP: 10 +- Factor 8 - Level 10 - HP: 580 - MP: 142 +- Factor 8 - Level 20 - HP: 1363 - MP: 444 +- Factor 8 - Level 30 - HP: 2470 - MP: 907 +- Factor 8 - Level 40 - HP: 3901 - MP: 1533 +- Factor 8 - Level 50 - HP: 5656 - MP: 2320 +- Factor 8 - Level 60 - HP: 7735 - MP: 3270 +- Factor 8 - Level 70 - HP: 10138 - MP: 4381 +- Factor 8 - Level 80 - HP: 12865 - MP: 5655 +- Factor 8 - Level 90 - HP: 15916 - MP: 7090 +- Factor 8 - Level 99 - HP: 18900 - MP: 8502 +- Factor 12 - Level 1 - HP: 156 - MP: 10 +- Factor 12 - Level 10 - HP: 688 - MP: 181 +- Factor 12 - Level 20 - HP: 1755 - MP: 605 +- Factor 12 - Level 30 - HP: 3306 - MP: 1270 +- Factor 12 - Level 40 - HP: 5341 - MP: 2178 +- Factor 12 - Level 50 - HP: 7860 - MP: 3327 +- Factor 12 - Level 60 - HP: 10863 - MP: 4719 +- Factor 12 - Level 70 - HP: 14350 - MP: 6352 +- Factor 12 - Level 80 - HP: 18321 - MP: 8228 +- Factor 12 - Level 90 - HP: 22776 - MP: 10345 +- Factor 12 - Level 99 - HP: 27246 - MP: 12480 + +## Race 1 +- Factor 0 - Level 1 - HP: 636 - MP: 192 +- Factor 0 - Level 10 - HP: 1275 - MP: 494 +- Factor 0 - Level 20 - HP: 2365 - MP: 1019 +- Factor 0 - Level 30 - HP: 3855 - MP: 1744 +- Factor 0 - Level 40 - HP: 5745 - MP: 2669 +- Factor 0 - Level 50 - HP: 8035 - MP: 3794 +- Factor 0 - Level 60 - HP: 10725 - MP: 5119 +- Factor 0 - Level 70 - HP: 13815 - MP: 6644 +- Factor 0 - Level 80 - HP: 17305 - MP: 8369 +- Factor 0 - Level 90 - HP: 21195 - MP: 10294 +- Factor 0 - Level 99 - HP: 25038 - MP: 12197 +- Factor 4 - Level 1 - HP: 636 - MP: 192 +- Factor 4 - Level 10 - HP: 1413 - MP: 560 +- Factor 4 - Level 20 - HP: 2841 - MP: 1250 +- Factor 4 - Level 30 - HP: 4845 - MP: 2228 +- Factor 4 - Level 40 - HP: 7425 - MP: 3494 +- Factor 4 - Level 50 - HP: 10581 - MP: 5048 +- Factor 4 - Level 60 - HP: 14313 - MP: 6890 +- Factor 4 - Level 70 - HP: 18621 - MP: 9020 +- Factor 4 - Level 80 - HP: 23505 - MP: 11438 +- Factor 4 - Level 90 - HP: 28965 - MP: 14144 +- Factor 4 - Level 99 - HP: 34476 - MP: 16877 +- Factor 8 - Level 1 - HP: 636 - MP: 192 +- Factor 8 - Level 10 - HP: 1611 - MP: 655 +- Factor 8 - Level 20 - HP: 3445 - MP: 1544 +- Factor 8 - Level 30 - HP: 6063 - MP: 2825 +- Factor 8 - Level 40 - HP: 9465 - MP: 4498 +- Factor 8 - Level 50 - HP: 13651 - MP: 6563 +- Factor 8 - Level 60 - HP: 18621 - MP: 9020 +- Factor 8 - Level 70 - HP: 24375 - MP: 11869 +- Factor 8 - Level 80 - HP: 30913 - MP: 15110 +- Factor 8 - Level 90 - HP: 38235 - MP: 18743 +- Factor 8 - Level 99 - HP: 45435 - MP: 22318 +- Factor 12 - Level 1 - HP: 636 - MP: 192 +- Factor 12 - Level 10 - HP: 1770 - MP: 731 +- Factor 12 - Level 20 - HP: 4026 - MP: 1827 +- Factor 12 - Level 30 - HP: 7306 - MP: 3435 +- Factor 12 - Level 40 - HP: 11610 - MP: 5555 +- Factor 12 - Level 50 - HP: 16938 - MP: 8187 +- Factor 12 - Level 60 - HP: 23290 - MP: 11331 +- Factor 12 - Level 70 - HP: 30666 - MP: 14987 +- Factor 12 - Level 80 - HP: 39066 - MP: 19155 +- Factor 12 - Level 90 - HP: 48490 - MP: 23835 +- Factor 12 - Level 99 - HP: 57915 - MP: 28519 + +## Race 2 +- Factor 0 - Level 1 - HP: 121 - MP: 60 +- Factor 0 - Level 10 - HP: 420 - MP: 130 +- Factor 0 - Level 20 - HP: 975 - MP: 240 +- Factor 0 - Level 30 - HP: 1755 - MP: 382 +- Factor 0 - Level 40 - HP: 2760 - MP: 556 +- Factor 0 - Level 50 - HP: 3990 - MP: 762 +- Factor 0 - Level 60 - HP: 5445 - MP: 1000 +- Factor 0 - Level 70 - HP: 7125 - MP: 1270 +- Factor 0 - Level 80 - HP: 9030 - MP: 1572 +- Factor 0 - Level 90 - HP: 11160 - MP: 1906 +- Factor 0 - Level 99 - HP: 13351 - MP: 2225 +- Factor 4 - Level 1 - HP: 121 - MP: 60 +- Factor 4 - Level 10 - HP: 546 - MP: 168 +- Factor 4 - Level 20 - HP: 1363 - MP: 363 +- Factor 4 - Level 30 - HP: 2541 - MP: 630 +- Factor 4 - Level 40 - HP: 4080 - MP: 969 +- Factor 4 - Level 50 - HP: 5980 - MP: 1380 +- Factor 4 - Level 60 - HP: 8241 - MP: 1863 +- Factor 4 - Level 70 - HP: 10863 - MP: 2418 +- Factor 4 - Level 80 - HP: 13846 - MP: 3045 +- Factor 4 - Level 90 - HP: 17190 - MP: 3744 +- Factor 4 - Level 99 - HP: 20488 - MP: 4448 +- Factor 8 - Level 1 - HP: 121 - MP: 60 +- Factor 8 - Level 10 - HP: 651 - MP: 225 +- Factor 8 - Level 20 - HP: 1755 - MP: 533 +- Factor 8 - Level 30 - HP: 3388 - MP: 969 +- Factor 8 - Level 40 - HP: 5550 - MP: 1533 +- Factor 8 - Level 50 - HP: 8241 - MP: 2225 +- Factor 8 - Level 60 - HP: 11461 - MP: 3045 +- Factor 8 - Level 70 - HP: 15210 - MP: 3993 +- Factor 8 - Level 80 - HP: 19488 - MP: 5069 +- Factor 8 - Level 90 - HP: 24295 - MP: 6273 +- Factor 8 - Level 99 - HP: 29146 - MP: 7431 +- Factor 12 - Level 1 - HP: 121 - MP: 60 +- Factor 12 - Level 10 - HP: 805 - MP: 290 +- Factor 12 - Level 20 - HP: 2263 - MP: 735 +- Factor 12 - Level 30 - HP: 4450 - MP: 1380 +- Factor 12 - Level 40 - HP: 7366 - MP: 2225 +- Factor 12 - Level 50 - HP: 11011 - MP: 3270 +- Factor 12 - Level 60 - HP: 15385 - MP: 4515 +- Factor 12 - Level 70 - HP: 20488 - MP: 5960 +- Factor 12 - Level 80 - HP: 26320 - MP: 7605 +- Factor 12 - Level 90 - HP: 32881 - MP: 9450 +- Factor 12 - Level 99 - HP: 39325 - MP: 11281 + +## Race 3 +- Factor 0 - Level 1 - HP: 221 - MP: 60 +- Factor 0 - Level 10 - HP: 410 - MP: 155 +- Factor 0 - Level 20 - HP: 715 - MP: 307 +- Factor 0 - Level 30 - HP: 1120 - MP: 510 +- Factor 0 - Level 40 - HP: 1625 - MP: 762 +- Factor 0 - Level 50 - HP: 2230 - MP: 1065 +- Factor 0 - Level 60 - HP: 2935 - MP: 1417 +- Factor 0 - Level 70 - HP: 3740 - MP: 1820 +- Factor 0 - Level 80 - HP: 4645 - MP: 2272 +- Factor 0 - Level 90 - HP: 5650 - MP: 2775 +- Factor 0 - Level 99 - HP: 6640 - MP: 3270 +- Factor 4 - Level 1 - HP: 221 - MP: 60 +- Factor 4 - Level 10 - HP: 491 - MP: 195 +- Factor 4 - Level 20 - HP: 988 - MP: 444 +- Factor 4 - Level 30 - HP: 1681 - MP: 790 +- Factor 4 - Level 40 - HP: 2570 - MP: 1235 +- Factor 4 - Level 50 - HP: 3655 - MP: 1777 +- Factor 4 - Level 60 - HP: 4936 - MP: 2418 +- Factor 4 - Level 70 - HP: 6413 - MP: 3156 +- Factor 4 - Level 80 - HP: 8086 - MP: 3993 +- Factor 4 - Level 90 - HP: 9955 - MP: 4927 +- Factor 4 - Level 99 - HP: 11866 - MP: 5883 +- Factor 8 - Level 1 - HP: 221 - MP: 60 +- Factor 8 - Level 10 - HP: 613 - MP: 256 +- Factor 8 - Level 20 - HP: 1360 - MP: 630 +- Factor 8 - Level 30 - HP: 2431 - MP: 1165 +- Factor 8 - Level 40 - HP: 3826 - MP: 1863 +- Factor 8 - Level 50 - HP: 5545 - MP: 2722 +- Factor 8 - Level 60 - HP: 7588 - MP: 3744 +- Factor 8 - Level 70 - HP: 9955 - MP: 4927 +- Factor 8 - Level 80 - HP: 12646 - MP: 6273 +- Factor 8 - Level 90 - HP: 15661 - MP: 7780 +- Factor 8 - Level 99 - HP: 18613 - MP: 9256 +- Factor 12 - Level 1 - HP: 221 - MP: 60 +- Factor 12 - Level 10 - HP: 715 - MP: 307 +- Factor 12 - Level 20 - HP: 1738 - MP: 819 +- Factor 12 - Level 30 - HP: 3245 - MP: 1572 +- Factor 12 - Level 40 - HP: 5236 - MP: 2568 +- Factor 12 - Level 50 - HP: 7711 - MP: 3805 +- Factor 12 - Level 60 - HP: 10670 - MP: 5285 +- Factor 12 - Level 70 - HP: 14113 - MP: 7006 +- Factor 12 - Level 80 - HP: 18040 - MP: 8970 +- Factor 12 - Level 90 - HP: 22451 - MP: 11175 +- Factor 12 - Level 99 - HP: 26881 - MP: 13390 + +## Race 4 +- Factor 0 - Level 1 - HP: 716 - MP: 408 +- Factor 0 - Level 10 - HP: 981 - MP: 682 +- Factor 0 - Level 20 - HP: 1431 - MP: 1177 +- Factor 0 - Level 30 - HP: 2025 - MP: 1872 +- Factor 0 - Level 40 - HP: 2763 - MP: 2767 +- Factor 0 - Level 50 - HP: 3645 - MP: 3862 +- Factor 0 - Level 60 - HP: 4671 - MP: 5157 +- Factor 0 - Level 70 - HP: 5841 - MP: 6652 +- Factor 0 - Level 80 - HP: 7155 - MP: 8347 +- Factor 0 - Level 90 - HP: 8613 - MP: 10242 +- Factor 0 - Level 99 - HP: 10076 - MP: 12119 +- Factor 4 - Level 1 - HP: 716 - MP: 408 +- Factor 4 - Level 10 - HP: 1115 - MP: 744 +- Factor 4 - Level 20 - HP: 1811 - MP: 1398 +- Factor 4 - Level 30 - HP: 2763 - MP: 2340 +- Factor 4 - Level 40 - HP: 3971 - MP: 3570 +- Factor 4 - Level 50 - HP: 5435 - MP: 5088 +- Factor 4 - Level 60 - HP: 7155 - MP: 6894 +- Factor 4 - Level 70 - HP: 9131 - MP: 8988 +- Factor 4 - Level 80 - HP: 11363 - MP: 11370 +- Factor 4 - Level 90 - HP: 13851 - MP: 14040 +- Factor 4 - Level 99 - HP: 16238 - MP: 16740 +- Factor 8 - Level 1 - HP: 716 - MP: 408 +- Factor 8 - Level 10 - HP: 1265 - MP: 833 +- Factor 8 - Level 20 - HP: 2255 - MP: 1680 +- Factor 8 - Level 30 - HP: 3645 - MP: 2919 +- Factor 8 - Level 40 - HP: 5435 - MP: 4550 +- Factor 8 - Level 50 - HP: 7625 - MP: 6573 +- Factor 8 - Level 60 - HP: 10215 - MP: 8988 +- Factor 8 - Level 70 - HP: 13205 - MP: 11795 +- Factor 8 - Level 80 - HP: 16595 - MP: 14994 +- Factor 8 - Level 90 - HP: 20385 - MP: 18585 +- Factor 8 - Level 99 - HP: 24138 - MP: 22122 +- Factor 12 - Level 1 - HP: 716 - MP: 408 +- Factor 12 - Level 10 - HP: 1388 - MP: 905 +- Factor 12 - Level 20 - HP: 2696 - MP: 1953 +- Factor 12 - Level 30 - HP: 4580 - MP: 3513 +- Factor 12 - Level 40 - HP: 7040 - MP: 5585 +- Factor 12 - Level 50 - HP: 10076 - MP: 8169 +- Factor 12 - Level 60 - HP: 13688 - MP: 11265 +- Factor 12 - Level 70 - HP: 17876 - MP: 14873 +- Factor 12 - Level 80 - HP: 22640 - MP: 18993 +- Factor 12 - Level 90 - HP: 27980 - MP: 23625 +- Factor 12 - Level 99 - HP: 33381 - MP: 28265 + +## Race 5 +- Factor 0 - Level 1 - HP: 276 - MP: 38 +- Factor 0 - Level 10 - HP: 395 - MP: 97 +- Factor 0 - Level 20 - HP: 591 - MP: 195 +- Factor 0 - Level 30 - HP: 851 - MP: 325 +- Factor 0 - Level 40 - HP: 1175 - MP: 487 +- Factor 0 - Level 50 - HP: 1563 - MP: 681 +- Factor 0 - Level 60 - HP: 2015 - MP: 907 +- Factor 0 - Level 70 - HP: 2531 - MP: 1165 +- Factor 0 - Level 80 - HP: 3111 - MP: 1455 +- Factor 0 - Level 90 - HP: 3755 - MP: 1777 +- Factor 0 - Level 99 - HP: 4371 - MP: 2085 +- Factor 4 - Level 1 - HP: 276 - MP: 38 +- Factor 4 - Level 10 - HP: 461 - MP: 130 +- Factor 4 - Level 20 - HP: 815 - MP: 307 +- Factor 4 - Level 30 - HP: 1313 - MP: 556 +- Factor 4 - Level 40 - HP: 1955 - MP: 877 +- Factor 4 - Level 50 - HP: 2741 - MP: 1270 +- Factor 4 - Level 60 - HP: 3671 - MP: 1735 +- Factor 4 - Level 70 - HP: 4745 - MP: 2272 +- Factor 4 - Level 80 - HP: 5963 - MP: 2881 +- Factor 4 - Level 90 - HP: 7325 - MP: 3562 +- Factor 4 - Level 99 - HP: 8700 - MP: 4250 +- Factor 8 - Level 1 - HP: 276 - MP: 38 +- Factor 8 - Level 10 - HP: 563 - MP: 181 +- Factor 8 - Level 20 - HP: 1131 - MP: 465 +- Factor 8 - Level 30 - HP: 1955 - MP: 877 +- Factor 8 - Level 40 - HP: 3035 - MP: 1417 +- Factor 8 - Level 50 - HP: 4371 - MP: 2085 +- Factor 8 - Level 60 - HP: 5963 - MP: 2881 +- Factor 8 - Level 70 - HP: 7811 - MP: 3805 +- Factor 8 - Level 80 - HP: 9915 - MP: 4857 +- Factor 8 - Level 90 - HP: 12275 - MP: 6037 +- Factor 8 - Level 99 - HP: 14550 - MP: 7175 +- Factor 12 - Level 1 - HP: 276 - MP: 38 +- Factor 12 - Level 10 - HP: 681 - MP: 240 +- Factor 12 - Level 20 - HP: 1511 - MP: 655 +- Factor 12 - Level 30 - HP: 2741 - MP: 1270 +- Factor 12 - Level 40 - HP: 4371 - MP: 2085 +- Factor 12 - Level 50 - HP: 6401 - MP: 3100 +- Factor 12 - Level 60 - HP: 8831 - MP: 4315 +- Factor 12 - Level 70 - HP: 11661 - MP: 5730 +- Factor 12 - Level 80 - HP: 14891 - MP: 7345 +- Factor 12 - Level 90 - HP: 18521 - MP: 9160 +- Factor 12 - Level 99 - HP: 22130 - MP: 10965 + +## Race 6 +- Factor 0 - Level 1 - HP: 30 - MP: 725 +- Factor 0 - Level 10 - HP: 156 - MP: 1005 +- Factor 0 - Level 20 - HP: 391 - MP: 1432 +- Factor 0 - Level 30 - HP: 726 - MP: 1972 +- Factor 0 - Level 40 - HP: 1161 - MP: 2625 +- Factor 0 - Level 50 - HP: 1696 - MP: 3390 +- Factor 0 - Level 60 - HP: 2331 - MP: 4267 +- Factor 0 - Level 70 - HP: 3066 - MP: 5257 +- Factor 0 - Level 80 - HP: 3901 - MP: 6360 +- Factor 0 - Level 90 - HP: 4836 - MP: 7575 +- Factor 0 - Level 99 - HP: 5763 - MP: 8810 +- Factor 4 - Level 1 - HP: 30 - MP: 725 +- Factor 4 - Level 10 - HP: 216 - MP: 1108 +- Factor 4 - Level 20 - HP: 615 - MP: 1706 +- Factor 4 - Level 30 - HP: 1210 - MP: 2485 +- Factor 4 - Level 40 - HP: 2001 - MP: 3445 +- Factor 4 - Level 50 - HP: 2988 - MP: 4585 +- Factor 4 - Level 60 - HP: 4171 - MP: 5905 +- Factor 4 - Level 70 - HP: 5550 - MP: 7406 +- Factor 4 - Level 80 - HP: 7125 - MP: 9088 +- Factor 4 - Level 90 - HP: 8896 - MP: 10950 +- Factor 4 - Level 99 - HP: 10716 - MP: 12769 +- Factor 8 - Level 1 - HP: 30 - MP: 725 +- Factor 8 - Level 10 - HP: 310 - MP: 1190 +- Factor 8 - Level 20 - HP: 931 - MP: 1972 +- Factor 8 - Level 30 - HP: 1876 - MP: 3019 +- Factor 8 - Level 40 - HP: 3145 - MP: 4330 +- Factor 8 - Level 50 - HP: 4738 - MP: 5905 +- Factor 8 - Level 60 - HP: 6655 - MP: 7745 +- Factor 8 - Level 70 - HP: 8896 - MP: 9850 +- Factor 8 - Level 80 - HP: 11461 - MP: 12219 +- Factor 8 - Level 90 - HP: 14350 - MP: 14852 +- Factor 8 - Level 99 - HP: 17190 - MP: 17488 +- Factor 12 - Level 1 - HP: 30 - MP: 725 +- Factor 12 - Level 10 - HP: 391 - MP: 1307 +- Factor 12 - Level 20 - HP: 1260 - MP: 2306 +- Factor 12 - Level 30 - HP: 2613 - MP: 3670 +- Factor 12 - Level 40 - HP: 4450 - MP: 5398 +- Factor 12 - Level 50 - HP: 6771 - MP: 7490 +- Factor 12 - Level 60 - HP: 9576 - MP: 9947 +- Factor 12 - Level 70 - HP: 12865 - MP: 12769 +- Factor 12 - Level 80 - HP: 16638 - MP: 15955 +- Factor 12 - Level 90 - HP: 20895 - MP: 19505 +- Factor 12 - Level 99 - HP: 25185 - MP: 22967 + +## Race 8 +- Factor 0 - Level 1 - HP: 7 - MP: 4 +- Factor 0 - Level 10 - HP: 7 - MP: 4 +- Factor 0 - Level 20 - HP: 7 - MP: 4 +- Factor 0 - Level 30 - HP: 7 - MP: 4 +- Factor 0 - Level 40 - HP: 7 - MP: 4 +- Factor 0 - Level 50 - HP: 7 - MP: 4 +- Factor 0 - Level 60 - HP: 7 - MP: 4 +- Factor 0 - Level 70 - HP: 7 - MP: 4 +- Factor 0 - Level 80 - HP: 7 - MP: 4 +- Factor 0 - Level 90 - HP: 7 - MP: 4 +- Factor 0 - Level 99 - HP: 7 - MP: 4 +- Factor 4 - Level 1 - HP: 7 - MP: 4 +- Factor 4 - Level 10 - HP: 7 - MP: 4 +- Factor 4 - Level 20 - HP: 7 - MP: 4 +- Factor 4 - Level 30 - HP: 7 - MP: 4 +- Factor 4 - Level 40 - HP: 7 - MP: 4 +- Factor 4 - Level 50 - HP: 7 - MP: 4 +- Factor 4 - Level 60 - HP: 7 - MP: 4 +- Factor 4 - Level 70 - HP: 7 - MP: 4 +- Factor 4 - Level 80 - HP: 7 - MP: 4 +- Factor 4 - Level 90 - HP: 7 - MP: 4 +- Factor 4 - Level 99 - HP: 7 - MP: 4 +- Factor 8 - Level 1 - HP: 7 - MP: 4 +- Factor 8 - Level 10 - HP: 7 - MP: 4 +- Factor 8 - Level 20 - HP: 7 - MP: 4 +- Factor 8 - Level 30 - HP: 7 - MP: 4 +- Factor 8 - Level 40 - HP: 7 - MP: 4 +- Factor 8 - Level 50 - HP: 7 - MP: 4 +- Factor 8 - Level 60 - HP: 7 - MP: 4 +- Factor 8 - Level 70 - HP: 7 - MP: 4 +- Factor 8 - Level 80 - HP: 7 - MP: 4 +- Factor 8 - Level 90 - HP: 7 - MP: 4 +- Factor 8 - Level 99 - HP: 7 - MP: 4 +- Factor 12 - Level 1 - HP: 7 - MP: 4 +- Factor 12 - Level 10 - HP: 7 - MP: 4 +- Factor 12 - Level 20 - HP: 7 - MP: 4 +- Factor 12 - Level 30 - HP: 7 - MP: 4 +- Factor 12 - Level 40 - HP: 7 - MP: 4 +- Factor 12 - Level 50 - HP: 7 - MP: 4 +- Factor 12 - Level 60 - HP: 7 - MP: 4 +- Factor 12 - Level 70 - HP: 7 - MP: 4 +- Factor 12 - Level 80 - HP: 7 - MP: 4 +- Factor 12 - Level 90 - HP: 7 - MP: 4 +- Factor 12 - Level 99 - HP: 7 - MP: 4 diff --git a/src/NosCore.Algorithm/MateHpService/IMateHpService.cs b/src/NosCore.Algorithm/MateHpService/IMateHpService.cs new file mode 100644 index 0000000..51ac8a5 --- /dev/null +++ b/src/NosCore.Algorithm/MateHpService/IMateHpService.cs @@ -0,0 +1,23 @@ +// __ _ __ __ ___ __ ___ ___ +// | \| |/__\ /' _/ / _//__\| _ \ __| +// | | ' | \/ |`._`.| \_| \/ | v / _| +// |_|\__|\__/ |___/ \__/\__/|_|_\___| +// ----------------------------------- + +namespace NosCore.Algorithm.MateHpService +{ + /// + /// Service for calculating the maximum HP of a pet or partner + /// + public interface IMateHpService + { + /// + /// Gets the maximum HP of a pet or partner, before the flat HP its monster entry adds + /// + /// The race of the mate's monster entry + /// The mate level + /// The HP growth factor of the mate's monster entry + /// The HP value + long GetHp(byte race, byte level, short hpFactor); + } +} diff --git a/src/NosCore.Algorithm/MateHpService/MateHpService.cs b/src/NosCore.Algorithm/MateHpService/MateHpService.cs new file mode 100644 index 0000000..39b8c0d --- /dev/null +++ b/src/NosCore.Algorithm/MateHpService/MateHpService.cs @@ -0,0 +1,46 @@ +// __ _ __ __ ___ __ ___ ___ +// | \| |/__\ /' _/ / _//__\| _ \ __| +// | | ' | \/ |`._`.| \_| \/ | v / _| +// |_|\__|\__/ |___/ \__/\__/|_|_\___| +// ----------------------------------- + +using System; + +namespace NosCore.Algorithm.MateHpService +{ + /// + /// Calculates the maximum HP of a pet or partner from its race, level and HP growth factor + /// + public class MateHpService : IMateHpService + { + private const byte FixedRace = 8; + private const long FixedHp = 7; + + /// + /// Per race: the growth added to the factor, the linear term offset and the constant term + /// + private static readonly (int Growth, int Linear, int Constant)[] RaceConstants = + { + (0, 2, 138), + (10, 10, 610), + (5, 0, 105), + (0, 0, 205), + (2, 5, 695), + (-2, -3, 263), + (0, -7, 21), + }; + + /// + public long GetHp(byte race, byte level, short hpFactor) + { + if (race == FixedRace) + { + return FixedHp; + } + + var (growth, linear, constant) = race < RaceConstants.Length ? RaceConstants[race] : (0, 0, 0); + var x = MateLevel.Effective(level, hpFactor + growth, 0); + return (long)Math.Floor((0.5 * x * x) + ((15.5 + linear) * x) + constant); + } + } +} diff --git a/src/NosCore.Algorithm/MateHpService/MateLevel.cs b/src/NosCore.Algorithm/MateHpService/MateLevel.cs new file mode 100644 index 0000000..667534f --- /dev/null +++ b/src/NosCore.Algorithm/MateHpService/MateLevel.cs @@ -0,0 +1,24 @@ +// __ _ __ __ ___ __ ___ ___ +// | \| |/__\ /' _/ / _//__\| _ \ __| +// | | ' | \/ |`._`.| \_| \/ | v / _| +// |_|\__|\__/ |___/ \__/\__/|_|_\___| +// ----------------------------------- + +using System; + +namespace NosCore.Algorithm.MateHpService +{ + internal static class MateLevel + { + // A mate's growth factor makes it gain one extra level every 10 / factor levels. + internal static int Effective(byte level, int factor, int bonus) + { + if (factor == 0) + { + return level; + } + + return level + (int)Math.Floor(((level - 1) / (10.0 / factor)) + bonus); + } + } +} diff --git a/src/NosCore.Algorithm/MateMpService/IMateMpService.cs b/src/NosCore.Algorithm/MateMpService/IMateMpService.cs new file mode 100644 index 0000000..04a4d52 --- /dev/null +++ b/src/NosCore.Algorithm/MateMpService/IMateMpService.cs @@ -0,0 +1,23 @@ +// __ _ __ __ ___ __ ___ ___ +// | \| |/__\ /' _/ / _//__\| _ \ __| +// | | ' | \/ |`._`.| \_| \/ | v / _| +// |_|\__|\__/ |___/ \__/\__/|_|_\___| +// ----------------------------------- + +namespace NosCore.Algorithm.MateMpService +{ + /// + /// Service for calculating the maximum MP of a pet or partner + /// + public interface IMateMpService + { + /// + /// Gets the maximum MP of a pet or partner, before the flat MP its monster entry adds + /// + /// The race of the mate's monster entry + /// The mate level + /// The MP growth factor of the mate's monster entry + /// The MP value + long GetMp(byte race, byte level, short mpFactor); + } +} diff --git a/src/NosCore.Algorithm/MateMpService/MateMpService.cs b/src/NosCore.Algorithm/MateMpService/MateMpService.cs new file mode 100644 index 0000000..aaa9396 --- /dev/null +++ b/src/NosCore.Algorithm/MateMpService/MateMpService.cs @@ -0,0 +1,52 @@ +// __ _ __ __ ___ __ ___ ___ +// | \| |/__\ /' _/ / _//__\| _ \ __| +// | | ' | \/ |`._`.| \_| \/ | v / _| +// |_|\__|\__/ |___/ \__/\__/|_|_\___| +// ----------------------------------- + +using System; +using NosCore.Algorithm.MateHpService; + +namespace NosCore.Algorithm.MateMpService +{ + /// + /// Calculates the maximum MP of a pet or partner from its race, level and MP growth factor + /// + public class MateMpService : IMateMpService + { + private const byte FixedRace = 8; + private const long FixedMp = 4; + + /// + /// Per race: the constant term, the growth added to the factor, the linear term offset + /// and the extra level the factor gives + /// + private static readonly (double Constant, int Growth, int Linear, int Bonus)[] RaceConstants = + { + (4.75, 0, 0, 0), + (178.75, 10, 8, 0), + (50.75, -2, 4, 0), + (50.75, 0, 4, 0), + (385.75, 10, 6, 1), + (23.75, -2, 2, 1), + (705.75, 5, 14, 0), + }; + + /// + public long GetMp(byte race, byte level, short mpFactor) + { + if (race == FixedRace) + { + return FixedMp; + } + + var (constant, growth, linear, bonus) = race < RaceConstants.Length ? RaceConstants[race] : (0, 0, 0, 0); + var x = MateLevel.Effective(level, mpFactor + growth, bonus); + var steps = Math.Floor((x - 6) / 4.0); + var mp = Math.Floor(((5.25 + linear) * x) + constant) + ((steps + 1) * 2 * (PositiveModulo(x - 2, 4) + 1 + (steps * 2))); + return (long)Math.Floor(mp); + } + + private static int PositiveModulo(int value, int modulo) => ((value % modulo) + modulo) % modulo; + } +} diff --git a/test/NosCore.Algorithm.Tests/DocumentationTest.cs b/test/NosCore.Algorithm.Tests/DocumentationTest.cs index d945be1..777e3d4 100644 --- a/test/NosCore.Algorithm.Tests/DocumentationTest.cs +++ b/test/NosCore.Algorithm.Tests/DocumentationTest.cs @@ -755,6 +755,40 @@ public void SpecialistPointDocumentation() Assert.IsTrue(specialistPointService.GetHpMpLevel(points) >= specialistPointService.GetHpMpLevel((short)(points - 1))); } + Approvals.Verify(WriterFactory.CreateTextWriter(resultBuilder.ToString(), "md")); + } + [TestMethod] + public void MateHpMpDocumentation() + { + var hpService = new MateHpService.MateHpService(); + var mpService = new MateMpService.MateMpService(); + + // Recorded pets: a race 3 partner with factors 8 and 6 shows 2165/877 at level 28, a race + // 2 pet with factors 12 and 0 shows 10638/708 at level 48 once its flat 500 HP is added. + Assert.AreEqual(2165, hpService.GetHp(3, 28, 8)); + Assert.AreEqual(877, mpService.GetMp(3, 28, 6)); + Assert.AreEqual(10638, hpService.GetHp(2, 48, 12) + 500); + Assert.AreEqual(708, mpService.GetMp(2, 48, 0)); + + var resultBuilder = new StringBuilder("# Mate HP/MP Table"); + resultBuilder.AppendLine(); + byte[] races = { 0, 1, 2, 3, 4, 5, 6, 8 }; + short[] factors = { 0, 4, 8, 12 }; + byte[] levels = { 1, 10, 20, 30, 40, 50, 60, 70, 80, 90, 99 }; + foreach (var race in races) + { + resultBuilder.AppendLine(); + resultBuilder.AppendLine($"## Race {race}"); + foreach (var factor in factors) + { + foreach (var level in levels) + { + resultBuilder.AppendLine( + $"- Factor {factor,2} - Level {level,2} - HP: {hpService.GetHp(race, level, factor)} - MP: {mpService.GetMp(race, level, factor)}"); + } + } + } + Approvals.Verify(WriterFactory.CreateTextWriter(resultBuilder.ToString(), "md")); } }