diff --git a/documentation/DocumentationTest.RecoveryRateDocumentation.approved.md b/documentation/DocumentationTest.RecoveryRateDocumentation.approved.md
new file mode 100644
index 0000000..eadb266
--- /dev/null
+++ b/documentation/DocumentationTest.RecoveryRateDocumentation.approved.md
@@ -0,0 +1,501 @@
+# Recovery Rate Table
+## Adventurer - Resting HP: 30 - Resting MP: 10
+- Level 1 - Standing HP: 15 - Standing MP: 5
+- Level 2 - Standing HP: 15 - Standing MP: 5
+- Level 3 - Standing HP: 15 - Standing MP: 5
+- Level 4 - Standing HP: 15 - Standing MP: 5
+- Level 5 - Standing HP: 15 - Standing MP: 5
+- Level 6 - Standing HP: 15 - Standing MP: 5
+- Level 7 - Standing HP: 15 - Standing MP: 5
+- Level 8 - Standing HP: 15 - Standing MP: 5
+- Level 9 - Standing HP: 15 - Standing MP: 5
+- Level 10 - Standing HP: 15 - Standing MP: 5
+- Level 11 - Standing HP: 15 - Standing MP: 5
+- Level 12 - Standing HP: 15 - Standing MP: 5
+- Level 13 - Standing HP: 15 - Standing MP: 5
+- Level 14 - Standing HP: 15 - Standing MP: 5
+- Level 15 - Standing HP: 15 - Standing MP: 5
+- Level 16 - Standing HP: 15 - Standing MP: 5
+- Level 17 - Standing HP: 15 - Standing MP: 5
+- Level 18 - Standing HP: 15 - Standing MP: 5
+- Level 19 - Standing HP: 15 - Standing MP: 5
+- Level 20 - Standing HP: 15 - Standing MP: 5
+- Level 21 - Standing HP: 12 - Standing MP: 4
+- Level 22 - Standing HP: 12 - Standing MP: 4
+- Level 23 - Standing HP: 12 - Standing MP: 4
+- Level 24 - Standing HP: 12 - Standing MP: 4
+- Level 25 - Standing HP: 12 - Standing MP: 4
+- Level 26 - Standing HP: 12 - Standing MP: 4
+- Level 27 - Standing HP: 12 - Standing MP: 4
+- Level 28 - Standing HP: 12 - Standing MP: 4
+- Level 29 - Standing HP: 12 - Standing MP: 4
+- Level 30 - Standing HP: 12 - Standing MP: 4
+- Level 31 - Standing HP: 12 - Standing MP: 4
+- Level 32 - Standing HP: 12 - Standing MP: 4
+- Level 33 - Standing HP: 12 - Standing MP: 4
+- Level 34 - Standing HP: 12 - Standing MP: 4
+- Level 35 - Standing HP: 12 - Standing MP: 4
+- Level 36 - Standing HP: 12 - Standing MP: 4
+- Level 37 - Standing HP: 12 - Standing MP: 4
+- Level 38 - Standing HP: 12 - Standing MP: 4
+- Level 39 - Standing HP: 12 - Standing MP: 4
+- Level 40 - Standing HP: 12 - Standing MP: 4
+- Level 41 - Standing HP: 9 - Standing MP: 3
+- Level 42 - Standing HP: 9 - Standing MP: 3
+- Level 43 - Standing HP: 9 - Standing MP: 3
+- Level 44 - Standing HP: 9 - Standing MP: 3
+- Level 45 - Standing HP: 9 - Standing MP: 3
+- Level 46 - Standing HP: 9 - Standing MP: 3
+- Level 47 - Standing HP: 9 - Standing MP: 3
+- Level 48 - Standing HP: 9 - Standing MP: 3
+- Level 49 - Standing HP: 9 - Standing MP: 3
+- Level 50 - Standing HP: 9 - Standing MP: 3
+- Level 51 - Standing HP: 9 - Standing MP: 3
+- Level 52 - Standing HP: 9 - Standing MP: 3
+- Level 53 - Standing HP: 9 - Standing MP: 3
+- Level 54 - Standing HP: 9 - Standing MP: 3
+- Level 55 - Standing HP: 9 - Standing MP: 3
+- Level 56 - Standing HP: 9 - Standing MP: 3
+- Level 57 - Standing HP: 9 - Standing MP: 3
+- Level 58 - Standing HP: 9 - Standing MP: 3
+- Level 59 - Standing HP: 9 - Standing MP: 3
+- Level 60 - Standing HP: 9 - Standing MP: 3
+- Level 61 - Standing HP: 6 - Standing MP: 2
+- Level 62 - Standing HP: 6 - Standing MP: 2
+- Level 63 - Standing HP: 6 - Standing MP: 2
+- Level 64 - Standing HP: 6 - Standing MP: 2
+- Level 65 - Standing HP: 6 - Standing MP: 2
+- Level 66 - Standing HP: 6 - Standing MP: 2
+- Level 67 - Standing HP: 6 - Standing MP: 2
+- Level 68 - Standing HP: 6 - Standing MP: 2
+- Level 69 - Standing HP: 6 - Standing MP: 2
+- Level 70 - Standing HP: 6 - Standing MP: 2
+- Level 71 - Standing HP: 6 - Standing MP: 2
+- Level 72 - Standing HP: 6 - Standing MP: 2
+- Level 73 - Standing HP: 6 - Standing MP: 2
+- Level 74 - Standing HP: 6 - Standing MP: 2
+- Level 75 - Standing HP: 6 - Standing MP: 2
+- Level 76 - Standing HP: 6 - Standing MP: 2
+- Level 77 - Standing HP: 6 - Standing MP: 2
+- Level 78 - Standing HP: 6 - Standing MP: 2
+- Level 79 - Standing HP: 6 - Standing MP: 2
+- Level 80 - Standing HP: 6 - Standing MP: 2
+- Level 81 - Standing HP: 6 - Standing MP: 2
+- Level 82 - Standing HP: 6 - Standing MP: 2
+- Level 83 - Standing HP: 6 - Standing MP: 2
+- Level 84 - Standing HP: 6 - Standing MP: 2
+- Level 85 - Standing HP: 6 - Standing MP: 2
+- Level 86 - Standing HP: 6 - Standing MP: 2
+- Level 87 - Standing HP: 6 - Standing MP: 2
+- Level 88 - Standing HP: 6 - Standing MP: 2
+- Level 89 - Standing HP: 6 - Standing MP: 2
+- Level 90 - Standing HP: 6 - Standing MP: 2
+- Level 91 - Standing HP: 6 - Standing MP: 2
+- Level 92 - Standing HP: 6 - Standing MP: 2
+- Level 93 - Standing HP: 6 - Standing MP: 2
+- Level 94 - Standing HP: 6 - Standing MP: 2
+- Level 95 - Standing HP: 6 - Standing MP: 2
+- Level 96 - Standing HP: 6 - Standing MP: 2
+- Level 97 - Standing HP: 6 - Standing MP: 2
+- Level 98 - Standing HP: 6 - Standing MP: 2
+- Level 99 - Standing HP: 6 - Standing MP: 2
+## Swordsman - Resting HP: 80 - Resting MP: 30
+- Level 1 - Standing HP: 40 - Standing MP: 15
+- Level 2 - Standing HP: 40 - Standing MP: 15
+- Level 3 - Standing HP: 40 - Standing MP: 15
+- Level 4 - Standing HP: 40 - Standing MP: 15
+- Level 5 - Standing HP: 40 - Standing MP: 15
+- Level 6 - Standing HP: 40 - Standing MP: 15
+- Level 7 - Standing HP: 40 - Standing MP: 15
+- Level 8 - Standing HP: 40 - Standing MP: 15
+- Level 9 - Standing HP: 40 - Standing MP: 15
+- Level 10 - Standing HP: 40 - Standing MP: 15
+- Level 11 - Standing HP: 40 - Standing MP: 15
+- Level 12 - Standing HP: 40 - Standing MP: 15
+- Level 13 - Standing HP: 40 - Standing MP: 15
+- Level 14 - Standing HP: 40 - Standing MP: 15
+- Level 15 - Standing HP: 40 - Standing MP: 15
+- Level 16 - Standing HP: 40 - Standing MP: 15
+- Level 17 - Standing HP: 40 - Standing MP: 15
+- Level 18 - Standing HP: 40 - Standing MP: 15
+- Level 19 - Standing HP: 40 - Standing MP: 15
+- Level 20 - Standing HP: 40 - Standing MP: 15
+- Level 21 - Standing HP: 32 - Standing MP: 12
+- Level 22 - Standing HP: 32 - Standing MP: 12
+- Level 23 - Standing HP: 32 - Standing MP: 12
+- Level 24 - Standing HP: 32 - Standing MP: 12
+- Level 25 - Standing HP: 32 - Standing MP: 12
+- Level 26 - Standing HP: 32 - Standing MP: 12
+- Level 27 - Standing HP: 32 - Standing MP: 12
+- Level 28 - Standing HP: 32 - Standing MP: 12
+- Level 29 - Standing HP: 32 - Standing MP: 12
+- Level 30 - Standing HP: 32 - Standing MP: 12
+- Level 31 - Standing HP: 32 - Standing MP: 12
+- Level 32 - Standing HP: 32 - Standing MP: 12
+- Level 33 - Standing HP: 32 - Standing MP: 12
+- Level 34 - Standing HP: 32 - Standing MP: 12
+- Level 35 - Standing HP: 32 - Standing MP: 12
+- Level 36 - Standing HP: 32 - Standing MP: 12
+- Level 37 - Standing HP: 32 - Standing MP: 12
+- Level 38 - Standing HP: 32 - Standing MP: 12
+- Level 39 - Standing HP: 32 - Standing MP: 12
+- Level 40 - Standing HP: 32 - Standing MP: 12
+- Level 41 - Standing HP: 24 - Standing MP: 9
+- Level 42 - Standing HP: 24 - Standing MP: 9
+- Level 43 - Standing HP: 24 - Standing MP: 9
+- Level 44 - Standing HP: 24 - Standing MP: 9
+- Level 45 - Standing HP: 24 - Standing MP: 9
+- Level 46 - Standing HP: 24 - Standing MP: 9
+- Level 47 - Standing HP: 24 - Standing MP: 9
+- Level 48 - Standing HP: 24 - Standing MP: 9
+- Level 49 - Standing HP: 24 - Standing MP: 9
+- Level 50 - Standing HP: 24 - Standing MP: 9
+- Level 51 - Standing HP: 24 - Standing MP: 9
+- Level 52 - Standing HP: 24 - Standing MP: 9
+- Level 53 - Standing HP: 24 - Standing MP: 9
+- Level 54 - Standing HP: 24 - Standing MP: 9
+- Level 55 - Standing HP: 24 - Standing MP: 9
+- Level 56 - Standing HP: 24 - Standing MP: 9
+- Level 57 - Standing HP: 24 - Standing MP: 9
+- Level 58 - Standing HP: 24 - Standing MP: 9
+- Level 59 - Standing HP: 24 - Standing MP: 9
+- Level 60 - Standing HP: 24 - Standing MP: 9
+- Level 61 - Standing HP: 16 - Standing MP: 6
+- Level 62 - Standing HP: 16 - Standing MP: 6
+- Level 63 - Standing HP: 16 - Standing MP: 6
+- Level 64 - Standing HP: 16 - Standing MP: 6
+- Level 65 - Standing HP: 16 - Standing MP: 6
+- Level 66 - Standing HP: 16 - Standing MP: 6
+- Level 67 - Standing HP: 16 - Standing MP: 6
+- Level 68 - Standing HP: 16 - Standing MP: 6
+- Level 69 - Standing HP: 16 - Standing MP: 6
+- Level 70 - Standing HP: 16 - Standing MP: 6
+- Level 71 - Standing HP: 16 - Standing MP: 6
+- Level 72 - Standing HP: 16 - Standing MP: 6
+- Level 73 - Standing HP: 16 - Standing MP: 6
+- Level 74 - Standing HP: 16 - Standing MP: 6
+- Level 75 - Standing HP: 16 - Standing MP: 6
+- Level 76 - Standing HP: 16 - Standing MP: 6
+- Level 77 - Standing HP: 16 - Standing MP: 6
+- Level 78 - Standing HP: 16 - Standing MP: 6
+- Level 79 - Standing HP: 16 - Standing MP: 6
+- Level 80 - Standing HP: 16 - Standing MP: 6
+- Level 81 - Standing HP: 16 - Standing MP: 6
+- Level 82 - Standing HP: 16 - Standing MP: 6
+- Level 83 - Standing HP: 16 - Standing MP: 6
+- Level 84 - Standing HP: 16 - Standing MP: 6
+- Level 85 - Standing HP: 16 - Standing MP: 6
+- Level 86 - Standing HP: 16 - Standing MP: 6
+- Level 87 - Standing HP: 16 - Standing MP: 6
+- Level 88 - Standing HP: 16 - Standing MP: 6
+- Level 89 - Standing HP: 16 - Standing MP: 6
+- Level 90 - Standing HP: 16 - Standing MP: 6
+- Level 91 - Standing HP: 16 - Standing MP: 6
+- Level 92 - Standing HP: 16 - Standing MP: 6
+- Level 93 - Standing HP: 16 - Standing MP: 6
+- Level 94 - Standing HP: 16 - Standing MP: 6
+- Level 95 - Standing HP: 16 - Standing MP: 6
+- Level 96 - Standing HP: 16 - Standing MP: 6
+- Level 97 - Standing HP: 16 - Standing MP: 6
+- Level 98 - Standing HP: 16 - Standing MP: 6
+- Level 99 - Standing HP: 16 - Standing MP: 6
+## Archer - Resting HP: 60 - Resting MP: 50
+- Level 1 - Standing HP: 30 - Standing MP: 25
+- Level 2 - Standing HP: 30 - Standing MP: 25
+- Level 3 - Standing HP: 30 - Standing MP: 25
+- Level 4 - Standing HP: 30 - Standing MP: 25
+- Level 5 - Standing HP: 30 - Standing MP: 25
+- Level 6 - Standing HP: 30 - Standing MP: 25
+- Level 7 - Standing HP: 30 - Standing MP: 25
+- Level 8 - Standing HP: 30 - Standing MP: 25
+- Level 9 - Standing HP: 30 - Standing MP: 25
+- Level 10 - Standing HP: 30 - Standing MP: 25
+- Level 11 - Standing HP: 30 - Standing MP: 25
+- Level 12 - Standing HP: 30 - Standing MP: 25
+- Level 13 - Standing HP: 30 - Standing MP: 25
+- Level 14 - Standing HP: 30 - Standing MP: 25
+- Level 15 - Standing HP: 30 - Standing MP: 25
+- Level 16 - Standing HP: 30 - Standing MP: 25
+- Level 17 - Standing HP: 30 - Standing MP: 25
+- Level 18 - Standing HP: 30 - Standing MP: 25
+- Level 19 - Standing HP: 30 - Standing MP: 25
+- Level 20 - Standing HP: 30 - Standing MP: 25
+- Level 21 - Standing HP: 24 - Standing MP: 20
+- Level 22 - Standing HP: 24 - Standing MP: 20
+- Level 23 - Standing HP: 24 - Standing MP: 20
+- Level 24 - Standing HP: 24 - Standing MP: 20
+- Level 25 - Standing HP: 24 - Standing MP: 20
+- Level 26 - Standing HP: 24 - Standing MP: 20
+- Level 27 - Standing HP: 24 - Standing MP: 20
+- Level 28 - Standing HP: 24 - Standing MP: 20
+- Level 29 - Standing HP: 24 - Standing MP: 20
+- Level 30 - Standing HP: 24 - Standing MP: 20
+- Level 31 - Standing HP: 24 - Standing MP: 20
+- Level 32 - Standing HP: 24 - Standing MP: 20
+- Level 33 - Standing HP: 24 - Standing MP: 20
+- Level 34 - Standing HP: 24 - Standing MP: 20
+- Level 35 - Standing HP: 24 - Standing MP: 20
+- Level 36 - Standing HP: 24 - Standing MP: 20
+- Level 37 - Standing HP: 24 - Standing MP: 20
+- Level 38 - Standing HP: 24 - Standing MP: 20
+- Level 39 - Standing HP: 24 - Standing MP: 20
+- Level 40 - Standing HP: 24 - Standing MP: 20
+- Level 41 - Standing HP: 18 - Standing MP: 15
+- Level 42 - Standing HP: 18 - Standing MP: 15
+- Level 43 - Standing HP: 18 - Standing MP: 15
+- Level 44 - Standing HP: 18 - Standing MP: 15
+- Level 45 - Standing HP: 18 - Standing MP: 15
+- Level 46 - Standing HP: 18 - Standing MP: 15
+- Level 47 - Standing HP: 18 - Standing MP: 15
+- Level 48 - Standing HP: 18 - Standing MP: 15
+- Level 49 - Standing HP: 18 - Standing MP: 15
+- Level 50 - Standing HP: 18 - Standing MP: 15
+- Level 51 - Standing HP: 18 - Standing MP: 15
+- Level 52 - Standing HP: 18 - Standing MP: 15
+- Level 53 - Standing HP: 18 - Standing MP: 15
+- Level 54 - Standing HP: 18 - Standing MP: 15
+- Level 55 - Standing HP: 18 - Standing MP: 15
+- Level 56 - Standing HP: 18 - Standing MP: 15
+- Level 57 - Standing HP: 18 - Standing MP: 15
+- Level 58 - Standing HP: 18 - Standing MP: 15
+- Level 59 - Standing HP: 18 - Standing MP: 15
+- Level 60 - Standing HP: 18 - Standing MP: 15
+- Level 61 - Standing HP: 12 - Standing MP: 10
+- Level 62 - Standing HP: 12 - Standing MP: 10
+- Level 63 - Standing HP: 12 - Standing MP: 10
+- Level 64 - Standing HP: 12 - Standing MP: 10
+- Level 65 - Standing HP: 12 - Standing MP: 10
+- Level 66 - Standing HP: 12 - Standing MP: 10
+- Level 67 - Standing HP: 12 - Standing MP: 10
+- Level 68 - Standing HP: 12 - Standing MP: 10
+- Level 69 - Standing HP: 12 - Standing MP: 10
+- Level 70 - Standing HP: 12 - Standing MP: 10
+- Level 71 - Standing HP: 12 - Standing MP: 10
+- Level 72 - Standing HP: 12 - Standing MP: 10
+- Level 73 - Standing HP: 12 - Standing MP: 10
+- Level 74 - Standing HP: 12 - Standing MP: 10
+- Level 75 - Standing HP: 12 - Standing MP: 10
+- Level 76 - Standing HP: 12 - Standing MP: 10
+- Level 77 - Standing HP: 12 - Standing MP: 10
+- Level 78 - Standing HP: 12 - Standing MP: 10
+- Level 79 - Standing HP: 12 - Standing MP: 10
+- Level 80 - Standing HP: 12 - Standing MP: 10
+- Level 81 - Standing HP: 12 - Standing MP: 10
+- Level 82 - Standing HP: 12 - Standing MP: 10
+- Level 83 - Standing HP: 12 - Standing MP: 10
+- Level 84 - Standing HP: 12 - Standing MP: 10
+- Level 85 - Standing HP: 12 - Standing MP: 10
+- Level 86 - Standing HP: 12 - Standing MP: 10
+- Level 87 - Standing HP: 12 - Standing MP: 10
+- Level 88 - Standing HP: 12 - Standing MP: 10
+- Level 89 - Standing HP: 12 - Standing MP: 10
+- Level 90 - Standing HP: 12 - Standing MP: 10
+- Level 91 - Standing HP: 12 - Standing MP: 10
+- Level 92 - Standing HP: 12 - Standing MP: 10
+- Level 93 - Standing HP: 12 - Standing MP: 10
+- Level 94 - Standing HP: 12 - Standing MP: 10
+- Level 95 - Standing HP: 12 - Standing MP: 10
+- Level 96 - Standing HP: 12 - Standing MP: 10
+- Level 97 - Standing HP: 12 - Standing MP: 10
+- Level 98 - Standing HP: 12 - Standing MP: 10
+- Level 99 - Standing HP: 12 - Standing MP: 10
+## Mage - Resting HP: 30 - Resting MP: 80
+- Level 1 - Standing HP: 15 - Standing MP: 40
+- Level 2 - Standing HP: 15 - Standing MP: 40
+- Level 3 - Standing HP: 15 - Standing MP: 40
+- Level 4 - Standing HP: 15 - Standing MP: 40
+- Level 5 - Standing HP: 15 - Standing MP: 40
+- Level 6 - Standing HP: 15 - Standing MP: 40
+- Level 7 - Standing HP: 15 - Standing MP: 40
+- Level 8 - Standing HP: 15 - Standing MP: 40
+- Level 9 - Standing HP: 15 - Standing MP: 40
+- Level 10 - Standing HP: 15 - Standing MP: 40
+- Level 11 - Standing HP: 15 - Standing MP: 40
+- Level 12 - Standing HP: 15 - Standing MP: 40
+- Level 13 - Standing HP: 15 - Standing MP: 40
+- Level 14 - Standing HP: 15 - Standing MP: 40
+- Level 15 - Standing HP: 15 - Standing MP: 40
+- Level 16 - Standing HP: 15 - Standing MP: 40
+- Level 17 - Standing HP: 15 - Standing MP: 40
+- Level 18 - Standing HP: 15 - Standing MP: 40
+- Level 19 - Standing HP: 15 - Standing MP: 40
+- Level 20 - Standing HP: 15 - Standing MP: 40
+- Level 21 - Standing HP: 12 - Standing MP: 32
+- Level 22 - Standing HP: 12 - Standing MP: 32
+- Level 23 - Standing HP: 12 - Standing MP: 32
+- Level 24 - Standing HP: 12 - Standing MP: 32
+- Level 25 - Standing HP: 12 - Standing MP: 32
+- Level 26 - Standing HP: 12 - Standing MP: 32
+- Level 27 - Standing HP: 12 - Standing MP: 32
+- Level 28 - Standing HP: 12 - Standing MP: 32
+- Level 29 - Standing HP: 12 - Standing MP: 32
+- Level 30 - Standing HP: 12 - Standing MP: 32
+- Level 31 - Standing HP: 12 - Standing MP: 32
+- Level 32 - Standing HP: 12 - Standing MP: 32
+- Level 33 - Standing HP: 12 - Standing MP: 32
+- Level 34 - Standing HP: 12 - Standing MP: 32
+- Level 35 - Standing HP: 12 - Standing MP: 32
+- Level 36 - Standing HP: 12 - Standing MP: 32
+- Level 37 - Standing HP: 12 - Standing MP: 32
+- Level 38 - Standing HP: 12 - Standing MP: 32
+- Level 39 - Standing HP: 12 - Standing MP: 32
+- Level 40 - Standing HP: 12 - Standing MP: 32
+- Level 41 - Standing HP: 9 - Standing MP: 24
+- Level 42 - Standing HP: 9 - Standing MP: 24
+- Level 43 - Standing HP: 9 - Standing MP: 24
+- Level 44 - Standing HP: 9 - Standing MP: 24
+- Level 45 - Standing HP: 9 - Standing MP: 24
+- Level 46 - Standing HP: 9 - Standing MP: 24
+- Level 47 - Standing HP: 9 - Standing MP: 24
+- Level 48 - Standing HP: 9 - Standing MP: 24
+- Level 49 - Standing HP: 9 - Standing MP: 24
+- Level 50 - Standing HP: 9 - Standing MP: 24
+- Level 51 - Standing HP: 9 - Standing MP: 24
+- Level 52 - Standing HP: 9 - Standing MP: 24
+- Level 53 - Standing HP: 9 - Standing MP: 24
+- Level 54 - Standing HP: 9 - Standing MP: 24
+- Level 55 - Standing HP: 9 - Standing MP: 24
+- Level 56 - Standing HP: 9 - Standing MP: 24
+- Level 57 - Standing HP: 9 - Standing MP: 24
+- Level 58 - Standing HP: 9 - Standing MP: 24
+- Level 59 - Standing HP: 9 - Standing MP: 24
+- Level 60 - Standing HP: 9 - Standing MP: 24
+- Level 61 - Standing HP: 6 - Standing MP: 16
+- Level 62 - Standing HP: 6 - Standing MP: 16
+- Level 63 - Standing HP: 6 - Standing MP: 16
+- Level 64 - Standing HP: 6 - Standing MP: 16
+- Level 65 - Standing HP: 6 - Standing MP: 16
+- Level 66 - Standing HP: 6 - Standing MP: 16
+- Level 67 - Standing HP: 6 - Standing MP: 16
+- Level 68 - Standing HP: 6 - Standing MP: 16
+- Level 69 - Standing HP: 6 - Standing MP: 16
+- Level 70 - Standing HP: 6 - Standing MP: 16
+- Level 71 - Standing HP: 6 - Standing MP: 16
+- Level 72 - Standing HP: 6 - Standing MP: 16
+- Level 73 - Standing HP: 6 - Standing MP: 16
+- Level 74 - Standing HP: 6 - Standing MP: 16
+- Level 75 - Standing HP: 6 - Standing MP: 16
+- Level 76 - Standing HP: 6 - Standing MP: 16
+- Level 77 - Standing HP: 6 - Standing MP: 16
+- Level 78 - Standing HP: 6 - Standing MP: 16
+- Level 79 - Standing HP: 6 - Standing MP: 16
+- Level 80 - Standing HP: 6 - Standing MP: 16
+- Level 81 - Standing HP: 6 - Standing MP: 16
+- Level 82 - Standing HP: 6 - Standing MP: 16
+- Level 83 - Standing HP: 6 - Standing MP: 16
+- Level 84 - Standing HP: 6 - Standing MP: 16
+- Level 85 - Standing HP: 6 - Standing MP: 16
+- Level 86 - Standing HP: 6 - Standing MP: 16
+- Level 87 - Standing HP: 6 - Standing MP: 16
+- Level 88 - Standing HP: 6 - Standing MP: 16
+- Level 89 - Standing HP: 6 - Standing MP: 16
+- Level 90 - Standing HP: 6 - Standing MP: 16
+- Level 91 - Standing HP: 6 - Standing MP: 16
+- Level 92 - Standing HP: 6 - Standing MP: 16
+- Level 93 - Standing HP: 6 - Standing MP: 16
+- Level 94 - Standing HP: 6 - Standing MP: 16
+- Level 95 - Standing HP: 6 - Standing MP: 16
+- Level 96 - Standing HP: 6 - Standing MP: 16
+- Level 97 - Standing HP: 6 - Standing MP: 16
+- Level 98 - Standing HP: 6 - Standing MP: 16
+- Level 99 - Standing HP: 6 - Standing MP: 16
+## MartialArtist - Resting HP: 70 - Resting MP: 40
+- Level 1 - Standing HP: 35 - Standing MP: 20
+- Level 2 - Standing HP: 35 - Standing MP: 20
+- Level 3 - Standing HP: 35 - Standing MP: 20
+- Level 4 - Standing HP: 35 - Standing MP: 20
+- Level 5 - Standing HP: 35 - Standing MP: 20
+- Level 6 - Standing HP: 35 - Standing MP: 20
+- Level 7 - Standing HP: 35 - Standing MP: 20
+- Level 8 - Standing HP: 35 - Standing MP: 20
+- Level 9 - Standing HP: 35 - Standing MP: 20
+- Level 10 - Standing HP: 35 - Standing MP: 20
+- Level 11 - Standing HP: 35 - Standing MP: 20
+- Level 12 - Standing HP: 35 - Standing MP: 20
+- Level 13 - Standing HP: 35 - Standing MP: 20
+- Level 14 - Standing HP: 35 - Standing MP: 20
+- Level 15 - Standing HP: 35 - Standing MP: 20
+- Level 16 - Standing HP: 35 - Standing MP: 20
+- Level 17 - Standing HP: 35 - Standing MP: 20
+- Level 18 - Standing HP: 35 - Standing MP: 20
+- Level 19 - Standing HP: 35 - Standing MP: 20
+- Level 20 - Standing HP: 35 - Standing MP: 20
+- Level 21 - Standing HP: 28 - Standing MP: 16
+- Level 22 - Standing HP: 28 - Standing MP: 16
+- Level 23 - Standing HP: 28 - Standing MP: 16
+- Level 24 - Standing HP: 28 - Standing MP: 16
+- Level 25 - Standing HP: 28 - Standing MP: 16
+- Level 26 - Standing HP: 28 - Standing MP: 16
+- Level 27 - Standing HP: 28 - Standing MP: 16
+- Level 28 - Standing HP: 28 - Standing MP: 16
+- Level 29 - Standing HP: 28 - Standing MP: 16
+- Level 30 - Standing HP: 28 - Standing MP: 16
+- Level 31 - Standing HP: 28 - Standing MP: 16
+- Level 32 - Standing HP: 28 - Standing MP: 16
+- Level 33 - Standing HP: 28 - Standing MP: 16
+- Level 34 - Standing HP: 28 - Standing MP: 16
+- Level 35 - Standing HP: 28 - Standing MP: 16
+- Level 36 - Standing HP: 28 - Standing MP: 16
+- Level 37 - Standing HP: 28 - Standing MP: 16
+- Level 38 - Standing HP: 28 - Standing MP: 16
+- Level 39 - Standing HP: 28 - Standing MP: 16
+- Level 40 - Standing HP: 28 - Standing MP: 16
+- Level 41 - Standing HP: 21 - Standing MP: 12
+- Level 42 - Standing HP: 21 - Standing MP: 12
+- Level 43 - Standing HP: 21 - Standing MP: 12
+- Level 44 - Standing HP: 21 - Standing MP: 12
+- Level 45 - Standing HP: 21 - Standing MP: 12
+- Level 46 - Standing HP: 21 - Standing MP: 12
+- Level 47 - Standing HP: 21 - Standing MP: 12
+- Level 48 - Standing HP: 21 - Standing MP: 12
+- Level 49 - Standing HP: 21 - Standing MP: 12
+- Level 50 - Standing HP: 21 - Standing MP: 12
+- Level 51 - Standing HP: 21 - Standing MP: 12
+- Level 52 - Standing HP: 21 - Standing MP: 12
+- Level 53 - Standing HP: 21 - Standing MP: 12
+- Level 54 - Standing HP: 21 - Standing MP: 12
+- Level 55 - Standing HP: 21 - Standing MP: 12
+- Level 56 - Standing HP: 21 - Standing MP: 12
+- Level 57 - Standing HP: 21 - Standing MP: 12
+- Level 58 - Standing HP: 21 - Standing MP: 12
+- Level 59 - Standing HP: 21 - Standing MP: 12
+- Level 60 - Standing HP: 21 - Standing MP: 12
+- Level 61 - Standing HP: 14 - Standing MP: 8
+- Level 62 - Standing HP: 14 - Standing MP: 8
+- Level 63 - Standing HP: 14 - Standing MP: 8
+- Level 64 - Standing HP: 14 - Standing MP: 8
+- Level 65 - Standing HP: 14 - Standing MP: 8
+- Level 66 - Standing HP: 14 - Standing MP: 8
+- Level 67 - Standing HP: 14 - Standing MP: 8
+- Level 68 - Standing HP: 14 - Standing MP: 8
+- Level 69 - Standing HP: 14 - Standing MP: 8
+- Level 70 - Standing HP: 14 - Standing MP: 8
+- Level 71 - Standing HP: 14 - Standing MP: 8
+- Level 72 - Standing HP: 14 - Standing MP: 8
+- Level 73 - Standing HP: 14 - Standing MP: 8
+- Level 74 - Standing HP: 14 - Standing MP: 8
+- Level 75 - Standing HP: 14 - Standing MP: 8
+- Level 76 - Standing HP: 14 - Standing MP: 8
+- Level 77 - Standing HP: 14 - Standing MP: 8
+- Level 78 - Standing HP: 14 - Standing MP: 8
+- Level 79 - Standing HP: 14 - Standing MP: 8
+- Level 80 - Standing HP: 14 - Standing MP: 8
+- Level 81 - Standing HP: 14 - Standing MP: 8
+- Level 82 - Standing HP: 14 - Standing MP: 8
+- Level 83 - Standing HP: 14 - Standing MP: 8
+- Level 84 - Standing HP: 14 - Standing MP: 8
+- Level 85 - Standing HP: 14 - Standing MP: 8
+- Level 86 - Standing HP: 14 - Standing MP: 8
+- Level 87 - Standing HP: 14 - Standing MP: 8
+- Level 88 - Standing HP: 14 - Standing MP: 8
+- Level 89 - Standing HP: 14 - Standing MP: 8
+- Level 90 - Standing HP: 14 - Standing MP: 8
+- Level 91 - Standing HP: 14 - Standing MP: 8
+- Level 92 - Standing HP: 14 - Standing MP: 8
+- Level 93 - Standing HP: 14 - Standing MP: 8
+- Level 94 - Standing HP: 14 - Standing MP: 8
+- Level 95 - Standing HP: 14 - Standing MP: 8
+- Level 96 - Standing HP: 14 - Standing MP: 8
+- Level 97 - Standing HP: 14 - Standing MP: 8
+- Level 98 - Standing HP: 14 - Standing MP: 8
+- Level 99 - Standing HP: 14 - Standing MP: 8
diff --git a/src/NosCore.Algorithm/RecoveryRateService/IRecoveryRateService.cs b/src/NosCore.Algorithm/RecoveryRateService/IRecoveryRateService.cs
new file mode 100644
index 0000000..f73315b
--- /dev/null
+++ b/src/NosCore.Algorithm/RecoveryRateService/IRecoveryRateService.cs
@@ -0,0 +1,33 @@
+// __ _ __ __ ___ __ ___ ___
+// | \| |/__\ /' _/ / _//__\| _ \ __|
+// | | ' | \/ |`._`.| \_| \/ | v / _|
+// |_|\__|\__/ |___/ \__/\__/|_|_\___|
+// -----------------------------------
+
+using NosCore.Shared.Enumerations;
+
+namespace NosCore.Algorithm.RecoveryRateService
+{
+ ///
+ /// HP and MP points a character recovers per regeneration tick
+ ///
+ public interface IRecoveryRateService
+ {
+ ///
+ /// Gets the HP recovered per tick while sitting
+ ///
+ int GetRestingHpRate(CharacterClassType characterClass);
+
+ ///
+ /// Gets the MP recovered per tick while sitting
+ ///
+ int GetRestingMpRate(CharacterClassType characterClass);
+
+ ///
+ /// Gets the rate recovered per tick while standing, derived from the resting rate
+ ///
+ /// The resting HP or MP rate
+ /// The character level
+ int GetStandingRate(int restingRate, byte level);
+ }
+}
diff --git a/src/NosCore.Algorithm/RecoveryRateService/RecoveryRateService.cs b/src/NosCore.Algorithm/RecoveryRateService/RecoveryRateService.cs
new file mode 100644
index 0000000..7d477ff
--- /dev/null
+++ b/src/NosCore.Algorithm/RecoveryRateService/RecoveryRateService.cs
@@ -0,0 +1,44 @@
+// __ _ __ __ ___ __ ___ ___
+// | \| |/__\ /' _/ / _//__\| _ \ __|
+// | | ' | \/ |`._`.| \_| \/ | v / _|
+// |_|\__|\__/ |___/ \__/\__/|_|_\___|
+// -----------------------------------
+
+using System.Collections.Generic;
+using NosCore.Shared.Enumerations;
+
+namespace NosCore.Algorithm.RecoveryRateService
+{
+ ///
+ public class RecoveryRateService : IRecoveryRateService
+ {
+ private static readonly Dictionary RestingRates = new()
+ {
+ [CharacterClassType.Adventurer] = (30, 10),
+ [CharacterClassType.Swordsman] = (80, 30),
+ [CharacterClassType.Archer] = (60, 50),
+ [CharacterClassType.Mage] = (30, 80),
+ [CharacterClassType.MartialArtist] = (70, 40),
+ };
+
+ ///
+ public int GetRestingHpRate(CharacterClassType characterClass) => RestingRates[characterClass].Hp;
+
+ ///
+ public int GetRestingMpRate(CharacterClassType characterClass) => RestingRates[characterClass].Mp;
+
+ ///
+ ///
+ /// The factor is one half up to level 20 and steps down in bands after it. Multiply before
+ /// dividing, or the band is lost to integer truncation.
+ ///
+ public int GetStandingRate(int restingRate, byte level)
+ {
+ var percent = level <= 20 ? 50
+ : level <= 40 ? 40
+ : level <= 60 ? 30
+ : 20;
+ return restingRate * percent / 100;
+ }
+ }
+}
diff --git a/test/NosCore.Algorithm.Tests/DocumentationTest.cs b/test/NosCore.Algorithm.Tests/DocumentationTest.cs
index 1dc91d9..2766a1d 100644
--- a/test/NosCore.Algorithm.Tests/DocumentationTest.cs
+++ b/test/NosCore.Algorithm.Tests/DocumentationTest.cs
@@ -215,6 +215,28 @@ public void SecondaryDamageDocumentation()
Approvals.Verify(WriterFactory.CreateTextWriter(resultBuilder.ToString(), "md"));
}
+ [TestMethod]
+ public void RecoveryRateDocumentation()
+ {
+ var recoveryRateService = new RecoveryRateService.RecoveryRateService();
+
+ var resultBuilder = new StringBuilder("# Recovery Rate Table");
+ resultBuilder.AppendLine();
+ foreach (var @class in Enum.GetValues(typeof(CharacterClassType)).Cast())
+ {
+ var hp = recoveryRateService.GetRestingHpRate(@class);
+ var mp = recoveryRateService.GetRestingMpRate(@class);
+ resultBuilder.AppendLine($"## {@class} - Resting HP: {hp} - Resting MP: {mp}");
+ for (byte level = 1; level < 100; level++)
+ {
+ resultBuilder.AppendLine(
+ $"- Level {level} - Standing HP: {recoveryRateService.GetStandingRate(hp, level)} - Standing MP: {recoveryRateService.GetStandingRate(mp, level)}");
+ }
+ }
+
+ Approvals.Verify(WriterFactory.CreateTextWriter(resultBuilder.ToString(), "md"));
+ }
+
[TestMethod]
public void SpeedDocumentation()
{