From ff18a84d9cb0849533c249730c71f5d41357b357 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 15:04:36 +0100 Subject: [PATCH 01/17] fix(items): the excellent level / 20 counts level plus master level The excellent "+level / 20" damage and wizardry options divide level plus master level (totalLevel), rounded down, as the Season 6 servers and OpenMU compute it (design O26, P16). The client divided the hero's level only, so a level 400 hero with 200 master levels gets +30 now instead of +20. The change is the term in Options/Excellent.json; the test checks a master hero with the shipped data. --- docs/item-data.md | 5 +++-- src/bin/Data/Items/Options/Excellent.json | 4 ++-- tests/data/test_item_option_slots.cpp | 9 ++++++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/docs/item-data.md b/docs/item-data.md index d107adb528..4c76cd5800 100644 --- a/docs/item-data.md +++ b/docs/item-data.md @@ -1039,8 +1039,9 @@ known difference from OpenMU) and the pendants 13/12, 13/25 and 13/27. Arrows and bolts have none, as on Season 6 and OpenMU. The Zen option is +30 %, Season 6's value; OpenMU has +40 %. "Level / 20" -divides the hero's level, as the client did; OpenMU divides level plus -master level (`totalLevel`). +divides level plus master level (`totalLevel`), rounded down, as the +Season 6 servers and OpenMU do; the client before divided the hero's level +only, so a level 400 hero with 200 master levels now gets +30, not +20. "Excellent" (the name's prefix and green colour, the excellent +15 durability, the tooltip state `excellent`, the ground label's excellent diff --git a/src/bin/Data/Items/Options/Excellent.json b/src/bin/Data/Items/Options/Excellent.json index 477ded377f..0e814d1d75 100644 --- a/src/bin/Data/Items/Options/Excellent.json +++ b/src/bin/Data/Items/Options/Excellent.json @@ -51,7 +51,7 @@ {"number": 2, "attribute": "healthAfterMonsterKillMultiplier", "add": {"values": 8}, "text": "lifeAfterKill"}, {"number": 3, "attribute": "attackSpeedAny", "add": {"values": 7}, "text": "increaseAttackSpeed"}, {"number": 4, "attribute": "physicalBaseDmgIncrease", "percent": {"values": 2}, "text": "increaseDamagePercent"}, - {"number": 5, "attribute": "physicalBaseDmg", "add": {"values": 0, "per": [{"attribute": "level", "divisor": 20}]}, "text": "increaseDamageLevel20"}, + {"number": 5, "attribute": "physicalBaseDmg", "add": {"values": 0, "per": [{"attribute": "totalLevel", "divisor": 20}]}, "text": "increaseDamageLevel20"}, {"number": 6, "attribute": "excellentDamageChance", "percent": {"values": 10}, "text": "excellentDamageRate"} ] }, @@ -78,7 +78,7 @@ {"number": 2, "attribute": "healthAfterMonsterKillMultiplier", "add": {"values": 8}, "text": "lifeAfterKill"}, {"number": 3, "attribute": "attackSpeedAny", "add": {"values": 7}, "text": "increaseAttackSpeed"}, {"number": 4, "attribute": "wizardryBaseDmgIncrease", "percent": {"values": 2}, "text": "increaseWizardryPercent"}, - {"number": 5, "attribute": "wizardryBaseDmg", "add": {"values": 0, "per": [{"attribute": "level", "divisor": 20}]}, "text": "increaseWizardryLevel20"}, + {"number": 5, "attribute": "wizardryBaseDmg", "add": {"values": 0, "per": [{"attribute": "totalLevel", "divisor": 20}]}, "text": "increaseWizardryLevel20"}, {"number": 6, "attribute": "excellentDamageChance", "percent": {"values": 10}, "text": "excellentDamageRate"} ] } diff --git a/tests/data/test_item_option_slots.cpp b/tests/data/test_item_option_slots.cpp index f0b2d61030..3fb0e24330 100644 --- a/tests/data/test_item_option_slots.cpp +++ b/tests/data/test_item_option_slots.cpp @@ -934,7 +934,8 @@ TEST_CASE("The excellent options' tooltip lines come from their texts [data][ite } // The stat code adds an option with terms on the hero's attributes as the hero is now, not as the hero was when the -// item was made: level / 20 grows with the hero. The other options add what the item was made with. +// item was made: level / 20 grows with the hero and counts the master level. The other options add what the item was +// made with. TEST_CASE("The stat code adds the excellent level / 20 as the hero is now [data][items]") { ClientDataScope client(ClientDirectory); @@ -952,6 +953,12 @@ TEST_CASE("The stat code adds the excellent level / 20 as the hero is now [data] hero.Hero().Level = 85; CHECK(GameLogic::Items::GetCurrentSlotValue(kris, 0) == 4); CHECK(kris.SpecialValue[0] == 0); + // Level plus master level, rounded down: (85 + 30) / 20 for a master hero. + hero.Hero().Class = CLASS_GRANDMASTER; + const MASTER_LEVEL_VALUE savedMasterLevel = Master_Level_Data; + Master_Level_Data.nMLevel = 30; + CHECK(GameLogic::Items::GetCurrentSlotValue(kris, 0) == 5); + Master_Level_Data = savedMasterLevel; // The others: what the item was made with (2 % and attack speed 7). CHECK(GameLogic::Items::GetCurrentSlotValue(kris, 1) == 2); CHECK(GameLogic::Items::GetCurrentSlotValue(kris, 2) == 7); From 70cbe45029c3c1d87c7e2627f9da111377a5d326 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 15:12:49 +0100 Subject: [PATCH 02/17] test(items): snapshot the ancient bonus at levels 1 to 3 The tooltip snapshot gets three variants, an ancient item with its bonus at level 1, 2 and 3, recorded with the code before the bonus moves into data, so the move must keep every tooltip. Servers send levels 1 and 2; the ancient byte holds more. Every item's hash changes once here, as each item has three tooltips more per level. --- .../Engine/Object/ItemTooltipSnapshot.cpp | 12 + tests/data/item_tooltip_snapshot.txt | 3644 ++++++++--------- tests/data/test_item_tooltips.cpp | 8 +- 3 files changed, 1838 insertions(+), 1826 deletions(-) diff --git a/src/source/Engine/Object/ItemTooltipSnapshot.cpp b/src/source/Engine/Object/ItemTooltipSnapshot.cpp index 6ed44d425b..e5ca882ac2 100644 --- a/src/source/Engine/Object/ItemTooltipSnapshot.cpp +++ b/src/source/Engine/Object/ItemTooltipSnapshot.cpp @@ -32,6 +32,13 @@ void ApplyOption(ItemCreationParams& params, BYTE level, BYTE type) params.OptionType = type; } +void ApplyAncientBonus(ItemCreationParams& params, BYTE level) +{ + params.IsAncient = true; + params.AncientDiscriminator = 1; + params.AncientBonusOption = level; +} + constexpr TooltipVariant TooltipVariants[] = { {"plain", [](ItemCreationParams&) {}}, {"full", @@ -50,6 +57,11 @@ constexpr TooltipVariant TooltipVariants[] = { params.IsAncient = true; params.AncientDiscriminator = 1; }}, + // The ancient bonus at the levels a server sends (1: +5, 2: +10 of the stat the item's bonus raises) and one above + // them, which the ancient byte can hold. + {"ancient bonus 1", [](ItemCreationParams& params) { ApplyAncientBonus(params, 1); }}, + {"ancient bonus 2", [](ItemCreationParams& params) { ApplyAncientBonus(params, 2); }}, + {"ancient bonus 3", [](ItemCreationParams& params) { ApplyAncientBonus(params, 3); }}, {"harmony", [](ItemCreationParams& params) { diff --git a/tests/data/item_tooltip_snapshot.txt b/tests/data/item_tooltip_snapshot.txt index c8f6cb0b58..faa6eaf8e4 100644 --- a/tests/data/item_tooltip_snapshot.txt +++ b/tests/data/item_tooltip_snapshot.txt @@ -1,1822 +1,1822 @@ -bladeMaster 0/0 c66afc623f25fb6e -bladeMaster 0/1 cfb6515046a74110 -bladeMaster 0/10 508c4aeefc187980 -bladeMaster 0/11 b73d818c5408c499 -bladeMaster 0/12 77c14afb23544df3 -bladeMaster 0/13 70d2b6014d0257ca -bladeMaster 0/14 e4cba606d95bebba -bladeMaster 0/15 784f2e08c8598a8f -bladeMaster 0/16 244b88bcff8cac15 -bladeMaster 0/17 c1dcb7c86f762daa -bladeMaster 0/18 d7d203184d1531b3 -bladeMaster 0/19 6e16ac221fecf119 -bladeMaster 0/2 78b1e862ba603b5e -bladeMaster 0/20 f6ea31351c6311d9 -bladeMaster 0/21 64ae9f8661b84ebd -bladeMaster 0/22 eb08bdd0a48f0ab0 -bladeMaster 0/23 b3a6ff94e34b8d40 -bladeMaster 0/24 4d02759508076c5e -bladeMaster 0/25 e93f7f7866163bc9 -bladeMaster 0/26 b5d4bdd4c0257b3b -bladeMaster 0/27 4a37f5f091a30904 -bladeMaster 0/28 fe8cdcd72e67a887 -bladeMaster 0/3 ce48047dfabdbc90 -bladeMaster 0/31 f9c441613537fbd3 -bladeMaster 0/32 079534bb64bd5a89 -bladeMaster 0/33 918b92275f46e933 -bladeMaster 0/34 f436f3dcb7863983 -bladeMaster 0/35 d18a7c7b095eeac2 -bladeMaster 0/4 de26745239a7599f -bladeMaster 0/5 5209da8853ccfd8d -bladeMaster 0/6 c166dfb4d933f351 -bladeMaster 0/7 619c750aa942bca7 -bladeMaster 0/8 eabdbceed036b9c3 -bladeMaster 0/9 15e062f8a8482a00 -bladeMaster 1/0 ac68500f4f7abcf8 -bladeMaster 1/1 fdbd7329a7e61df2 -bladeMaster 1/2 3f90d7d965b4d7e4 -bladeMaster 1/3 a72b65f061aa1be0 -bladeMaster 1/4 4c84727493646a3d -bladeMaster 1/5 52940409761a9f76 -bladeMaster 1/6 040be442b0bb7964 -bladeMaster 1/7 358b7098546d803e -bladeMaster 1/8 ad2d086282fc2325 -bladeMaster 10/0 c9a642db9140e956 -bladeMaster 10/1 c65666c6d55d41fa -bladeMaster 10/10 822a9840f8fb3cc0 -bladeMaster 10/11 4c823683dfc189c7 -bladeMaster 10/12 98ac02b70ab2bcca -bladeMaster 10/13 ec1abf451a084af7 -bladeMaster 10/14 a3586995074ca258 -bladeMaster 10/15 202eefc7335a59ff -bladeMaster 10/16 e79f22566418039f -bladeMaster 10/17 54e9f9737a8a4b08 -bladeMaster 10/18 6f5b94e092ef0933 -bladeMaster 10/19 be70001232656943 -bladeMaster 10/2 f3cfd61f427d5749 -bladeMaster 10/20 4650c3cd3ef719a2 -bladeMaster 10/21 75804b9d47d4f30b -bladeMaster 10/22 330907e92192bac2 -bladeMaster 10/23 e4fd58654ffb9b0f -bladeMaster 10/24 eca87402c8a597eb -bladeMaster 10/25 2d4daba6197a5a31 -bladeMaster 10/26 43b09fedbb7e861e -bladeMaster 10/27 eb75301be001f358 -bladeMaster 10/28 89e94aecd31479d3 -bladeMaster 10/29 e633946468c57679 -bladeMaster 10/3 f74f899fae9ed405 -bladeMaster 10/30 e4d0f15e5064e521 -bladeMaster 10/31 6570e61d156ff6aa -bladeMaster 10/32 3b8721023f7c53bc -bladeMaster 10/33 8fda41ca31469618 -bladeMaster 10/34 684327ba26b6bcfd -bladeMaster 10/35 dfd13424f6390dde -bladeMaster 10/36 02856d7994447290 -bladeMaster 10/37 57802a1294d7cf28 -bladeMaster 10/38 e94c6128cb6bdf8b -bladeMaster 10/39 076f891d4a73b626 -bladeMaster 10/4 36912e51c5299c3f -bladeMaster 10/40 b16fcb1f8ec6543b -bladeMaster 10/41 495355b5ce89ac30 -bladeMaster 10/42 d5388df059a5f4c4 -bladeMaster 10/43 79f111175c12ece0 -bladeMaster 10/44 7fd937070d65e0d1 -bladeMaster 10/45 ccf41a5b04fd66a3 -bladeMaster 10/46 dfcf5f0ec2ac6b30 -bladeMaster 10/47 1de03c415fb5a37f -bladeMaster 10/48 add14c634beffee1 -bladeMaster 10/49 7e55b2449856a54b -bladeMaster 10/5 8b0145233d5e3d61 -bladeMaster 10/50 930581b6e5cdc055 -bladeMaster 10/51 11d560ded799be22 -bladeMaster 10/52 045c13976196f20a -bladeMaster 10/6 02706a2d047d6285 -bladeMaster 10/62 eb35fe638dafdb01 -bladeMaster 10/63 3626f9615960865b -bladeMaster 10/64 26eaf352b6c4de5b -bladeMaster 10/65 35c65f2fb1e9664b -bladeMaster 10/66 dbba8e6d2f503650 -bladeMaster 10/67 1c8890b79c40b4b9 -bladeMaster 10/68 d1ed34c7fa2d5fa3 -bladeMaster 10/69 1be1227ffafac124 -bladeMaster 10/7 869f0b2b613f6909 -bladeMaster 10/70 3ee8bddf015af201 -bladeMaster 10/71 2b5e1181a03efc61 -bladeMaster 10/8 c84f67f4844934f3 -bladeMaster 10/9 e1f616ccdbdcf491 -bladeMaster 11/0 6a33798727df042e -bladeMaster 11/1 650e019491596569 -bladeMaster 11/10 f38e5fb23b0d0aad -bladeMaster 11/11 4a8d08bf55166770 -bladeMaster 11/12 7f821e7b6e35316f -bladeMaster 11/13 2b2aa27b425115d1 -bladeMaster 11/14 9778c5685449a188 -bladeMaster 11/15 5bb4c4eab66ea6f7 -bladeMaster 11/16 5e91fc15c35a466d -bladeMaster 11/17 779ae23a76cedf2b -bladeMaster 11/18 eb52dd0ace351bbb -bladeMaster 11/19 66e853aed9b05fd1 -bladeMaster 11/2 351bcb01d5ff7dc7 -bladeMaster 11/20 2d18f4b2f1f86f18 -bladeMaster 11/21 f82fbc5697ccbe0e -bladeMaster 11/22 e4e857d3fd95200c -bladeMaster 11/23 5b23dd547050fe7e -bladeMaster 11/24 e73289b9f455b6b2 -bladeMaster 11/25 98099d9bdb39f147 -bladeMaster 11/26 da29bb729b6ea018 -bladeMaster 11/27 78e57a6d74df5469 -bladeMaster 11/28 92393316536fe094 -bladeMaster 11/29 7a8dd8225a7fb28c -bladeMaster 11/3 ca63803812f369be -bladeMaster 11/30 d624f3d59917f7a0 -bladeMaster 11/31 02cc384fc6387994 -bladeMaster 11/32 29fd9769b40b02d8 -bladeMaster 11/33 8a317aa85198a3b2 -bladeMaster 11/34 56615923dc6524b0 -bladeMaster 11/35 1f4645e0ed0caf27 -bladeMaster 11/36 6cfe0746b9704208 -bladeMaster 11/37 766d1ae83b1d4e08 -bladeMaster 11/38 ff768dfb3f77eaa5 -bladeMaster 11/39 e2331136bb4ae977 -bladeMaster 11/4 4dbc7f898a0b08cf -bladeMaster 11/40 dd8be159f37a4332 -bladeMaster 11/41 022b2114cf808fda -bladeMaster 11/42 6aa1a55b64ad56e5 -bladeMaster 11/43 fb2add802fad733c -bladeMaster 11/44 216ecc318cbf8a2f -bladeMaster 11/45 e6e402b418e68792 -bladeMaster 11/46 abe8b8841d90b463 -bladeMaster 11/47 a39055f516c43df4 -bladeMaster 11/48 66945bc91a880f57 -bladeMaster 11/49 62c5c77aaf6a3b5b -bladeMaster 11/5 6eb9b23255fa5a8b -bladeMaster 11/50 d0e3bf2f1a695ff0 -bladeMaster 11/51 402809399e174077 -bladeMaster 11/52 15a20d160757396a -bladeMaster 11/59 06a8a51fdafa95b5 -bladeMaster 11/6 338311b2961d992a -bladeMaster 11/60 1d3393ca313a9f79 -bladeMaster 11/61 8e8e252beabf79cb -bladeMaster 11/62 0e52d6f9c69de551 -bladeMaster 11/63 89374c72922e6e1f -bladeMaster 11/64 320d9c71a80dfb6a -bladeMaster 11/65 4f45923e564861c4 -bladeMaster 11/66 eb0f636b079bb096 -bladeMaster 11/67 e9f1b9cca5f67fa3 -bladeMaster 11/68 87e807bcc5e4f242 -bladeMaster 11/69 c932b3c0bfbafc23 -bladeMaster 11/7 d9eccb30e4f34bf0 -bladeMaster 11/70 56479b12a4c7db9d -bladeMaster 11/71 3927b33fe8fcbaa5 -bladeMaster 11/72 dac2088ddd5737c3 -bladeMaster 11/73 eddcf8c463e5748d -bladeMaster 11/8 8dfde27dd4c51778 -bladeMaster 11/9 f700fd68e7c76cbf -bladeMaster 12/0 8edc292b5b4194e8 -bladeMaster 12/1 6cace1b58688db60 -bladeMaster 12/10 719850b38e8b1788 -bladeMaster 12/100 b3e98f2c9c545699 -bladeMaster 12/101 b62a10942cb65a35 -bladeMaster 12/102 1ce5fa5f6514c3c0 -bladeMaster 12/103 8d22b303177919e8 -bladeMaster 12/104 28f5ac64917bd204 -bladeMaster 12/105 ba3ead8c8b3c48a0 -bladeMaster 12/106 3e25a5d904e496d2 -bladeMaster 12/107 55170f7f895233f8 -bladeMaster 12/108 e66ae20426adc18a -bladeMaster 12/109 efb7331191a62aa1 -bladeMaster 12/11 e8130735d0cfc175 -bladeMaster 12/110 f9cb0b5cf573a34e -bladeMaster 12/111 e9183aec3d4d4e90 -bladeMaster 12/112 e6a782a585e0d81d -bladeMaster 12/113 1004f1fc067a4046 -bladeMaster 12/114 0aea4bea44ff1d36 -bladeMaster 12/115 e07b13c674710ea2 -bladeMaster 12/116 be94d6102ff0fd6b -bladeMaster 12/117 ef7c8c6034882a1a -bladeMaster 12/118 6ef57b16fa193efb -bladeMaster 12/119 a4f8944c95ab94e3 -bladeMaster 12/12 c6f44cdbd633c906 -bladeMaster 12/120 6195fc48c9c3ce0e -bladeMaster 12/121 84137fd517c0771a -bladeMaster 12/122 eca684a8bc0d863b -bladeMaster 12/123 fd2c3e65beb8ca02 -bladeMaster 12/124 ee88a6837303e1ef -bladeMaster 12/125 81db3a30e1b44e06 -bladeMaster 12/126 bafadcf8e278e89f -bladeMaster 12/127 16ad09f1c05a13a3 -bladeMaster 12/128 bcf2f1dda7d056ed -bladeMaster 12/129 00971f39b84b94dc -bladeMaster 12/13 dc8dbe53af7fc720 -bladeMaster 12/130 f09df24897432af2 -bladeMaster 12/131 81f4a4b8beb19e11 -bladeMaster 12/132 ec1f5a3ae4aa224f -bladeMaster 12/133 7364bec808cd19d1 -bladeMaster 12/134 4bfa30575d959b46 -bladeMaster 12/135 b8aab0f335106700 -bladeMaster 12/136 deed836136f8a36f -bladeMaster 12/137 26e4cfd83b53b2f9 -bladeMaster 12/138 a4770273a8e335eb -bladeMaster 12/139 44872c8b99a75c3b -bladeMaster 12/14 c3d1ad28a105ed8c -bladeMaster 12/140 15a879787bbcbf19 -bladeMaster 12/141 173d76d6c3d41d27 -bladeMaster 12/142 7e8d2372777c01b9 -bladeMaster 12/143 8d331dabc1bac6d3 -bladeMaster 12/15 bbe0e7917dd8aaa8 -bladeMaster 12/16 724ca0f9279e71ec -bladeMaster 12/17 79d013b99eaae644 -bladeMaster 12/18 ef5ee2e58be80b78 -bladeMaster 12/19 497dce7b6341e94c -bladeMaster 12/2 94ce733c777591ab -bladeMaster 12/21 79be295ed89949c6 -bladeMaster 12/22 ceb105257095b350 -bladeMaster 12/23 49fd4c9b8e9ea512 -bladeMaster 12/24 012531db9daf69a2 -bladeMaster 12/26 56b00b7c00d1fd28 -bladeMaster 12/3 2d36094a284d2eac -bladeMaster 12/30 cac9cad9b5951fb7 -bladeMaster 12/31 284c17aa996e5e0d -bladeMaster 12/32 46f67b1cc531f17b -bladeMaster 12/33 7e1e271a991930b9 -bladeMaster 12/34 b911958ef761edcd -bladeMaster 12/35 ed3f06de7196efd9 -bladeMaster 12/36 40ff5f2dbb785c6c -bladeMaster 12/37 4390a9461491c47b -bladeMaster 12/38 0e003ca1043bc3bf -bladeMaster 12/39 fda53bdedc9a9230 -bladeMaster 12/4 d5fd21629b7e45d2 -bladeMaster 12/40 89cfd6f9411d31e7 -bladeMaster 12/41 adbb5f54f6abdb18 -bladeMaster 12/42 10644bbe4646aa66 -bladeMaster 12/43 96c3fd1564e7bdaf -bladeMaster 12/44 84d81ea49253a9d4 -bladeMaster 12/45 34a1cc066787d308 -bladeMaster 12/46 96c88789c7d35004 -bladeMaster 12/47 a4d6c623bf8cc15e -bladeMaster 12/48 551d07f9581ff1ec -bladeMaster 12/49 e13c2054c1e05e83 -bladeMaster 12/5 a724e1ccfcc5d6f7 -bladeMaster 12/50 ba222614bee65177 -bladeMaster 12/6 2b3d67c035c84efc -bladeMaster 12/60 dc16ebda90571882 -bladeMaster 12/61 dfbb75ea2cddc690 -bladeMaster 12/62 b43d8f3b24526cc5 -bladeMaster 12/63 7aaaabe90740b10a -bladeMaster 12/64 86e39525c0233d4d -bladeMaster 12/65 cc960f30a80c2115 -bladeMaster 12/7 17c023b74cbb980c -bladeMaster 12/70 701ad68f7523e5db -bladeMaster 12/71 f2d1c5dd88bf6fb7 -bladeMaster 12/72 a0036bf2b5c9f901 -bladeMaster 12/8 ac801184e8faca90 -bladeMaster 12/9 46943f8c5c66c3c2 -bladeMaster 13/0 a1fed971c4872d33 -bladeMaster 13/1 d464a3b24fb13b90 -bladeMaster 13/10 2f08702e3de13710 -bladeMaster 13/103 2e29a549431c3526 -bladeMaster 13/104 9efa0dd03d7ed822 -bladeMaster 13/105 46a39d1427bc7e0e -bladeMaster 13/106 431f343dfcb2f4ec -bladeMaster 13/107 4a2a64479b1228ef -bladeMaster 13/109 c61e5b23b0eec304 -bladeMaster 13/11 d13c6459bbb64a40 -bladeMaster 13/110 39722cb662031540 -bladeMaster 13/111 837fa79b85f32d64 -bladeMaster 13/112 8775f5a1a66dbd4e -bladeMaster 13/113 bbc36515dfe130e6 -bladeMaster 13/114 f1fcf8fda34bbede -bladeMaster 13/115 4b62bbdd097e1cba -bladeMaster 13/116 f2e15b06ca0c8910 -bladeMaster 13/117 67f8b90e8b358668 -bladeMaster 13/118 0e8c88a0874a8f1a -bladeMaster 13/119 68a6074b5f86dcf8 -bladeMaster 13/12 b307cdc33ade5287 -bladeMaster 13/120 103cd2914f3ef79a -bladeMaster 13/121 992df813fed0e7a0 -bladeMaster 13/122 35971924c35cc59c -bladeMaster 13/123 19137f0ac3a7df1c -bladeMaster 13/124 9ac7f172011c19f6 -bladeMaster 13/125 a2f10043f762d614 -bladeMaster 13/126 d60487047dcdbbc6 -bladeMaster 13/127 3e7ce14410201fe2 -bladeMaster 13/128 4ab89476787d5096 -bladeMaster 13/129 6293ea2678781194 -bladeMaster 13/13 5172dd02d4838a2f -bladeMaster 13/130 afa434877766766c -bladeMaster 13/131 8b01ff51ed0964d2 -bladeMaster 13/132 9b4d447a033c6ff8 -bladeMaster 13/133 4c7b7cf5ecff27da -bladeMaster 13/134 bf7cecc2cdff11e2 -bladeMaster 13/135 eff3fb845f3233c0 -bladeMaster 13/136 65186b97705adc6c -bladeMaster 13/137 6d630b3e31aae100 -bladeMaster 13/138 ab9e2ddbf72a88fe -bladeMaster 13/139 59cd2a15e6baefb4 -bladeMaster 13/14 b3f81ee5a9f4c648 -bladeMaster 13/140 f9bc591f06433b54 -bladeMaster 13/141 a0a2ddd265a5350c -bladeMaster 13/142 0e8add9381725c70 -bladeMaster 13/143 808b265bccc50fee -bladeMaster 13/144 ea6ae6a3b9372580 -bladeMaster 13/15 ffc1beb4bff6fc3d -bladeMaster 13/16 0e793b2f56c36818 -bladeMaster 13/17 5771722e4297e152 -bladeMaster 13/18 ae372773a7f32aa0 -bladeMaster 13/19 5b53d4ea6df240fa -bladeMaster 13/2 a434844519ed6ac2 -bladeMaster 13/20 7664cc5a14b9f313 -bladeMaster 13/21 cf55a13a1f7d11b9 -bladeMaster 13/22 67b50726f487f0eb -bladeMaster 13/23 65d534436250ccd1 -bladeMaster 13/24 a590f61bfa17a4b3 -bladeMaster 13/25 e8464a571e5fa972 -bladeMaster 13/26 1984508a42126b85 -bladeMaster 13/27 d931df1eaea652a0 -bladeMaster 13/28 2be3431177670e53 -bladeMaster 13/29 5df1300966feea3e -bladeMaster 13/3 b7636b350ef51ab2 -bladeMaster 13/30 3d089e3119a7a0c2 -bladeMaster 13/31 1da2b5ed08b97d76 -bladeMaster 13/32 943ea9352304524b -bladeMaster 13/33 2b1982b2b6e88a2d -bladeMaster 13/34 4428ef56c0659e11 -bladeMaster 13/35 8964d76b11562cdd -bladeMaster 13/36 c96e488744f9009f -bladeMaster 13/37 92fe128387431eef -bladeMaster 13/38 2c05bf6358869039 -bladeMaster 13/39 d9c0d91f5f53498e -bladeMaster 13/4 a93231a25048c6ed -bladeMaster 13/40 130c034a78849fd0 -bladeMaster 13/41 8501e62553b8b296 -bladeMaster 13/42 58317cfa8406cc3b -bladeMaster 13/43 c8c0b7cf150746ce -bladeMaster 13/44 6c6d131ef71d36e6 -bladeMaster 13/45 c0faaf63b34b749c -bladeMaster 13/46 9a0d6d50410b26e0 -bladeMaster 13/47 85f907d4f58701dc -bladeMaster 13/48 8ccf5abcb50f420c -bladeMaster 13/49 21d2e28fce57b296 -bladeMaster 13/5 6e204d87a0904853 -bladeMaster 13/50 5999577e295ec696 -bladeMaster 13/51 cea4322a520f4396 -bladeMaster 13/52 b2fec3c09ed665c8 -bladeMaster 13/53 ca39bb43cc2103f2 -bladeMaster 13/54 203f1e4dcdae2364 -bladeMaster 13/55 911d375e01e17082 -bladeMaster 13/56 54f6c96237df3cd6 -bladeMaster 13/57 a1d8a4e97e864de8 -bladeMaster 13/58 9b67e33a3a80e2d6 -bladeMaster 13/59 162212b838841cd2 -bladeMaster 13/60 18eab2127715308c -bladeMaster 13/61 6317b0d6356c5972 -bladeMaster 13/62 0647de455bf41a6e -bladeMaster 13/63 15084336bae2b9de -bladeMaster 13/64 2266c19bc34eca70 -bladeMaster 13/65 a444eea947cae64a -bladeMaster 13/66 23d61a9d08b64d9c -bladeMaster 13/67 3f7380acfa637eac -bladeMaster 13/68 e16a32660a1e686a -bladeMaster 13/69 c7cc241c5e39ba18 -bladeMaster 13/7 e4b865a49e5d7e18 -bladeMaster 13/70 c56f2a9a482d7c14 -bladeMaster 13/71 0cc8df0da73ae888 -bladeMaster 13/72 d6a8e5253c646814 -bladeMaster 13/73 2c3eaab8cd2ef8aa -bladeMaster 13/74 6ed7fb85dab50aec -bladeMaster 13/75 68d83f8d90db519e -bladeMaster 13/76 4001ff3fdf728f20 -bladeMaster 13/8 79225f6d37ff34fd -bladeMaster 13/80 48d0111251b424c6 -bladeMaster 13/81 af5045acd1fdbb48 -bladeMaster 13/82 b9a945ed967df6aa -bladeMaster 13/83 5af11662c05881d4 -bladeMaster 13/84 674b0fd5517921fa -bladeMaster 13/85 538c949b979b3f30 -bladeMaster 13/86 f1743c69961b640a -bladeMaster 13/87 2a5b0386dd103ce8 -bladeMaster 13/88 bbb6fcdecca098b2 -bladeMaster 13/89 6988ca2f28aaad60 -bladeMaster 13/9 fdc75f2e592c6e73 -bladeMaster 13/90 8c515c2f1d5fb8ba -bladeMaster 13/91 a433ad9b34f0966e -bladeMaster 13/92 d22a90cfa813d354 -bladeMaster 13/93 a1ff3164a7488c18 -bladeMaster 13/94 0f70104308088426 -bladeMaster 13/95 9062522078f5ff2c -bladeMaster 13/96 d2b46c9364c44268 -bladeMaster 13/97 38ee94908f28c636 -bladeMaster 13/98 94385a23a173e28a -bladeMaster 13/99 2ca6b790b9ed0e88 -bladeMaster 14/0 7687ed5c5a0bb3cc -bladeMaster 14/1 43efe29f5a7b367c -bladeMaster 14/10 ebc17bd6838c4c1a -bladeMaster 14/100 c3c1c2018ed854d2 -bladeMaster 14/101 4aeb9ad5b9824447 -bladeMaster 14/102 c54820f6d2711b4f -bladeMaster 14/103 a1fa9d72e4ba8b35 -bladeMaster 14/104 53263af3c8182769 -bladeMaster 14/105 3d864ea4c675ac43 -bladeMaster 14/106 0fd113a915866565 -bladeMaster 14/107 864dd94b38b96937 -bladeMaster 14/108 ef8e330ec3c1a5af -bladeMaster 14/109 72badc46b1be28d9 -bladeMaster 14/11 af37be6d7fb64aea -bladeMaster 14/110 a0919415cdc1655a -bladeMaster 14/111 36eb21124772bd51 -bladeMaster 14/112 a1a651b2cfb98548 -bladeMaster 14/113 702670042271cb48 -bladeMaster 14/114 2dd1e312768bc4a0 -bladeMaster 14/115 985272396eb1f18e -bladeMaster 14/116 772aaaf5a39b83b8 -bladeMaster 14/117 5a85748f68a698c6 -bladeMaster 14/118 2320c542dbac586a -bladeMaster 14/119 526afc5288ce72de -bladeMaster 14/12 4dad4b1d2301d0bf -bladeMaster 14/120 248b1b1dd150131a -bladeMaster 14/121 b77ff345b3189f7e -bladeMaster 14/122 0a042784c14ca2b0 -bladeMaster 14/123 385f18b517e7127c -bladeMaster 14/124 9d26838c6249afd2 -bladeMaster 14/125 0991a2018c39e978 -bladeMaster 14/126 510c1f6fdbfd3042 -bladeMaster 14/127 4b0f668f3a61af88 -bladeMaster 14/128 8929e865c36d9bd8 -bladeMaster 14/129 a6da5012265e0c72 -bladeMaster 14/13 0838130c898a904a -bladeMaster 14/130 a29c550bcfff37b8 -bladeMaster 14/131 84cd4ebfa1e4a1be -bladeMaster 14/132 71c52f5e2e4cf38e -bladeMaster 14/133 21171bb1040b9486 -bladeMaster 14/134 aa24c347d7e530c2 -bladeMaster 14/135 5085d8581e5db5b2 -bladeMaster 14/136 4371a56c60158526 -bladeMaster 14/137 3fe5a1fb3f879b8e -bladeMaster 14/138 5cc28da8b1c98ea2 -bladeMaster 14/139 b0eb7780e103633a -bladeMaster 14/14 84900ac408a7a05a -bladeMaster 14/140 2d090c128ea6cf60 -bladeMaster 14/141 1ba76cf5bdd445d2 -bladeMaster 14/142 4f269794114dedac -bladeMaster 14/143 fcab1a14123edcac -bladeMaster 14/144 d600902b31f3833a -bladeMaster 14/145 d3d93c927b7a8e84 -bladeMaster 14/146 bf78d8be2dbb5178 -bladeMaster 14/147 01629755528c480c -bladeMaster 14/148 eb9bc684792188c4 -bladeMaster 14/149 728ed6c42247a870 -bladeMaster 14/15 7c12d60791a13e36 -bladeMaster 14/150 0a5e090f2c8303a2 -bladeMaster 14/151 accd2b0c434585d2 -bladeMaster 14/152 87606823d10effe4 -bladeMaster 14/153 426d307ef487c0d0 -bladeMaster 14/154 b44f8a7e3bf6c7ec -bladeMaster 14/155 cbb7cb6e0e86ea36 -bladeMaster 14/156 bebf7cf6a99941be -bladeMaster 14/157 10a943a530248f40 -bladeMaster 14/158 76ae7ca1d81ac196 -bladeMaster 14/159 3a329cf37ba03708 -bladeMaster 14/16 922aef98fa16d5d0 -bladeMaster 14/160 bb7a8542dc4d5dd6 -bladeMaster 14/161 90755485950e6310 -bladeMaster 14/162 66e291ba2aea6e0c -bladeMaster 14/163 07dc56eba635feca -bladeMaster 14/169 594beea6626ff9be -bladeMaster 14/17 29aa3fff7727a0f4 -bladeMaster 14/18 4080bb375ad7314a -bladeMaster 14/19 c6acab5d038fbb4a -bladeMaster 14/2 739d114d44fef314 -bladeMaster 14/20 91c9456c261f6630 -bladeMaster 14/21 60da8775fefa236b -bladeMaster 14/22 86e4a42b7cecc804 -bladeMaster 14/23 a649a7d8cb0e8a18 -bladeMaster 14/24 b13f2bd6248f6a3d -bladeMaster 14/25 d4e734c039a7a45b -bladeMaster 14/26 2953b98d49f69e35 -bladeMaster 14/28 c132b360871a628c -bladeMaster 14/29 a300f5a1d7e34d08 -bladeMaster 14/3 edffbafc46d4b488 -bladeMaster 14/31 b99b62b26f94b4d0 -bladeMaster 14/32 b5c4129a02ca6f76 -bladeMaster 14/33 18b5d21922609b66 -bladeMaster 14/34 8cc44a4740cf5835 -bladeMaster 14/35 17b98d102bed7bc8 -bladeMaster 14/36 4a6841647506be78 -bladeMaster 14/37 68c2b70bbcabbd5c -bladeMaster 14/38 6fba31e96ed3bfce -bladeMaster 14/39 468af4c0a4dedcd6 -bladeMaster 14/4 806e1d96a2770e1a -bladeMaster 14/40 6a1bcc71bbbc0394 -bladeMaster 14/41 5d37f80c1996f6a5 -bladeMaster 14/42 2da58f1adce2b465 -bladeMaster 14/43 e527d6ed9ab30357 -bladeMaster 14/44 8fc47fcd5c13f5d7 -bladeMaster 14/45 04092953f41e2c0d -bladeMaster 14/46 3164ae11d06f2aa3 -bladeMaster 14/47 8dd999f3b500bc01 -bladeMaster 14/48 4cacbdf84f5c084f -bladeMaster 14/49 e4497d6e86b06b91 -bladeMaster 14/5 d4e23c84af5b61b6 -bladeMaster 14/50 297dc274145243f9 -bladeMaster 14/51 eaae49a22d67ed98 -bladeMaster 14/52 82ea682b095553aa -bladeMaster 14/53 3e36219f41dd49da -bladeMaster 14/54 f7e14ec176498914 -bladeMaster 14/55 6422dc67c13905ac -bladeMaster 14/56 7457aa9af99f9b62 -bladeMaster 14/57 ccb12e55b843cfe0 -bladeMaster 14/58 2d1874c554adeab6 -bladeMaster 14/59 e420fe067568960e -bladeMaster 14/6 42cbbeef57197576 -bladeMaster 14/60 2d85beaf78e48e8c -bladeMaster 14/61 f1977d765ef163d8 -bladeMaster 14/62 bf251654df5e2888 -bladeMaster 14/63 fcab362470a76c50 -bladeMaster 14/64 6f32b9156477fbca -bladeMaster 14/65 ffb1be9817394cc0 -bladeMaster 14/66 4656d34ed9a21292 -bladeMaster 14/67 d20e8869c4fb436a -bladeMaster 14/68 16bcb794330ab43a -bladeMaster 14/7 f98ef4bf81ceca2e -bladeMaster 14/70 fba79d623c23adc4 -bladeMaster 14/71 feb13c5d5fba6f0a -bladeMaster 14/72 c73fe2104cc5c98a -bladeMaster 14/73 2040bb0b44f2ab8c -bladeMaster 14/74 335af2dc3ca957ba -bladeMaster 14/75 77ae291006880ad2 -bladeMaster 14/76 11d4a9135aaf2d94 -bladeMaster 14/77 0bc76098922a22c4 -bladeMaster 14/78 5ce19675f29ffef2 -bladeMaster 14/79 b103519805edca7e -bladeMaster 14/8 396e7465dbd5103a -bladeMaster 14/80 3945ca93e700a3d2 -bladeMaster 14/81 2eac8a445168a550 -bladeMaster 14/82 d689c7b05af56ece -bladeMaster 14/83 1e96afbab5dfc08e -bladeMaster 14/84 724f869df7b45a2c -bladeMaster 14/85 1dced9af29daa258 -bladeMaster 14/86 6b8f8ccb229327e4 -bladeMaster 14/87 d2e73e24f6db65f0 -bladeMaster 14/88 f4358467e18ca506 -bladeMaster 14/89 44928c2926a3d930 -bladeMaster 14/9 b2fffac7a48f72dc -bladeMaster 14/90 53f0311b9f2fc5de -bladeMaster 14/91 65022da49602d932 -bladeMaster 14/92 751ece030d8f586e -bladeMaster 14/93 dc23b041672dbf8c -bladeMaster 14/94 fb77641969753e80 -bladeMaster 14/95 bfdb112f180a54a4 -bladeMaster 14/96 a54778a0852d5934 -bladeMaster 14/97 cfe8357cdbe016fa -bladeMaster 14/98 1376f8214eacff26 -bladeMaster 14/99 b37ed90fcb22cd02 -bladeMaster 15/0 c39e0cd1232f4f22 -bladeMaster 15/1 7ebff6c213d668a2 -bladeMaster 15/10 8d8be8686b77b10a -bladeMaster 15/11 e02e57133c110218 -bladeMaster 15/12 c8826dd22b27dfa2 -bladeMaster 15/13 384892d9324e0b40 -bladeMaster 15/14 517074de135ff97a -bladeMaster 15/15 6651e3518ff39d7c -bladeMaster 15/16 6828ebbaf3d72a80 -bladeMaster 15/17 dc7237d9a781a842 -bladeMaster 15/18 152cbbbc3aeb766a -bladeMaster 15/19 fc251bf3853d9218 -bladeMaster 15/2 2f1c8fd9ba2f6006 -bladeMaster 15/20 6b6c5a01f9cd3308 -bladeMaster 15/21 ce528442e85fa510 -bladeMaster 15/22 265ed9eab73b2025 -bladeMaster 15/23 4af36b770495df4e -bladeMaster 15/24 b506b837e02489f0 -bladeMaster 15/26 f96be02902dbcab2 -bladeMaster 15/27 f9026bd7482a6b3b -bladeMaster 15/28 adb2e8f4f4df5df2 -bladeMaster 15/29 bdbed04eb5174350 -bladeMaster 15/3 57415de3c19e4394 -bladeMaster 15/30 8c61026807e55151 -bladeMaster 15/31 629a50743cc58a3f -bladeMaster 15/32 d1da8ee6040de879 -bladeMaster 15/33 6b0f71f11284328d -bladeMaster 15/34 40670c3317e95be7 -bladeMaster 15/35 21bfea5a9b2a609e -bladeMaster 15/36 0044cdbb56ac238b -bladeMaster 15/4 cca4c98fc3461efa -bladeMaster 15/5 57e02a76cb1baec6 -bladeMaster 15/6 a1886db20fc1139a -bladeMaster 15/7 53aad8a73468ce86 -bladeMaster 15/8 7151c81adc4f2642 -bladeMaster 15/9 e38f52f5f60b1b2a -bladeMaster 2/0 4aeb835b15e41f21 -bladeMaster 2/1 cac59c4759bdbbc7 -bladeMaster 2/10 a25d816c1eda9070 -bladeMaster 2/11 3b2e92afcf07ec1e -bladeMaster 2/12 d00faac57f349137 -bladeMaster 2/13 8305d73ef37f2982 -bladeMaster 2/14 32a62a87f34c5c22 -bladeMaster 2/15 aef108776706e121 -bladeMaster 2/16 17f468b8f44f0cb6 -bladeMaster 2/17 8aff505c83add137 -bladeMaster 2/18 cc32a7822912e529 -bladeMaster 2/2 6a3882a4e76d83cb -bladeMaster 2/3 46c3912d6735a5b0 -bladeMaster 2/4 c3d12829d9ed8e5e -bladeMaster 2/5 263576bda6bd6851 -bladeMaster 2/6 9b07c422ef47284d -bladeMaster 2/7 adddf5fa117ee142 -bladeMaster 2/8 0f9bbc06d8714e8c -bladeMaster 2/9 86de26b98e30474d -bladeMaster 3/0 cd54cb90213b1c8d -bladeMaster 3/1 071e1d037487526b -bladeMaster 3/10 2a01712c8e4bb9ad -bladeMaster 3/11 07896c22f60e3938 -bladeMaster 3/2 dad42b872f2593b4 -bladeMaster 3/3 6e9290bab28a52ea -bladeMaster 3/4 ebcf59909a0fc28e -bladeMaster 3/5 381ebd1eb87304a5 -bladeMaster 3/6 876b21def5540a21 -bladeMaster 3/7 ea070dfee267da81 -bladeMaster 3/8 65963bad8fa3ad3a -bladeMaster 3/9 a4c776620919a741 -bladeMaster 4/0 2e21561e73f0bc55 -bladeMaster 4/1 4f23133620771733 -bladeMaster 4/10 96f55233e1c077e0 -bladeMaster 4/11 1ba079613d98bd15 -bladeMaster 4/12 b81a71dbb9850b6a -bladeMaster 4/13 08542c019ae83f60 -bladeMaster 4/14 e91942cb53111a5a -bladeMaster 4/15 77473bfd07e18407 -bladeMaster 4/16 7b586e12019d1720 -bladeMaster 4/17 c25dda80515e5e9c -bladeMaster 4/18 8d3765090f997dd1 -bladeMaster 4/19 cf665aeb7a8a8da4 -bladeMaster 4/2 1f86ccfa203c8325 -bladeMaster 4/20 bb02ebf40de5b928 -bladeMaster 4/21 aa2300938bbb8068 -bladeMaster 4/22 cae98b1aed21ac7a -bladeMaster 4/23 cca4dd1cf627060c -bladeMaster 4/24 4d3cdd8dd0a2666d -bladeMaster 4/3 107d889d6e76b898 -bladeMaster 4/4 9ebb035aebb50f92 -bladeMaster 4/5 5771c99bdc6fcbad -bladeMaster 4/6 3e2af290399d90f5 -bladeMaster 4/7 2fa1607b3b6d70d9 -bladeMaster 4/8 c0e5d700d999b244 -bladeMaster 4/9 4dd8c13d02d7b1f3 -bladeMaster 5/0 f53b0ccd912b67f9 -bladeMaster 5/1 7645c4fb66ff0247 -bladeMaster 5/10 98c9e5799c7653a4 -bladeMaster 5/11 4d7ba53861a9851f -bladeMaster 5/12 36a45fcb1aa44e41 -bladeMaster 5/13 2b1298cb42120d68 -bladeMaster 5/14 e2ab325cd8327486 -bladeMaster 5/15 feb6c1bd3208212b -bladeMaster 5/16 761b2d55a1cfed3c -bladeMaster 5/17 69bd6fa9aea1833d -bladeMaster 5/18 6ae1a9a00ca9ff2d -bladeMaster 5/19 796f6baded303824 -bladeMaster 5/2 f03005d926cdf678 -bladeMaster 5/20 bf6706f607887c22 -bladeMaster 5/21 770ab10bccd4765a -bladeMaster 5/22 5d78a8c9d8b77beb -bladeMaster 5/23 b313940dbe0df7a1 -bladeMaster 5/3 93f113bc2e683218 -bladeMaster 5/30 137c348dd062cf07 -bladeMaster 5/31 779fd471758c4cfc -bladeMaster 5/33 1568d5a38eeff02b -bladeMaster 5/34 1b423693808d3b8f -bladeMaster 5/36 57e3e41ae0ec22c5 -bladeMaster 5/4 b02c5d84f5e784a5 -bladeMaster 5/5 05997a8b84c5049f -bladeMaster 5/6 7c2669aad95339a0 -bladeMaster 5/7 2e1b0a535ea8830b -bladeMaster 5/8 4534d895ada7269b -bladeMaster 5/9 95dbcf21b83c7569 -bladeMaster 6/0 8f6b21fdee7e2b32 -bladeMaster 6/1 bcb55c6ed3375ee7 -bladeMaster 6/10 fcb0e34288166a99 -bladeMaster 6/11 a7ca68a6112a4bea -bladeMaster 6/12 5cc65faeee2c396b -bladeMaster 6/13 4698b0e6f68b06fa -bladeMaster 6/14 96c7d6266f69b5b0 -bladeMaster 6/15 1509842edb7a45a2 -bladeMaster 6/16 086371e2ac441320 -bladeMaster 6/17 c677fb83b8aeb7f3 -bladeMaster 6/18 ec3474166de5cb55 -bladeMaster 6/19 c99de851d6ad8498 -bladeMaster 6/2 e4eb30d775a40a34 -bladeMaster 6/20 5995f39336919c04 -bladeMaster 6/21 5ad1684495e80293 -bladeMaster 6/3 5d35f0336c7e164c -bladeMaster 6/4 5dbe1af5f3797cdf -bladeMaster 6/5 033b8c36de2805fb -bladeMaster 6/6 d17faaa26daa6f48 -bladeMaster 6/7 c5879fdfb5e6bbb0 -bladeMaster 6/8 daf5cf1e203b6dcb -bladeMaster 6/9 d3e14d98c69cac82 -bladeMaster 7/0 fd27c492660a0e84 -bladeMaster 7/1 276e942fc7b40fb6 -bladeMaster 7/10 ef825e1930ed8f9a -bladeMaster 7/11 657baaf82d604a39 -bladeMaster 7/12 27194c49c306e15a -bladeMaster 7/13 f92791cea3ffaf8f -bladeMaster 7/14 2d31ad99107c2931 -bladeMaster 7/16 f2554f111ba9acec -bladeMaster 7/17 b7932e9dfa741099 -bladeMaster 7/18 ba72b3bb9e55ccba -bladeMaster 7/19 fb81defc65e593d2 -bladeMaster 7/2 51f5e6956aef6b54 -bladeMaster 7/21 105e121835e9c35c -bladeMaster 7/22 eba9c9cf02b25edc -bladeMaster 7/24 8304063f8b8bbd2c -bladeMaster 7/25 1c08bbf2dc85a85e -bladeMaster 7/26 5561913361b93da5 -bladeMaster 7/27 12a4152cf97e5f91 -bladeMaster 7/28 06e9a438c14d28ec -bladeMaster 7/29 3c877ce3353a9fb6 -bladeMaster 7/3 b41258b2dd9dd8cf -bladeMaster 7/30 ca352b119665c06d -bladeMaster 7/31 490919a76692083b -bladeMaster 7/33 b20e60d0a776c525 -bladeMaster 7/34 124e502e4f372b79 -bladeMaster 7/35 2c0a263385234e9d -bladeMaster 7/36 146bd733fe858989 -bladeMaster 7/38 d00fea0810881024 -bladeMaster 7/39 4ffeec0b6db5eefa -bladeMaster 7/4 d4f2a61d56e9d241 -bladeMaster 7/40 33ead686fd69c029 -bladeMaster 7/41 0b3cc3eeb990d7e1 -bladeMaster 7/42 6bef819119689f44 -bladeMaster 7/43 e2b0dfd925fb10f8 -bladeMaster 7/44 7d29d12a01e5168b -bladeMaster 7/45 7363ee6e461a8bb2 -bladeMaster 7/46 a2bd8ac892a0b781 -bladeMaster 7/49 6fba8ffe6f89d1eb -bladeMaster 7/5 03931d27f546a221 -bladeMaster 7/50 ddbf097caa73f4fc -bladeMaster 7/51 b4d1f3fee99e5efa -bladeMaster 7/52 cb3a69a39fb56a74 -bladeMaster 7/59 5ac26211f090acd3 -bladeMaster 7/6 e2d1a1d5017d1c0c -bladeMaster 7/60 141ea166c671ef4b -bladeMaster 7/61 85626d9063a379b2 -bladeMaster 7/62 a656a0f59fa2ea03 -bladeMaster 7/63 b98b042320fcdfde -bladeMaster 7/64 2aa9eb71979426b1 -bladeMaster 7/65 9630c08ac4e087d3 -bladeMaster 7/66 16a962dbb3c7c3f1 -bladeMaster 7/67 0d3a560fa1d746ce -bladeMaster 7/68 ce8241ee75ceaa46 -bladeMaster 7/69 282f47483acaabea -bladeMaster 7/7 aa8d3301e5057236 -bladeMaster 7/70 d16ff92b7007ded5 -bladeMaster 7/72 d4d5fd2b2f1dad13 -bladeMaster 7/73 68f776162a8792ca -bladeMaster 7/8 4feaa0e3d0c7c8a5 -bladeMaster 7/9 5ad9624c5620ae8c -bladeMaster 8/0 9b9a7a7bf861be8a -bladeMaster 8/1 634609a920e991d8 -bladeMaster 8/10 9ce3be8a17f752bd -bladeMaster 8/11 66d2d68dfcc6914b -bladeMaster 8/12 59f640bd96b716ba -bladeMaster 8/13 a7b48976784fac21 -bladeMaster 8/14 25d03feee06736b6 -bladeMaster 8/15 de6cecd6538ce15b -bladeMaster 8/16 66d9369fd917fd5d -bladeMaster 8/17 7b4162572a96b92f -bladeMaster 8/18 6726786323094263 -bladeMaster 8/19 35292b6772e129fd -bladeMaster 8/2 31d1b8010dd6f691 -bladeMaster 8/20 bbf5ee37ece07164 -bladeMaster 8/21 b3e580191404ac0d -bladeMaster 8/22 132ee1f0a2ee3178 -bladeMaster 8/23 21ee4134ab09c2cb -bladeMaster 8/24 2ef7d69c70af8b3e -bladeMaster 8/25 ec1d8a199cd28f39 -bladeMaster 8/26 430ffbb81db2bb56 -bladeMaster 8/27 102c10486d70557e -bladeMaster 8/28 6a31c471035d92b2 -bladeMaster 8/29 f73577e8d7cd8cd7 -bladeMaster 8/3 70452b47711a6e03 -bladeMaster 8/30 e72a4b8afd9e422f -bladeMaster 8/31 815fbc34c04edd73 -bladeMaster 8/32 411de2c71a15b4c1 -bladeMaster 8/33 b194d4908c49ec2c -bladeMaster 8/34 1bc73d0f76a88b6f -bladeMaster 8/35 a309936b7717eedc -bladeMaster 8/36 722a5e8395d79411 -bladeMaster 8/37 b702d4d82f4b08cf -bladeMaster 8/38 8158c1adf2ad09e6 -bladeMaster 8/39 0ec3ef0af2462c4e -bladeMaster 8/4 b7eee9e29abeb525 -bladeMaster 8/40 62d81d7bce347527 -bladeMaster 8/41 dc8356c53bd5047c -bladeMaster 8/42 788c7b408689bf09 -bladeMaster 8/43 3bedd3d9aac0e300 -bladeMaster 8/44 4be4f54c1020014d -bladeMaster 8/45 919c60babc56136d -bladeMaster 8/46 dc3d4d6bf65dcfd9 -bladeMaster 8/47 3e8f4d4b9ca71d65 -bladeMaster 8/48 a53c4db3bacf635a -bladeMaster 8/49 58199b28d3f7729b -bladeMaster 8/5 523f735c90d37a0d -bladeMaster 8/50 adf744d367638172 -bladeMaster 8/51 0d6456709065c20a -bladeMaster 8/52 53efbb368668ec43 -bladeMaster 8/59 ff033336c5f744b5 -bladeMaster 8/6 b4a29265abe94b1f -bladeMaster 8/60 91b03d9456c97748 -bladeMaster 8/61 af71081f4096a120 -bladeMaster 8/62 f629e33fb0099c7b -bladeMaster 8/63 17a8a44263ab5bbb -bladeMaster 8/64 338b0c4f7485bb61 -bladeMaster 8/65 3efc565807ca7927 -bladeMaster 8/66 9520ac3f4eeec17f -bladeMaster 8/67 77195732f4c822a5 -bladeMaster 8/68 0dd8cf0cc57c4952 -bladeMaster 8/69 bb01008303f50246 -bladeMaster 8/7 86661c7f402ab106 -bladeMaster 8/70 bd324a9e5e8d16ce -bladeMaster 8/71 8ad5efac0639ffea -bladeMaster 8/72 404286820d80a35d -bladeMaster 8/73 2331974c95a90f91 -bladeMaster 8/8 d32189d70efbb9d1 -bladeMaster 8/9 83df4380fed3865c -bladeMaster 9/0 a2024beecf7678bf -bladeMaster 9/1 943400494704c5b8 -bladeMaster 9/10 aaf36ec24761935b -bladeMaster 9/11 973eaebab5e57b8d -bladeMaster 9/12 0167686f779a0840 -bladeMaster 9/13 6330e3d433b5db1f -bladeMaster 9/14 c5b22505dc4851b8 -bladeMaster 9/15 dc7905c33ff9c531 -bladeMaster 9/16 38e79518e8c12fb3 -bladeMaster 9/17 e354b954598de66f -bladeMaster 9/18 dbe41a0e2e3349c6 -bladeMaster 9/19 1e3489aec5bb312d -bladeMaster 9/2 c0bfddb65f019c13 -bladeMaster 9/20 5e4c05cc899093e5 -bladeMaster 9/21 162ea3ca43fce9cf -bladeMaster 9/22 ed76474b7ebda956 -bladeMaster 9/23 ecc11216cc960dd9 -bladeMaster 9/24 b8b0a2e056910ef7 -bladeMaster 9/25 eca14f0e53b9933a -bladeMaster 9/26 247c2597c4e614de -bladeMaster 9/27 0e189bdcd24b53fe -bladeMaster 9/28 57d034692c11506f -bladeMaster 9/29 abcbafa723c2da7e -bladeMaster 9/3 3d388fb0d6516d94 -bladeMaster 9/30 7397c416d676795d -bladeMaster 9/31 bf25c603c54d7b6b -bladeMaster 9/32 f43cf6d473972b55 -bladeMaster 9/33 836e44c63246ea92 -bladeMaster 9/34 36c268d2dca63598 -bladeMaster 9/35 4fa987824aed9168 -bladeMaster 9/36 42a1a37a3aa75559 -bladeMaster 9/37 7b65942e5bbd4ecb -bladeMaster 9/38 b9b3bbe46e6fc731 -bladeMaster 9/39 8330b0be73f28483 -bladeMaster 9/4 65327a98602c9670 -bladeMaster 9/40 7128ef91a1a3f14c -bladeMaster 9/41 d3f3622d16ec12dd -bladeMaster 9/42 63532487b9e13ded -bladeMaster 9/43 80e4d93f5c33b9c3 -bladeMaster 9/44 54936208c89e1abe -bladeMaster 9/45 d110a33f260a3710 -bladeMaster 9/46 c4ba8711b39158e7 -bladeMaster 9/47 120255b32930fa44 -bladeMaster 9/48 d23b58adde7c3fb8 -bladeMaster 9/49 2c6e7ff6cd0ee63c -bladeMaster 9/5 55faf332f8c9bd34 -bladeMaster 9/50 26944c61ae60d433 -bladeMaster 9/51 bbbd327cf9ebb2f7 -bladeMaster 9/52 96d3ea51d1988aad -bladeMaster 9/59 742ae58bc4a22dd6 -bladeMaster 9/6 7867f8bffc130f84 -bladeMaster 9/60 bcd5d2d14e804036 -bladeMaster 9/61 df0b78b1634930f8 -bladeMaster 9/62 6be8c428ad9fc8c8 -bladeMaster 9/63 cce79bc37ba15b6e -bladeMaster 9/64 a2e99f65d9e77c92 -bladeMaster 9/65 f057d7fcc033debb -bladeMaster 9/66 22413bc8142a7581 -bladeMaster 9/67 7e217967cfce17b3 -bladeMaster 9/68 8d9d4c67ed4c4453 -bladeMaster 9/69 96818dd633e401ff -bladeMaster 9/7 e7e0ba254538db29 -bladeMaster 9/70 66cfa71cf9ee9f88 -bladeMaster 9/71 b395f8d7750fc752 -bladeMaster 9/72 1ea7b3cf6359659d -bladeMaster 9/73 731021c2d50569b5 -bladeMaster 9/8 d5f1b5ae4c47f4ed -bladeMaster 9/9 5e5a0777ece28872 -newDarkWizard 0/0 6148c644d5bcc24a -newDarkWizard 0/1 3b6272f42a76e0b0 -newDarkWizard 0/10 af418bcce3ae0eb7 -newDarkWizard 0/11 ecdc29ba70e5da94 -newDarkWizard 0/12 f7ce84c4cedb6199 -newDarkWizard 0/13 8ad8e7356f8fe75d -newDarkWizard 0/14 481804e16d65b011 -newDarkWizard 0/15 64e4b861f3655c78 -newDarkWizard 0/16 b715f645bfb4e692 -newDarkWizard 0/17 40b98407df77a05c -newDarkWizard 0/18 55062da5392f303e -newDarkWizard 0/19 c80d481a22a9dd39 -newDarkWizard 0/2 446bb49b54716507 -newDarkWizard 0/20 b04607a1834e3801 -newDarkWizard 0/21 0570a2e7bf35f1c7 -newDarkWizard 0/22 e52762f1f0c69368 -newDarkWizard 0/23 0c54eac040e3ec9a -newDarkWizard 0/24 2eb6930d78a08bcd -newDarkWizard 0/25 d465c44bee53bf35 -newDarkWizard 0/26 76b127c82449129c -newDarkWizard 0/27 b290ce9d9a4418d6 -newDarkWizard 0/28 2ffdaac0a7cc4932 -newDarkWizard 0/3 8fc7944a94383abc -newDarkWizard 0/31 c52f3f5451c23f05 -newDarkWizard 0/32 bcd855a71ed02596 -newDarkWizard 0/33 29292a3fd568596e -newDarkWizard 0/34 5551e248e4e17e20 -newDarkWizard 0/35 e63340e2b213ebb0 -newDarkWizard 0/4 f3ac45596d4d7cf0 -newDarkWizard 0/5 5a085dab281cc3ed -newDarkWizard 0/6 1a0548e13255d118 -newDarkWizard 0/7 574604be40ab500b -newDarkWizard 0/8 2936b3cec8107278 -newDarkWizard 0/9 e1d77eccac1cefc1 -newDarkWizard 1/0 e2b774cd20bc0457 -newDarkWizard 1/1 3a7450498aac1b71 -newDarkWizard 1/2 f6e8bd3efa40904e -newDarkWizard 1/3 eba4517f76bc5199 -newDarkWizard 1/4 10e97ec4c698f3c6 -newDarkWizard 1/5 2b156cdfd049c813 -newDarkWizard 1/6 3d649c09a2c3b41c -newDarkWizard 1/7 1123bfe5218fd00c -newDarkWizard 1/8 87ae108c8e1a1b88 -newDarkWizard 10/0 6e5834a4270a9e15 -newDarkWizard 10/1 5d61a3ca60f0cd8b -newDarkWizard 10/10 e4697b0f3129273d -newDarkWizard 10/11 57a12fbc53629c88 -newDarkWizard 10/12 94505a03137b2b44 -newDarkWizard 10/13 4b765aef198648f6 -newDarkWizard 10/14 1423fd959a2e6138 -newDarkWizard 10/15 dbc03b2d52ebba2a -newDarkWizard 10/16 1966161011d464d6 -newDarkWizard 10/17 cc483b574fb4ff31 -newDarkWizard 10/18 11a473a1bf9f4f5b -newDarkWizard 10/19 f77c9baf03ffe1e0 -newDarkWizard 10/2 a3dfc866c7d200bd -newDarkWizard 10/20 207dd2d349cad1b8 -newDarkWizard 10/21 d1bff0494374ed3e -newDarkWizard 10/22 2f0afa6072f4fa2f -newDarkWizard 10/23 5243cae8a52fb15f -newDarkWizard 10/24 724c605e4a9f3b4c -newDarkWizard 10/25 ff5f3315d1b20ec3 -newDarkWizard 10/26 c4648370b3385146 -newDarkWizard 10/27 e7736d7ffbf8d312 -newDarkWizard 10/28 84993b553f45222c -newDarkWizard 10/29 e5e2a37a39edd5fc -newDarkWizard 10/3 051dc4b2cc996020 -newDarkWizard 10/30 147396b5579bc552 -newDarkWizard 10/31 bb747fcd7b7bb1ce -newDarkWizard 10/32 e484e2b4827490db -newDarkWizard 10/33 ed6ef671e97509dc -newDarkWizard 10/34 5396997a6cd04470 -newDarkWizard 10/35 6aa00ae348fc2056 -newDarkWizard 10/36 1d33aea4aca172cb -newDarkWizard 10/37 c76db39088c9f8d1 -newDarkWizard 10/38 737dd2fe9fc7ee79 -newDarkWizard 10/39 4dd0f52003db88d2 -newDarkWizard 10/4 79ba200805e1d3ae -newDarkWizard 10/40 20b965bdf784ad88 -newDarkWizard 10/41 4cc7be24862af47c -newDarkWizard 10/42 21de59d01ee484b0 -newDarkWizard 10/43 c90d71604f432c86 -newDarkWizard 10/44 8c4162377e9d18d8 -newDarkWizard 10/45 eeb018c49e789ce0 -newDarkWizard 10/46 4fb1db8d2e56f3d5 -newDarkWizard 10/47 1c1ba2df23c3e92e -newDarkWizard 10/48 33f5efc919992aad -newDarkWizard 10/49 c5cf1a52d2985873 -newDarkWizard 10/5 3835977f5d7296f0 -newDarkWizard 10/50 c7199716ff423976 -newDarkWizard 10/51 0167e5d36cd76078 -newDarkWizard 10/52 691a4aab8288dca9 -newDarkWizard 10/6 3084b9d168a46505 -newDarkWizard 10/62 260df4f87ccc963b -newDarkWizard 10/63 3626f9615960865b -newDarkWizard 10/64 4315260362cb4349 -newDarkWizard 10/65 35c65f2fb1e9664b -newDarkWizard 10/66 401552d7439ecd18 -newDarkWizard 10/67 a468c17e7338079f -newDarkWizard 10/68 8dcc91847bc8c1f3 -newDarkWizard 10/69 d4a32dc80cb74710 -newDarkWizard 10/7 974da2edebb28704 -newDarkWizard 10/70 2e74955f84ba7789 -newDarkWizard 10/71 278f26a27944d771 -newDarkWizard 10/8 a4f7f137be7b2ba8 -newDarkWizard 10/9 5fa066f2fdb49a8f -newDarkWizard 11/0 de1c704ab9a4bf86 -newDarkWizard 11/1 4440ef621f96fccc -newDarkWizard 11/10 13a4b0ab835fbed4 -newDarkWizard 11/11 a8392a4ae4686453 -newDarkWizard 11/12 dbede2222b753e21 -newDarkWizard 11/13 17c77cb6769ec011 -newDarkWizard 11/14 d8aab84a2d6ab89b -newDarkWizard 11/15 ee60faf23d6e1e38 -newDarkWizard 11/16 7b58ab9348f485eb -newDarkWizard 11/17 ac28c4643168af6f -newDarkWizard 11/18 3cfbb5598cf61099 -newDarkWizard 11/19 766e7565d2539965 -newDarkWizard 11/2 5b7b26b66387a51d -newDarkWizard 11/20 dc19315add4a745a -newDarkWizard 11/21 46250ca7984d2421 -newDarkWizard 11/22 02f236609d568107 -newDarkWizard 11/23 d5157b1566e83943 -newDarkWizard 11/24 c3a95d23f3184c1f -newDarkWizard 11/25 07335efa420d6ff9 -newDarkWizard 11/26 a41c4dcc142571b6 -newDarkWizard 11/27 9a9f3408b9a0f91a -newDarkWizard 11/28 4a88ded4b094197a -newDarkWizard 11/29 314c7b3fbc81863b -newDarkWizard 11/3 e373654bb4cd0d16 -newDarkWizard 11/30 8e806938095cb258 -newDarkWizard 11/31 c92e90b77d420bd3 -newDarkWizard 11/32 c21a097ae69c0d57 -newDarkWizard 11/33 ce99323dc186fa15 -newDarkWizard 11/34 1d0f4763ba3942e5 -newDarkWizard 11/35 fa88da337fa4bd19 -newDarkWizard 11/36 22c05a51b41c7cb2 -newDarkWizard 11/37 00fc256906de36de -newDarkWizard 11/38 c0967ac8cf0f237e -newDarkWizard 11/39 6769b4f21c6171bf -newDarkWizard 11/4 e7a614b2715048c6 -newDarkWizard 11/40 5037599e804948bb -newDarkWizard 11/41 fc276994e5578df1 -newDarkWizard 11/42 b54c6d3f98a67033 -newDarkWizard 11/43 98873df7f3118fcc -newDarkWizard 11/44 a425f97453152101 -newDarkWizard 11/45 c256264a369281f7 -newDarkWizard 11/46 32e352bc5c8bdcc5 -newDarkWizard 11/47 834760fd51626bc5 -newDarkWizard 11/48 0727e89a3aec966a -newDarkWizard 11/49 7b74d65a9eb1144e -newDarkWizard 11/5 574bd7a993e65b40 -newDarkWizard 11/50 71c6b6747d155c86 -newDarkWizard 11/51 fa284725e9d3786a -newDarkWizard 11/52 f63bcf36146fc5bd -newDarkWizard 11/59 dcb8cd79c3deeb9e -newDarkWizard 11/6 8d1023bf06541866 -newDarkWizard 11/60 657200b2bd385eb1 -newDarkWizard 11/61 cde2977a61d59884 -newDarkWizard 11/62 ee6045669d164f05 -newDarkWizard 11/63 89374c72922e6e1f -newDarkWizard 11/64 cb296d084484930a -newDarkWizard 11/65 4f45923e564861c4 -newDarkWizard 11/66 98e5f016e1cbb4ea -newDarkWizard 11/67 972fbe051bf8d6f7 -newDarkWizard 11/68 e42b301e980861d2 -newDarkWizard 11/69 85eea92e47abed13 -newDarkWizard 11/7 aac0434f887c9969 -newDarkWizard 11/70 85d3d1b6f12a9175 -newDarkWizard 11/71 d6e916d42140381d -newDarkWizard 11/72 9cde63ae1edbaafb -newDarkWizard 11/73 edbdd0c8b9954399 -newDarkWizard 11/8 827d1f695d96c665 -newDarkWizard 11/9 425b3f6393905ea3 -newDarkWizard 12/0 93ff30c6bad63fa4 -newDarkWizard 12/1 4a8b6ee2d58134a2 -newDarkWizard 12/10 1f0d281e869f0018 -newDarkWizard 12/100 0f44a3aef740a467 -newDarkWizard 12/101 47065e92aa162629 -newDarkWizard 12/102 624af3ca096f867c -newDarkWizard 12/103 8d22b303177919e8 -newDarkWizard 12/104 28f5ac64917bd204 -newDarkWizard 12/105 ba3ead8c8b3c48a0 -newDarkWizard 12/106 4f8b7623c6c11d2f -newDarkWizard 12/107 a4526078ac031e78 -newDarkWizard 12/108 3fc8ee674556ca7a -newDarkWizard 12/109 efb7331191a62aa1 -newDarkWizard 12/11 261da925c0199441 -newDarkWizard 12/110 f9cb0b5cf573a34e -newDarkWizard 12/111 e9183aec3d4d4e90 -newDarkWizard 12/112 105db025d1fee6a3 -newDarkWizard 12/113 4ea2fd61eb749772 -newDarkWizard 12/114 e942089f9673f9a0 -newDarkWizard 12/115 e07b13c674710ea2 -newDarkWizard 12/116 be94d6102ff0fd6b -newDarkWizard 12/117 ef7c8c6034882a1a -newDarkWizard 12/118 9df14e0771a3ed28 -newDarkWizard 12/119 b7d5e704cd20d8ab -newDarkWizard 12/12 d746766633d9d7a6 -newDarkWizard 12/120 9fa1f1f0e439f7fe -newDarkWizard 12/121 84137fd517c0771a -newDarkWizard 12/122 eca684a8bc0d863b -newDarkWizard 12/123 fd2c3e65beb8ca02 -newDarkWizard 12/124 a79e9e3c3cb30899 -newDarkWizard 12/125 e9c6e71ea30868fa -newDarkWizard 12/126 e57a33d4f2e4884d -newDarkWizard 12/127 16ad09f1c05a13a3 -newDarkWizard 12/128 bcf2f1dda7d056ed -newDarkWizard 12/129 00971f39b84b94dc -newDarkWizard 12/13 b7008e58df70ec90 -newDarkWizard 12/130 f09df24897432af2 -newDarkWizard 12/131 81f4a4b8beb19e11 -newDarkWizard 12/132 ec1f5a3ae4aa224f -newDarkWizard 12/133 549d13e55deba441 -newDarkWizard 12/134 cfb4db0d622e9952 -newDarkWizard 12/135 b8aab0f335106700 -newDarkWizard 12/136 deed836136f8a36f -newDarkWizard 12/137 26e4cfd83b53b2f9 -newDarkWizard 12/138 a4770273a8e335eb -newDarkWizard 12/139 44872c8b99a75c3b -newDarkWizard 12/14 1c67519b1147cc1c -newDarkWizard 12/140 15a879787bbcbf19 -newDarkWizard 12/141 173d76d6c3d41d27 -newDarkWizard 12/142 7e8d2372777c01b9 -newDarkWizard 12/143 8d331dabc1bac6d3 -newDarkWizard 12/15 bbe0e7917dd8aaa8 -newDarkWizard 12/16 9cb3ca87776c3a24 -newDarkWizard 12/17 3a8d0dffa49a4aa4 -newDarkWizard 12/18 dec5e842bfeabf50 -newDarkWizard 12/19 37c0feff1cec03b0 -newDarkWizard 12/2 22adb7de6b9c1aab -newDarkWizard 12/21 0792af6ade79b23e -newDarkWizard 12/22 df69e19845bcf6dc -newDarkWizard 12/23 dab587ec6e6659be -newDarkWizard 12/24 75bc9308644aaa9e -newDarkWizard 12/26 56b00b7c00d1fd28 -newDarkWizard 12/3 d009334cdf829fb4 -newDarkWizard 12/30 cac9cad9b5951fb7 -newDarkWizard 12/31 284c17aa996e5e0d -newDarkWizard 12/32 46f67b1cc531f17b -newDarkWizard 12/33 7e1e271a991930b9 -newDarkWizard 12/34 b911958ef761edcd -newDarkWizard 12/35 4b2a86be6d945ab7 -newDarkWizard 12/36 9e7f8d98fc4b706c -newDarkWizard 12/37 1ee3f1babce223bd -newDarkWizard 12/38 9c733099dbdd5d99 -newDarkWizard 12/39 86467194d304c4b4 -newDarkWizard 12/4 17e138804375366e -newDarkWizard 12/40 a1da41fa15b7bd15 -newDarkWizard 12/41 16b6121afc453edc -newDarkWizard 12/42 cb0840807e6202e6 -newDarkWizard 12/43 f4b5ff0c2f21a1d1 -newDarkWizard 12/44 1535432187544f64 -newDarkWizard 12/45 fd1c887439786238 -newDarkWizard 12/46 53e6128df3287e14 -newDarkWizard 12/47 ca91a9ac7feab5ae -newDarkWizard 12/48 571e43fe4f174904 -newDarkWizard 12/49 737470c8eb088c97 -newDarkWizard 12/5 4ccf03c572cbb72d -newDarkWizard 12/50 2ea0afa078b2e851 -newDarkWizard 12/6 e6c54e868d9c8276 -newDarkWizard 12/60 dc16ebda90571882 -newDarkWizard 12/61 dfbb75ea2cddc690 -newDarkWizard 12/62 b43d8f3b24526cc5 -newDarkWizard 12/63 7aaaabe90740b10a -newDarkWizard 12/64 86e39525c0233d4d -newDarkWizard 12/65 cc960f30a80c2115 -newDarkWizard 12/7 ee4db2a40fe1d790 -newDarkWizard 12/70 701ad68f7523e5db -newDarkWizard 12/71 f2d1c5dd88bf6fb7 -newDarkWizard 12/72 a0036bf2b5c9f901 -newDarkWizard 12/8 78703323910e5520 -newDarkWizard 12/9 1a7fd8b654d50f7a -newDarkWizard 13/0 ec1c1559f1d18496 -newDarkWizard 13/1 e14621839844b08d -newDarkWizard 13/10 8e90f8c48bd42e07 -newDarkWizard 13/103 2e29a549431c3526 -newDarkWizard 13/104 9efa0dd03d7ed822 -newDarkWizard 13/105 46a39d1427bc7e0e -newDarkWizard 13/106 f95d077bb9ec3379 -newDarkWizard 13/107 4a2a64479b1228ef -newDarkWizard 13/109 c61e5b23b0eec304 -newDarkWizard 13/11 d13c6459bbb64a40 -newDarkWizard 13/110 39722cb662031540 -newDarkWizard 13/111 837fa79b85f32d64 -newDarkWizard 13/112 8775f5a1a66dbd4e -newDarkWizard 13/113 bbc36515dfe130e6 -newDarkWizard 13/114 f1fcf8fda34bbede -newDarkWizard 13/115 4b62bbdd097e1cba -newDarkWizard 13/116 f2e15b06ca0c8910 -newDarkWizard 13/117 67f8b90e8b358668 -newDarkWizard 13/118 0e8c88a0874a8f1a -newDarkWizard 13/119 68a6074b5f86dcf8 -newDarkWizard 13/12 c3139242fd6a9e08 -newDarkWizard 13/120 103cd2914f3ef79a -newDarkWizard 13/121 992df813fed0e7a0 -newDarkWizard 13/122 33bbbe55bc4f1e1c -newDarkWizard 13/123 79898c348456289a -newDarkWizard 13/124 9ac7f172011c19f6 -newDarkWizard 13/125 a2f10043f762d614 -newDarkWizard 13/126 d60487047dcdbbc6 -newDarkWizard 13/127 3e7ce14410201fe2 -newDarkWizard 13/128 4ab89476787d5096 -newDarkWizard 13/129 6293ea2678781194 -newDarkWizard 13/13 433711a78aeb7df0 -newDarkWizard 13/130 afa434877766766c -newDarkWizard 13/131 8b01ff51ed0964d2 -newDarkWizard 13/132 9b4d447a033c6ff8 -newDarkWizard 13/133 4c7b7cf5ecff27da -newDarkWizard 13/134 bf7cecc2cdff11e2 -newDarkWizard 13/135 eff3fb845f3233c0 -newDarkWizard 13/136 65186b97705adc6c -newDarkWizard 13/137 6d630b3e31aae100 -newDarkWizard 13/138 ab9e2ddbf72a88fe -newDarkWizard 13/139 59cd2a15e6baefb4 -newDarkWizard 13/14 b3f81ee5a9f4c648 -newDarkWizard 13/140 f9bc591f06433b54 -newDarkWizard 13/141 a0a2ddd265a5350c -newDarkWizard 13/142 0e8add9381725c70 -newDarkWizard 13/143 808b265bccc50fee -newDarkWizard 13/144 ea6ae6a3b9372580 -newDarkWizard 13/15 ffc1beb4bff6fc3d -newDarkWizard 13/16 0e793b2f56c36818 -newDarkWizard 13/17 5771722e4297e152 -newDarkWizard 13/18 ae372773a7f32aa0 -newDarkWizard 13/19 5b53d4ea6df240fa -newDarkWizard 13/2 73c1d9a8959927b6 -newDarkWizard 13/20 7664cc5a14b9f313 -newDarkWizard 13/21 37db226acf86b2fa -newDarkWizard 13/22 2454142b02cbda5f -newDarkWizard 13/23 7ec4dfcb8c0e6a18 -newDarkWizard 13/24 583ac536cb93b54b -newDarkWizard 13/25 ee32040d991ceff1 -newDarkWizard 13/26 742984a84dd37513 -newDarkWizard 13/27 391862fc8c35bc9f -newDarkWizard 13/28 d779d63c7c7fe1d9 -newDarkWizard 13/29 90fa6251d1bcb9ae -newDarkWizard 13/3 5f63177b5aa006ec -newDarkWizard 13/30 c159bbcde4af9dea -newDarkWizard 13/31 1da2b5ed08b97d76 -newDarkWizard 13/32 943ea9352304524b -newDarkWizard 13/33 2b1982b2b6e88a2d -newDarkWizard 13/34 4428ef56c0659e11 -newDarkWizard 13/35 8964d76b11562cdd -newDarkWizard 13/36 c96e488744f9009f -newDarkWizard 13/37 ba9f152db4134f61 -newDarkWizard 13/38 dafcbc1d82636805 -newDarkWizard 13/39 f3c397b2e6866112 -newDarkWizard 13/4 a93231a25048c6ed -newDarkWizard 13/40 c930abdd1f696fd0 -newDarkWizard 13/41 0eec4c53aeb6f1c4 -newDarkWizard 13/42 58317cfa8406cc3b -newDarkWizard 13/43 c8c0b7cf150746ce -newDarkWizard 13/44 6c6d131ef71d36e6 -newDarkWizard 13/45 c0faaf63b34b749c -newDarkWizard 13/46 9a0d6d50410b26e0 -newDarkWizard 13/47 85f907d4f58701dc -newDarkWizard 13/48 8ccf5abcb50f420c -newDarkWizard 13/49 21d2e28fce57b296 -newDarkWizard 13/5 6e204d87a0904853 -newDarkWizard 13/50 5999577e295ec696 -newDarkWizard 13/51 cea4322a520f4396 -newDarkWizard 13/52 b2fec3c09ed665c8 -newDarkWizard 13/53 ca39bb43cc2103f2 -newDarkWizard 13/54 203f1e4dcdae2364 -newDarkWizard 13/55 911d375e01e17082 -newDarkWizard 13/56 54f6c96237df3cd6 -newDarkWizard 13/57 a1d8a4e97e864de8 -newDarkWizard 13/58 9b67e33a3a80e2d6 -newDarkWizard 13/59 162212b838841cd2 -newDarkWizard 13/60 18eab2127715308c -newDarkWizard 13/61 6317b0d6356c5972 -newDarkWizard 13/62 0647de455bf41a6e -newDarkWizard 13/63 15084336bae2b9de -newDarkWizard 13/64 fb57dd0be8719484 -newDarkWizard 13/65 7771b56a5b615694 -newDarkWizard 13/66 23d61a9d08b64d9c -newDarkWizard 13/67 e84afc69e350468d -newDarkWizard 13/68 49b9394e289a46f8 -newDarkWizard 13/69 c7cc241c5e39ba18 -newDarkWizard 13/7 e4b865a49e5d7e18 -newDarkWizard 13/70 c56f2a9a482d7c14 -newDarkWizard 13/71 0cc8df0da73ae888 -newDarkWizard 13/72 d6a8e5253c646814 -newDarkWizard 13/73 2c3eaab8cd2ef8aa -newDarkWizard 13/74 6ed7fb85dab50aec -newDarkWizard 13/75 68d83f8d90db519e -newDarkWizard 13/76 9755753997a22452 -newDarkWizard 13/8 dbdf7510ce65f165 -newDarkWizard 13/80 77acc5c020d01218 -newDarkWizard 13/81 af5045acd1fdbb48 -newDarkWizard 13/82 b9a945ed967df6aa -newDarkWizard 13/83 5af11662c05881d4 -newDarkWizard 13/84 674b0fd5517921fa -newDarkWizard 13/85 538c949b979b3f30 -newDarkWizard 13/86 f1743c69961b640a -newDarkWizard 13/87 2a5b0386dd103ce8 -newDarkWizard 13/88 bbb6fcdecca098b2 -newDarkWizard 13/89 6988ca2f28aaad60 -newDarkWizard 13/9 43695ec69848ec84 -newDarkWizard 13/90 8c515c2f1d5fb8ba -newDarkWizard 13/91 a433ad9b34f0966e -newDarkWizard 13/92 d22a90cfa813d354 -newDarkWizard 13/93 a1ff3164a7488c18 -newDarkWizard 13/94 0f70104308088426 -newDarkWizard 13/95 9062522078f5ff2c -newDarkWizard 13/96 d2b46c9364c44268 -newDarkWizard 13/97 38ee94908f28c636 -newDarkWizard 13/98 94385a23a173e28a -newDarkWizard 13/99 2ca6b790b9ed0e88 -newDarkWizard 14/0 7687ed5c5a0bb3cc -newDarkWizard 14/1 43efe29f5a7b367c -newDarkWizard 14/10 ebc17bd6838c4c1a -newDarkWizard 14/100 c3c1c2018ed854d2 -newDarkWizard 14/101 4aeb9ad5b9824447 -newDarkWizard 14/102 c54820f6d2711b4f -newDarkWizard 14/103 a1fa9d72e4ba8b35 -newDarkWizard 14/104 53263af3c8182769 -newDarkWizard 14/105 3d864ea4c675ac43 -newDarkWizard 14/106 0fd113a915866565 -newDarkWizard 14/107 864dd94b38b96937 -newDarkWizard 14/108 ef8e330ec3c1a5af -newDarkWizard 14/109 72badc46b1be28d9 -newDarkWizard 14/11 af37be6d7fb64aea -newDarkWizard 14/110 a0919415cdc1655a -newDarkWizard 14/111 36eb21124772bd51 -newDarkWizard 14/112 a1a651b2cfb98548 -newDarkWizard 14/113 702670042271cb48 -newDarkWizard 14/114 2dd1e312768bc4a0 -newDarkWizard 14/115 985272396eb1f18e -newDarkWizard 14/116 772aaaf5a39b83b8 -newDarkWizard 14/117 5a85748f68a698c6 -newDarkWizard 14/118 2320c542dbac586a -newDarkWizard 14/119 526afc5288ce72de -newDarkWizard 14/12 4dad4b1d2301d0bf -newDarkWizard 14/120 248b1b1dd150131a -newDarkWizard 14/121 b77ff345b3189f7e -newDarkWizard 14/122 0a042784c14ca2b0 -newDarkWizard 14/123 385f18b517e7127c -newDarkWizard 14/124 9d26838c6249afd2 -newDarkWizard 14/125 0991a2018c39e978 -newDarkWizard 14/126 510c1f6fdbfd3042 -newDarkWizard 14/127 4b0f668f3a61af88 -newDarkWizard 14/128 8929e865c36d9bd8 -newDarkWizard 14/129 a6da5012265e0c72 -newDarkWizard 14/13 0838130c898a904a -newDarkWizard 14/130 a29c550bcfff37b8 -newDarkWizard 14/131 84cd4ebfa1e4a1be -newDarkWizard 14/132 71c52f5e2e4cf38e -newDarkWizard 14/133 21171bb1040b9486 -newDarkWizard 14/134 aa24c347d7e530c2 -newDarkWizard 14/135 5085d8581e5db5b2 -newDarkWizard 14/136 4371a56c60158526 -newDarkWizard 14/137 3fe5a1fb3f879b8e -newDarkWizard 14/138 5cc28da8b1c98ea2 -newDarkWizard 14/139 b0eb7780e103633a -newDarkWizard 14/14 84900ac408a7a05a -newDarkWizard 14/140 2d090c128ea6cf60 -newDarkWizard 14/141 1ba76cf5bdd445d2 -newDarkWizard 14/142 4f269794114dedac -newDarkWizard 14/143 fcab1a14123edcac -newDarkWizard 14/144 d600902b31f3833a -newDarkWizard 14/145 d3d93c927b7a8e84 -newDarkWizard 14/146 bf78d8be2dbb5178 -newDarkWizard 14/147 01629755528c480c -newDarkWizard 14/148 eb9bc684792188c4 -newDarkWizard 14/149 728ed6c42247a870 -newDarkWizard 14/15 7c12d60791a13e36 -newDarkWizard 14/150 0a5e090f2c8303a2 -newDarkWizard 14/151 accd2b0c434585d2 -newDarkWizard 14/152 87606823d10effe4 -newDarkWizard 14/153 426d307ef487c0d0 -newDarkWizard 14/154 b44f8a7e3bf6c7ec -newDarkWizard 14/155 cbb7cb6e0e86ea36 -newDarkWizard 14/156 bebf7cf6a99941be -newDarkWizard 14/157 10a943a530248f40 -newDarkWizard 14/158 76ae7ca1d81ac196 -newDarkWizard 14/159 3a329cf37ba03708 -newDarkWizard 14/16 922aef98fa16d5d0 -newDarkWizard 14/160 bb7a8542dc4d5dd6 -newDarkWizard 14/161 90755485950e6310 -newDarkWizard 14/162 66e291ba2aea6e0c -newDarkWizard 14/163 07dc56eba635feca -newDarkWizard 14/169 594beea6626ff9be -newDarkWizard 14/17 29aa3fff7727a0f4 -newDarkWizard 14/18 4080bb375ad7314a -newDarkWizard 14/19 c6acab5d038fbb4a -newDarkWizard 14/2 739d114d44fef314 -newDarkWizard 14/20 91c9456c261f6630 -newDarkWizard 14/21 60da8775fefa236b -newDarkWizard 14/22 86e4a42b7cecc804 -newDarkWizard 14/23 a649a7d8cb0e8a18 -newDarkWizard 14/24 b13f2bd6248f6a3d -newDarkWizard 14/25 d4e734c039a7a45b -newDarkWizard 14/26 2953b98d49f69e35 -newDarkWizard 14/28 098fa891a2274ebc -newDarkWizard 14/29 a300f5a1d7e34d08 -newDarkWizard 14/3 edffbafc46d4b488 -newDarkWizard 14/31 b99b62b26f94b4d0 -newDarkWizard 14/32 b5c4129a02ca6f76 -newDarkWizard 14/33 18b5d21922609b66 -newDarkWizard 14/34 8cc44a4740cf5835 -newDarkWizard 14/35 17b98d102bed7bc8 -newDarkWizard 14/36 4a6841647506be78 -newDarkWizard 14/37 68c2b70bbcabbd5c -newDarkWizard 14/38 6fba31e96ed3bfce -newDarkWizard 14/39 468af4c0a4dedcd6 -newDarkWizard 14/4 806e1d96a2770e1a -newDarkWizard 14/40 6a1bcc71bbbc0394 -newDarkWizard 14/41 5d37f80c1996f6a5 -newDarkWizard 14/42 2da58f1adce2b465 -newDarkWizard 14/43 e527d6ed9ab30357 -newDarkWizard 14/44 8fc47fcd5c13f5d7 -newDarkWizard 14/45 04092953f41e2c0d -newDarkWizard 14/46 3164ae11d06f2aa3 -newDarkWizard 14/47 8dd999f3b500bc01 -newDarkWizard 14/48 4cacbdf84f5c084f -newDarkWizard 14/49 e4497d6e86b06b91 -newDarkWizard 14/5 d4e23c84af5b61b6 -newDarkWizard 14/50 297dc274145243f9 -newDarkWizard 14/51 eaae49a22d67ed98 -newDarkWizard 14/52 82ea682b095553aa -newDarkWizard 14/53 3e36219f41dd49da -newDarkWizard 14/54 f7e14ec176498914 -newDarkWizard 14/55 6422dc67c13905ac -newDarkWizard 14/56 7457aa9af99f9b62 -newDarkWizard 14/57 ccb12e55b843cfe0 -newDarkWizard 14/58 2d1874c554adeab6 -newDarkWizard 14/59 e420fe067568960e -newDarkWizard 14/6 42cbbeef57197576 -newDarkWizard 14/60 2d85beaf78e48e8c -newDarkWizard 14/61 f1977d765ef163d8 -newDarkWizard 14/62 bf251654df5e2888 -newDarkWizard 14/63 fcab362470a76c50 -newDarkWizard 14/64 6f32b9156477fbca -newDarkWizard 14/65 ffb1be9817394cc0 -newDarkWizard 14/66 4656d34ed9a21292 -newDarkWizard 14/67 d20e8869c4fb436a -newDarkWizard 14/68 16bcb794330ab43a -newDarkWizard 14/7 f98ef4bf81ceca2e -newDarkWizard 14/70 fba79d623c23adc4 -newDarkWizard 14/71 feb13c5d5fba6f0a -newDarkWizard 14/72 c73fe2104cc5c98a -newDarkWizard 14/73 2040bb0b44f2ab8c -newDarkWizard 14/74 335af2dc3ca957ba -newDarkWizard 14/75 77ae291006880ad2 -newDarkWizard 14/76 11d4a9135aaf2d94 -newDarkWizard 14/77 0bc76098922a22c4 -newDarkWizard 14/78 5ce19675f29ffef2 -newDarkWizard 14/79 b103519805edca7e -newDarkWizard 14/8 396e7465dbd5103a -newDarkWizard 14/80 3945ca93e700a3d2 -newDarkWizard 14/81 2eac8a445168a550 -newDarkWizard 14/82 d689c7b05af56ece -newDarkWizard 14/83 1e96afbab5dfc08e -newDarkWizard 14/84 724f869df7b45a2c -newDarkWizard 14/85 1dced9af29daa258 -newDarkWizard 14/86 6b8f8ccb229327e4 -newDarkWizard 14/87 d2e73e24f6db65f0 -newDarkWizard 14/88 f4358467e18ca506 -newDarkWizard 14/89 44928c2926a3d930 -newDarkWizard 14/9 b2fffac7a48f72dc -newDarkWizard 14/90 53f0311b9f2fc5de -newDarkWizard 14/91 65022da49602d932 -newDarkWizard 14/92 751ece030d8f586e -newDarkWizard 14/93 dc23b041672dbf8c -newDarkWizard 14/94 fb77641969753e80 -newDarkWizard 14/95 bfdb112f180a54a4 -newDarkWizard 14/96 a54778a0852d5934 -newDarkWizard 14/97 cfe8357cdbe016fa -newDarkWizard 14/98 1376f8214eacff26 -newDarkWizard 14/99 b37ed90fcb22cd02 -newDarkWizard 15/0 380d400bb66e036e -newDarkWizard 15/1 dc8591dbd2137bce -newDarkWizard 15/10 21a0282cffb51562 -newDarkWizard 15/11 8d1ba23945c505bc -newDarkWizard 15/12 f8c6ddaa5efabdd2 -newDarkWizard 15/13 928003e1f6c8a8b8 -newDarkWizard 15/14 f7421525e28a327a -newDarkWizard 15/15 07ac8ae24d3ae7f4 -newDarkWizard 15/16 823b4257e6f1a298 -newDarkWizard 15/17 d78b10a82cefbb62 -newDarkWizard 15/18 6a805dc1681fd44a -newDarkWizard 15/19 22bd911fb789a218 -newDarkWizard 15/2 42ba84ba2404ffd6 -newDarkWizard 15/20 ccaa5bc38f4da3fc -newDarkWizard 15/21 9bef7cc3e5f697e0 -newDarkWizard 15/22 674a35c786edfe15 -newDarkWizard 15/23 283ff8c7b616db72 -newDarkWizard 15/24 71dbdfdf68865650 -newDarkWizard 15/26 8aaeecff0a988ec2 -newDarkWizard 15/27 42e85a21cd9d7353 -newDarkWizard 15/28 919220e10592c824 -newDarkWizard 15/29 a00bdfd3197d3d70 -newDarkWizard 15/3 f7299d255bab7cfc -newDarkWizard 15/30 4a17128a5a38b5ac -newDarkWizard 15/31 e1c4509fdea7f517 -newDarkWizard 15/32 4cf7800fac29969c -newDarkWizard 15/33 e282abfd8bae22c0 -newDarkWizard 15/34 8e54304ee49a4863 -newDarkWizard 15/35 6c1a0304e18f007a -newDarkWizard 15/36 6c8276b142c7f7a0 -newDarkWizard 15/4 75520a92a6ed64ae -newDarkWizard 15/5 ed3071554d69ebce -newDarkWizard 15/6 7e26bb700d71c8ea -newDarkWizard 15/7 ba439864b3f603b2 -newDarkWizard 15/8 6e01d92a894ce69e -newDarkWizard 15/9 c926c2ccbdf410fe -newDarkWizard 2/0 b2682c3f2e349fd9 -newDarkWizard 2/1 aaabd7d6aa131665 -newDarkWizard 2/10 1e37082745ff5528 -newDarkWizard 2/11 0d4dbb3c35f6a83a -newDarkWizard 2/12 f3910ca3c4eaad17 -newDarkWizard 2/13 d7263f6abbc2ba2c -newDarkWizard 2/14 86ae31220a4b56ba -newDarkWizard 2/15 be5bc0f8f6a5ae78 -newDarkWizard 2/16 d31f64d10aefb318 -newDarkWizard 2/17 c9eaee5cd2875fab -newDarkWizard 2/18 4031e32dfd22e4b1 -newDarkWizard 2/2 5e967c6cdb7748a8 -newDarkWizard 2/3 8adfee89e2886691 -newDarkWizard 2/4 bb750a672c1f6f0f -newDarkWizard 2/5 60f3c9f9f50c628a -newDarkWizard 2/6 ccbb347fe7f9a9cf -newDarkWizard 2/7 d9bab54319d8416b -newDarkWizard 2/8 d2636cbca66f6707 -newDarkWizard 2/9 73b36f9062b43ca2 -newDarkWizard 3/0 1671c9f837071993 -newDarkWizard 3/1 90dd83ac6df5289b -newDarkWizard 3/10 66c0630894b7c596 -newDarkWizard 3/11 67cce18d65f774b8 -newDarkWizard 3/2 659293241f6c3082 -newDarkWizard 3/3 efb78d70462f76d8 -newDarkWizard 3/4 da7b9c3c665ef174 -newDarkWizard 3/5 a8c2efcfbf84c642 -newDarkWizard 3/6 ba4a6e07c8f44ddf -newDarkWizard 3/7 ed655de83270a6a8 -newDarkWizard 3/8 75f0ca8fa18466d2 -newDarkWizard 3/9 a6d7313deb1fc387 -newDarkWizard 4/0 208c9d48bd065c81 -newDarkWizard 4/1 0a6524a1775a82c8 -newDarkWizard 4/10 ed6c74c9880e31ae -newDarkWizard 4/11 4fb2c87dde2a4b99 -newDarkWizard 4/12 936a259438e16961 -newDarkWizard 4/13 7c8ce1ce78faac17 -newDarkWizard 4/14 d3ea59afaf4d788c -newDarkWizard 4/15 77473bfd07e18407 -newDarkWizard 4/16 c7ed0d47e36464b6 -newDarkWizard 4/17 bbb33009f4f2c5ff -newDarkWizard 4/18 cfeb54496c542cbf -newDarkWizard 4/19 b33cb11cb9294650 -newDarkWizard 4/2 18e8d081ed1b6126 -newDarkWizard 4/20 5d7b211597258966 -newDarkWizard 4/21 482ba86f97a80deb -newDarkWizard 4/22 8697ed72db14d3cc -newDarkWizard 4/23 90dd6e9857f7096e -newDarkWizard 4/24 3bfe06d2eae05f72 -newDarkWizard 4/3 2b6dbe3e200374b6 -newDarkWizard 4/4 4eed496b19fbfb78 -newDarkWizard 4/5 e4f9c01ee0c0cec3 -newDarkWizard 4/6 83a30ddd31916397 -newDarkWizard 4/7 2fa1607b3b6d70d9 -newDarkWizard 4/8 0ba60931e625ccd7 -newDarkWizard 4/9 7394daa253f51b2d -newDarkWizard 5/0 1db27e6011ec8375 -newDarkWizard 5/1 bd5fc74cc632a556 -newDarkWizard 5/10 70d03e3800250890 -newDarkWizard 5/11 16a097dfb577677b -newDarkWizard 5/12 7941fd482295ac54 -newDarkWizard 5/13 b16b0175a12e780a -newDarkWizard 5/14 8e01e0b19bc8deef -newDarkWizard 5/15 941b60c5cf968aee -newDarkWizard 5/16 5b9884af7bfded30 -newDarkWizard 5/17 1c15ffdc455e3e56 -newDarkWizard 5/18 d37b2503aaa4ce8c -newDarkWizard 5/19 1b0a6a87963be377 -newDarkWizard 5/2 d65546a2e750d8fb -newDarkWizard 5/20 2a9ee4a8fec935a9 -newDarkWizard 5/21 6fadcf9da5e57577 -newDarkWizard 5/22 fd71956b79d2e865 -newDarkWizard 5/23 df17faa9e4af0b0d -newDarkWizard 5/3 6b223b41ba3ad129 -newDarkWizard 5/30 0df97d021ae48447 -newDarkWizard 5/31 708a96ade6944b7e -newDarkWizard 5/33 6a201ad8f0098eed -newDarkWizard 5/34 c8f14bb179a494c7 -newDarkWizard 5/36 d31e3d69ae84e405 -newDarkWizard 5/4 9e303935aa0f13cd -newDarkWizard 5/5 39f84a791d6f4b3e -newDarkWizard 5/6 ff01d2a4e4c59815 -newDarkWizard 5/7 b0e57c62b9f040b6 -newDarkWizard 5/8 a815f606edfdefd2 -newDarkWizard 5/9 4d77696b7d05b11f -newDarkWizard 6/0 e2e8bcbefb137f03 -newDarkWizard 6/1 447d109b564e33e7 -newDarkWizard 6/10 b6ac17109ebd4529 -newDarkWizard 6/11 1072ad629ef009ea -newDarkWizard 6/12 6438993dd3922d93 -newDarkWizard 6/13 8b1cd10abd5efdeb -newDarkWizard 6/14 e565c413af3a6aa8 -newDarkWizard 6/15 5460d41632ba7a50 -newDarkWizard 6/16 e65a1de11ae5f628 -newDarkWizard 6/17 9137983c2f995efd -newDarkWizard 6/18 1c838dc475399069 -newDarkWizard 6/19 fdc624be784b197c -newDarkWizard 6/2 1a785e601dd7122d -newDarkWizard 6/20 f92710c51a7137de -newDarkWizard 6/21 df462c4e56d38476 -newDarkWizard 6/3 bfb6e14d71297ef5 -newDarkWizard 6/4 4e86bf8021accf09 -newDarkWizard 6/5 184507f6d12f2d0a -newDarkWizard 6/6 24eca5a0ada310a1 -newDarkWizard 6/7 a28126a54a99f633 -newDarkWizard 6/8 f5b3978a2027de56 -newDarkWizard 6/9 f0a2722c71cb127b -newDarkWizard 7/0 bf2f5141452365e5 -newDarkWizard 7/1 0f13732cc26b40e4 -newDarkWizard 7/10 94fedf38916b2325 -newDarkWizard 7/11 4659edcf9e73987b -newDarkWizard 7/12 bf5712ff579e0e8a -newDarkWizard 7/13 5bc79eecf7e66ce9 -newDarkWizard 7/14 1da89b00662f29f0 -newDarkWizard 7/16 a2bc539382f1b6c4 -newDarkWizard 7/17 dd5b702bc690743a -newDarkWizard 7/18 6ef664d15bace080 -newDarkWizard 7/19 d94cd790e2057e69 -newDarkWizard 7/2 7681bf98a5a57057 -newDarkWizard 7/21 ed3106ce9b22f3a1 -newDarkWizard 7/22 6fa71374e6ef85c8 -newDarkWizard 7/24 2bd4029e05a5dfd3 -newDarkWizard 7/25 7ad7df1949cb35f1 -newDarkWizard 7/26 a5d840cf9f203f32 -newDarkWizard 7/27 93c87c05e1810b9a -newDarkWizard 7/28 302f6571848dc624 -newDarkWizard 7/29 f9a8f93b5c92f8a9 -newDarkWizard 7/3 ec7d2863aa0ada6f -newDarkWizard 7/30 ab0df3de7834a284 -newDarkWizard 7/31 2941ab0ed32803ae -newDarkWizard 7/33 629afce9c8f587cd -newDarkWizard 7/34 68db30916740fa2e -newDarkWizard 7/35 36887cb9845880b1 -newDarkWizard 7/36 54d300ed61b2a265 -newDarkWizard 7/38 f957ba84ff38800a -newDarkWizard 7/39 6a25d240a3de05fa -newDarkWizard 7/4 d3dc2d707f159414 -newDarkWizard 7/40 2e5996184a7e782e -newDarkWizard 7/41 e9156565c5c0a12f -newDarkWizard 7/42 93456080d2fa5891 -newDarkWizard 7/43 cdbb10662d49d2ff -newDarkWizard 7/44 e445ab0dec96f853 -newDarkWizard 7/45 49a03db4946ff42e -newDarkWizard 7/46 012c5ac45a4f46a0 -newDarkWizard 7/49 f9117dfea20c4405 -newDarkWizard 7/5 ed34bc61e5e02f65 -newDarkWizard 7/50 b0cef4e207b258d3 -newDarkWizard 7/51 7a39339dcc63985b -newDarkWizard 7/52 cab54c4d86b0051f -newDarkWizard 7/59 b546eb0c66b59511 -newDarkWizard 7/6 55996a48e7954459 -newDarkWizard 7/60 62403fcf1ab71284 -newDarkWizard 7/61 713671179cbb1760 -newDarkWizard 7/62 2ca7d7c6d4a4a759 -newDarkWizard 7/63 b98b042320fcdfde -newDarkWizard 7/64 c59c47265c156eb3 -newDarkWizard 7/65 9630c08ac4e087d3 -newDarkWizard 7/66 228f067d73e1e14d -newDarkWizard 7/67 67bfc1f98cdcaf72 -newDarkWizard 7/68 389055597c37b012 -newDarkWizard 7/69 9e7c2f9cb88db92a -newDarkWizard 7/7 52d2497e536db5bf -newDarkWizard 7/70 12bde33a6f8ccab9 -newDarkWizard 7/72 b1260d5f4edafe33 -newDarkWizard 7/73 b42063ac666e139b -newDarkWizard 7/8 ee3f9d91efa2fad5 -newDarkWizard 7/9 650526e22f2a9ab5 -newDarkWizard 8/0 1b7db854dd1f1777 -newDarkWizard 8/1 4d8fbb2e776dd6c4 -newDarkWizard 8/10 6a6f818306db8392 -newDarkWizard 8/11 a8b1214675649f48 -newDarkWizard 8/12 285a6c31f0d28860 -newDarkWizard 8/13 2fe8dd909169c77a -newDarkWizard 8/14 74cf53783cdb5830 -newDarkWizard 8/15 2299102116d5893d -newDarkWizard 8/16 769c9d6998fd6c4e -newDarkWizard 8/17 701078b5a31e50ad -newDarkWizard 8/18 b81f764494fcb501 -newDarkWizard 8/19 84f66f21945d0c48 -newDarkWizard 8/2 4712a312cc8178b3 -newDarkWizard 8/20 9fdc69eb74b4276a -newDarkWizard 8/21 c021aafedb13072a -newDarkWizard 8/22 4517286edb49cea4 -newDarkWizard 8/23 98334ed69d8fc39e -newDarkWizard 8/24 bef1c65ca1a31267 -newDarkWizard 8/25 16bbbfdc73dc3af5 -newDarkWizard 8/26 b369af56c8996379 -newDarkWizard 8/27 0f654a1b4c7ca128 -newDarkWizard 8/28 997bc3e3e6fa2844 -newDarkWizard 8/29 f6cc72479fa319ec -newDarkWizard 8/3 db9aa295a2c8949c -newDarkWizard 8/30 4558fbb80fc0da78 -newDarkWizard 8/31 3530cf1747131391 -newDarkWizard 8/32 3a012bad6b299a12 -newDarkWizard 8/33 e5e88ee9e1372ac0 -newDarkWizard 8/34 b16e5785ff8da479 -newDarkWizard 8/35 58b8b11f4ccf913c -newDarkWizard 8/36 2857feac73455933 -newDarkWizard 8/37 98fc3aa645dab126 -newDarkWizard 8/38 ce9cad21e9ece6b1 -newDarkWizard 8/39 12766944e038406b -newDarkWizard 8/4 9bcc2d1f156878cb -newDarkWizard 8/40 e8ddd8e4e78e7b9e -newDarkWizard 8/41 2ff457f578c17555 -newDarkWizard 8/42 45324b49d7bdbafe -newDarkWizard 8/43 93faa7e190600c0f -newDarkWizard 8/44 08cdeff0f580b696 -newDarkWizard 8/45 c44a2bd0f43cb404 -newDarkWizard 8/46 bf90e420319f5618 -newDarkWizard 8/47 f81a02a152f3372f -newDarkWizard 8/48 6ee3f8de7b818300 -newDarkWizard 8/49 43c9610f6d023dca -newDarkWizard 8/5 d13aedcfe867d912 -newDarkWizard 8/50 b5a13e339f4bc0d8 -newDarkWizard 8/51 01e853f27859aeb2 -newDarkWizard 8/52 287026cd8b0231a1 -newDarkWizard 8/59 10471f7c0f418d9d -newDarkWizard 8/6 0699c535dff6c233 -newDarkWizard 8/60 545ca48c15264a3d -newDarkWizard 8/61 249fcbfa3717e7ce -newDarkWizard 8/62 724e6f7d5b23d0a7 -newDarkWizard 8/63 17a8a44263ab5bbb -newDarkWizard 8/64 72958c044d2264a9 -newDarkWizard 8/65 3efc565807ca7927 -newDarkWizard 8/66 05b22aec4b57e1af -newDarkWizard 8/67 afdd15bb3160d5ef -newDarkWizard 8/68 7e18abe80919716a -newDarkWizard 8/69 783b36e22dc3d992 -newDarkWizard 8/7 aed2e770830b2541 -newDarkWizard 8/70 ec016fff322afd96 -newDarkWizard 8/71 72de54ccc74f83ba -newDarkWizard 8/72 a0d2fa6bd4cbafe1 -newDarkWizard 8/73 cc0599a5ab443b64 -newDarkWizard 8/8 fcf5e5177bc31a4c -newDarkWizard 8/9 c8ef878db6e39308 -newDarkWizard 9/0 79deb09d8ac8eabf -newDarkWizard 9/1 7914393ab49dafe3 -newDarkWizard 9/10 39409b30430736c4 -newDarkWizard 9/11 680d4f6fedc5e97a -newDarkWizard 9/12 556698ee2b2ee599 -newDarkWizard 9/13 9e8e1e573f0c37f7 -newDarkWizard 9/14 8c27202ad63f39b7 -newDarkWizard 9/15 373a3fa9e8ffe321 -newDarkWizard 9/16 7cfe85256d97f80d -newDarkWizard 9/17 1075b335f81a1eed -newDarkWizard 9/18 6e52332a325e6386 -newDarkWizard 9/19 b247e11630de434a -newDarkWizard 9/2 9ecd6ba804b47663 -newDarkWizard 9/20 33e4f729170ad0df -newDarkWizard 9/21 bc1237f926586875 -newDarkWizard 9/22 f1c4dc976b5b6094 -newDarkWizard 9/23 68a99f656df312e3 -newDarkWizard 9/24 92bf384103635a3f -newDarkWizard 9/25 1fde2117849c44e0 -newDarkWizard 9/26 88c8d22776d9d406 -newDarkWizard 9/27 858ffb84e73d9ea3 -newDarkWizard 9/28 8e37c75eb6740513 -newDarkWizard 9/29 9027b80786d407b4 -newDarkWizard 9/3 fde0e74279456d3d -newDarkWizard 9/30 04fc82bb9d371901 -newDarkWizard 9/31 b202387c2a7bb056 -newDarkWizard 9/32 366c67762af4fc9e -newDarkWizard 9/33 2070511c23ebfde1 -newDarkWizard 9/34 060a9115eae56fb1 -newDarkWizard 9/35 eda5374c78a7c493 -newDarkWizard 9/36 88a9e8df1a05ca38 -newDarkWizard 9/37 dc78a1f683716cf4 -newDarkWizard 9/38 5b748c7c71995d5f -newDarkWizard 9/39 05fe977fce22f9c3 -newDarkWizard 9/4 6334b631e750843f -newDarkWizard 9/40 bd7fc8804b871b20 -newDarkWizard 9/41 afc9727b734cde4d -newDarkWizard 9/42 9bcf1f953f3ab28c -newDarkWizard 9/43 3875f6eb5239a6c4 -newDarkWizard 9/44 377848cfb16d1e68 -newDarkWizard 9/45 4123ad04c077b506 -newDarkWizard 9/46 d6e19c7bce775c90 -newDarkWizard 9/47 3812ec7693376cc8 -newDarkWizard 9/48 6cba5fc26c1077dc -newDarkWizard 9/49 4af2446355e48d03 -newDarkWizard 9/5 ddca1aecfaaefed5 -newDarkWizard 9/50 22784335ad3ecc85 -newDarkWizard 9/51 af0d28b2ad75cc81 -newDarkWizard 9/52 dded3a3d8402501f -newDarkWizard 9/59 cf5dc7cf799f1cb3 -newDarkWizard 9/6 1f71af7ce1795066 -newDarkWizard 9/60 773fee6355648b88 -newDarkWizard 9/61 d9c1b7345a800aa4 -newDarkWizard 9/62 437ef8f6b8fc5410 -newDarkWizard 9/63 cce79bc37ba15b6e -newDarkWizard 9/64 13e3ef1a2cf3ec1e -newDarkWizard 9/65 f057d7fcc033debb -newDarkWizard 9/66 d4a377decb1f7e7d -newDarkWizard 9/67 2a4a5db8d0e7a6bb -newDarkWizard 9/68 707051ffe93e55ff -newDarkWizard 9/69 850fc583ee4f6b33 -newDarkWizard 9/7 484593387e9fc64d -newDarkWizard 9/70 3570092837c982d4 -newDarkWizard 9/71 d6238275cec60892 -newDarkWizard 9/72 fce87c0fe1cbd441 -newDarkWizard 9/73 a6f4a59ee86d7c07 -newDarkWizard 9/8 69567566d25b0e12 -newDarkWizard 9/9 9d62bbd3134284ea +bladeMaster 0/0 2944b9bd87b2043e +bladeMaster 0/1 d447839a62f26545 +bladeMaster 0/10 a79777225595b884 +bladeMaster 0/11 1edf5b45c1043c8e +bladeMaster 0/12 7c4867d489cf28dc +bladeMaster 0/13 feffef94f400edb5 +bladeMaster 0/14 5506c54448d14eff +bladeMaster 0/15 4f617ad22e2371e7 +bladeMaster 0/16 b1bc6cffaf9a7091 +bladeMaster 0/17 087e2bb4ae3558ee +bladeMaster 0/18 2856bf7fe47d75ed +bladeMaster 0/19 a3727ab62e048133 +bladeMaster 0/2 04c06dc66f900c57 +bladeMaster 0/20 32290ccc06fbe1bc +bladeMaster 0/21 a64145fa6e07205a +bladeMaster 0/22 4f1b357700c3e3d2 +bladeMaster 0/23 ec9604a152e027b8 +bladeMaster 0/24 ca58910ed10f2648 +bladeMaster 0/25 75f8a89b3c7c2c52 +bladeMaster 0/26 0388049d6d596d32 +bladeMaster 0/27 639e307a9be65ef6 +bladeMaster 0/28 94e020187a6e3755 +bladeMaster 0/3 647006ef1e474e29 +bladeMaster 0/31 5a11dd6e17a0ebf8 +bladeMaster 0/32 47329e9cf337c28b +bladeMaster 0/33 a00323a1f07cd85a +bladeMaster 0/34 ce5481b3eb4dedaa +bladeMaster 0/35 d09b04fb0b744495 +bladeMaster 0/4 1e05fb638d1bfe44 +bladeMaster 0/5 420c5a88b46148de +bladeMaster 0/6 ddfc2d5d70f4beea +bladeMaster 0/7 92d4c314915cf524 +bladeMaster 0/8 54d23dc4c44db2f6 +bladeMaster 0/9 d9d784db0b8de1b2 +bladeMaster 1/0 4538c45449f3403e +bladeMaster 1/1 6106baf00667b0ea +bladeMaster 1/2 06e4884cb996cdc8 +bladeMaster 1/3 707480d40cb29f8f +bladeMaster 1/4 cc86dea331a63d21 +bladeMaster 1/5 cfa2cb0d4e439c08 +bladeMaster 1/6 86f1604727cf4ab2 +bladeMaster 1/7 ad7e079fe711ac4f +bladeMaster 1/8 d052e0e5017ca8ba +bladeMaster 10/0 3fc05a02676de691 +bladeMaster 10/1 2eb4e3a652ac6eba +bladeMaster 10/10 adc88bee13b4f99c +bladeMaster 10/11 0da58096b3cd5125 +bladeMaster 10/12 f67d9716dbe1b5ba +bladeMaster 10/13 da7e123a6aa092b8 +bladeMaster 10/14 3e7778ac518761bd +bladeMaster 10/15 08c2825f9eb37dba +bladeMaster 10/16 cfc3d163fae2f6a0 +bladeMaster 10/17 4ea749d05a2993bc +bladeMaster 10/18 7ab116a6cef2f51d +bladeMaster 10/19 c5633420ed36a522 +bladeMaster 10/2 c50378ae33bd9e3c +bladeMaster 10/20 cfcd13fd36140fa1 +bladeMaster 10/21 04a671ab6f315840 +bladeMaster 10/22 62f7686abe6f273b +bladeMaster 10/23 24d4b4d0afbe4034 +bladeMaster 10/24 60cb1f69eb637f98 +bladeMaster 10/25 4b9fbb5b4f3f6afc +bladeMaster 10/26 1e2cd1d052ac9449 +bladeMaster 10/27 3d9ea1430c8f49a3 +bladeMaster 10/28 d18b1db690ba129f +bladeMaster 10/29 672d524ecaf52e20 +bladeMaster 10/3 a2e73a2ddb28b028 +bladeMaster 10/30 f8ce6127a9e8c858 +bladeMaster 10/31 dcffaa3bc8aba268 +bladeMaster 10/32 5eeb877f0f3a4463 +bladeMaster 10/33 421510e64e26bf62 +bladeMaster 10/34 e17440781334ce8f +bladeMaster 10/35 3cf344434fa0b5ef +bladeMaster 10/36 fcc7dab97f495742 +bladeMaster 10/37 61ee7a41551330e0 +bladeMaster 10/38 8364fad3f994589d +bladeMaster 10/39 4b72f38a512478bb +bladeMaster 10/4 d25d20ee1a9d75d9 +bladeMaster 10/40 300bf7a77a23f0c3 +bladeMaster 10/41 b9a6e2cc7b03ff73 +bladeMaster 10/42 a0fa46f3f1d9f9fd +bladeMaster 10/43 3464089c5979b18d +bladeMaster 10/44 90dd74ab0e80aed1 +bladeMaster 10/45 fdd4719d77a9aaed +bladeMaster 10/46 532431362961bfe0 +bladeMaster 10/47 db3a3ae0a21b91cd +bladeMaster 10/48 c91c509834144b2c +bladeMaster 10/49 96906ed6e90d2976 +bladeMaster 10/5 2429f5127d7e60dc +bladeMaster 10/50 b20e65237cd0db0e +bladeMaster 10/51 4ca2e21757b2844b +bladeMaster 10/52 bd594fbb20d99522 +bladeMaster 10/6 553447ceb700daeb +bladeMaster 10/62 46dac5208e97e5dd +bladeMaster 10/63 e21eee43c5264f5c +bladeMaster 10/64 b8a604960db89124 +bladeMaster 10/65 db16b90406874ee0 +bladeMaster 10/66 ae3d944a23355999 +bladeMaster 10/67 bfd231b4e4f97a7e +bladeMaster 10/68 18c41458902e94d7 +bladeMaster 10/69 7cec9d1afaa570af +bladeMaster 10/7 430865205e33d109 +bladeMaster 10/70 33d1293bdb863c76 +bladeMaster 10/71 d8955f823648e784 +bladeMaster 10/8 f217cd771314904f +bladeMaster 10/9 7ca77c89a48f9854 +bladeMaster 11/0 f1d8c6a98231b813 +bladeMaster 11/1 c3fd4e2d30ccef58 +bladeMaster 11/10 103cbcadbbddfc16 +bladeMaster 11/11 c5708132a0f25d96 +bladeMaster 11/12 0c3502589b936f29 +bladeMaster 11/13 48806e9a3649d466 +bladeMaster 11/14 b204b94899caf26a +bladeMaster 11/15 bc7e353f32bfcbaa +bladeMaster 11/16 3f0209724bcdce24 +bladeMaster 11/17 b8de27fac70fe646 +bladeMaster 11/18 8a06185eb90c3030 +bladeMaster 11/19 02cf206394a9b11d +bladeMaster 11/2 de77a4ad7a881a4d +bladeMaster 11/20 885ee73233a540e5 +bladeMaster 11/21 37dff5f36674bf22 +bladeMaster 11/22 0b05ff6dc2660062 +bladeMaster 11/23 ecfabefa38b0de80 +bladeMaster 11/24 6e4c8afd14f4d0a9 +bladeMaster 11/25 48c51c18fedc9e8e +bladeMaster 11/26 b8208e04c2fba0ae +bladeMaster 11/27 420d8d6d88d480f3 +bladeMaster 11/28 b02f2714f4868645 +bladeMaster 11/29 de9efecb18b3f62d +bladeMaster 11/3 9a53f83ece632f7c +bladeMaster 11/30 62b09a67dfdad310 +bladeMaster 11/31 000d337aadc7866b +bladeMaster 11/32 0f63957377806ee0 +bladeMaster 11/33 7816333a214c2ecc +bladeMaster 11/34 ed429703f37797fa +bladeMaster 11/35 52ab2484ab44fa0c +bladeMaster 11/36 8f066fa7e1fccaa5 +bladeMaster 11/37 d4c6710b26122dff +bladeMaster 11/38 3e3e9347c7ac38e5 +bladeMaster 11/39 5257e75bc6e8168f +bladeMaster 11/4 02615e6ba42919a7 +bladeMaster 11/40 82839819de241872 +bladeMaster 11/41 ace4b4b4b27712fc +bladeMaster 11/42 207c16a6625d6938 +bladeMaster 11/43 4541d4ab6f77c5aa +bladeMaster 11/44 71531a5c1eac4162 +bladeMaster 11/45 6114ec8d3bda5e5e +bladeMaster 11/46 0ddea287ec352ee6 +bladeMaster 11/47 3b877bf5f4859d92 +bladeMaster 11/48 98ebf6e4bdfe094b +bladeMaster 11/49 bb3223b5fc5533ea +bladeMaster 11/5 6e21a48064e56a10 +bladeMaster 11/50 40f22a04247c0a21 +bladeMaster 11/51 319a5a73e7d4aec9 +bladeMaster 11/52 dc8b8157d5fce66d +bladeMaster 11/59 d6adbcaec761662e +bladeMaster 11/6 2234477225548a31 +bladeMaster 11/60 5ad1303396ed70d6 +bladeMaster 11/61 d3071c07f15104db +bladeMaster 11/62 a1cc917982f2741a +bladeMaster 11/63 486b5130c40e0ed5 +bladeMaster 11/64 e396339a6d00c6e0 +bladeMaster 11/65 7817993b26f7b7ee +bladeMaster 11/66 e1a2e98cc565652d +bladeMaster 11/67 7a61d7b8e77053a9 +bladeMaster 11/68 85d5dd4ba0556f4a +bladeMaster 11/69 0c7db888d85303b8 +bladeMaster 11/7 4edac757ba660f83 +bladeMaster 11/70 5dba3bebc122f2d0 +bladeMaster 11/71 b6260f0d5e047f3a +bladeMaster 11/72 20f38a06ec438a41 +bladeMaster 11/73 a87e19b94a908472 +bladeMaster 11/8 75a73f111e088092 +bladeMaster 11/9 10e1e9e872f955da +bladeMaster 12/0 42de7ba110fb8621 +bladeMaster 12/1 078c924989eb73a5 +bladeMaster 12/10 98a80d043ea0ec7f +bladeMaster 12/100 275ab9765758fc19 +bladeMaster 12/101 fe7d99bed3c77f6d +bladeMaster 12/102 56ae2d48b5a0ef49 +bladeMaster 12/103 a618149f9df0bae7 +bladeMaster 12/104 e4cb92336459b4cb +bladeMaster 12/105 13b933945cc50391 +bladeMaster 12/106 9b77c8f5fc3808b1 +bladeMaster 12/107 864a8916d1a7e5ef +bladeMaster 12/108 b2f06e42ccb3ad0b +bladeMaster 12/109 9c8b62b1ae9e42e3 +bladeMaster 12/11 05315e8d237b193b +bladeMaster 12/110 8466580ae62bf97f +bladeMaster 12/111 0fa8b88292f3222d +bladeMaster 12/112 7bbf9e591d03fb6f +bladeMaster 12/113 19624fdcbcdeffb7 +bladeMaster 12/114 bac4258626c42673 +bladeMaster 12/115 64d6ccc6c740e089 +bladeMaster 12/116 100fd82d6aa5531d +bladeMaster 12/117 7b1d953f44795115 +bladeMaster 12/118 bee2c3442b665c53 +bladeMaster 12/119 590d27a0e043ef19 +bladeMaster 12/12 39bc3f6b04c94767 +bladeMaster 12/120 86073ed93511e3c9 +bladeMaster 12/121 543a2e63f96b31d1 +bladeMaster 12/122 0762d070ad38acfd +bladeMaster 12/123 0193c8772628c791 +bladeMaster 12/124 ae7cdde5079fc463 +bladeMaster 12/125 bff77fda3f4d8fdf +bladeMaster 12/126 34f256afe4ff5be7 +bladeMaster 12/127 3a76e34e4b5c1dab +bladeMaster 12/128 bc1d6bb1ca836d31 +bladeMaster 12/129 0a66275606de4775 +bladeMaster 12/13 b04a1c1d21e78c8f +bladeMaster 12/130 b949dcd9f1b9093d +bladeMaster 12/131 835a525bb5a153df +bladeMaster 12/132 fdfc4f1d9e42a713 +bladeMaster 12/133 a277e2d121fadacf +bladeMaster 12/134 68bd46261bccc5b3 +bladeMaster 12/135 194b3e01704e8089 +bladeMaster 12/136 d3700c9c69c24d83 +bladeMaster 12/137 f889d8c3c5ae9a63 +bladeMaster 12/138 32c8be98c2efde43 +bladeMaster 12/139 7a008263db90f54f +bladeMaster 12/14 43cb126ab9f74377 +bladeMaster 12/140 d9e7df472c7b036b +bladeMaster 12/141 82ef38ecc63f2ae3 +bladeMaster 12/142 514fcce998eaea7b +bladeMaster 12/143 b678d4e6713f2f1b +bladeMaster 12/15 881af6d245cd85d1 +bladeMaster 12/16 b36d12eb2e501e17 +bladeMaster 12/17 3eb2992f5cb07eb7 +bladeMaster 12/18 cead3c66c36cc6af +bladeMaster 12/19 a76a90705ac425bf +bladeMaster 12/2 f41bfc1018b95821 +bladeMaster 12/21 87c9328062e12b77 +bladeMaster 12/22 8375c01606bd6c37 +bladeMaster 12/23 bd0b461d082d0607 +bladeMaster 12/24 ae549788584741ff +bladeMaster 12/26 8e46436f467e492f +bladeMaster 12/3 cd8856e9bc648404 +bladeMaster 12/30 948ac956c6cc2bff +bladeMaster 12/31 0878942c1ef09697 +bladeMaster 12/32 f4c0c92c81e53e61 +bladeMaster 12/33 e3ec721d0e4b91d9 +bladeMaster 12/34 e504a9064f93cb5d +bladeMaster 12/35 49c9cf7788226fc9 +bladeMaster 12/36 1eb26e925802772d +bladeMaster 12/37 741fd9058607605f +bladeMaster 12/38 9e11a3ad289addfd +bladeMaster 12/39 e806efcaf70d65eb +bladeMaster 12/4 a875e823940c0c1c +bladeMaster 12/40 70f67aafedb92d01 +bladeMaster 12/41 1e116c4091472263 +bladeMaster 12/42 21814f0e5d3d9966 +bladeMaster 12/43 59bad32e42a965d7 +bladeMaster 12/44 0582df4cdfac5bff +bladeMaster 12/45 090c607763fa8ef7 +bladeMaster 12/46 99362d7e3f675757 +bladeMaster 12/47 3db3427e6921bbb7 +bladeMaster 12/48 6269e12b62a73a07 +bladeMaster 12/49 bce8a7311c5f4aae +bladeMaster 12/5 e3193c9e61b64d94 +bladeMaster 12/50 8af096e897cdc4bb +bladeMaster 12/6 e87acebdf85cb868 +bladeMaster 12/60 5305b88bf4aaa959 +bladeMaster 12/61 fbf77eab0ae51083 +bladeMaster 12/62 6f883c5b173acbaf +bladeMaster 12/63 17c1c6045eb4e10b +bladeMaster 12/64 1e1b0fccd07ceca9 +bladeMaster 12/65 5941b80a6e1df989 +bladeMaster 12/7 dab3d9e5f5ecc617 +bladeMaster 12/70 a8fbc988a7312a67 +bladeMaster 12/71 76f087ea8e66ad57 +bladeMaster 12/72 dbdfa055cdc0a20b +bladeMaster 12/8 a64965cbb3a72107 +bladeMaster 12/9 ff016f046078c727 +bladeMaster 13/0 74689a74643b8df1 +bladeMaster 13/1 8b15d94601528b2f +bladeMaster 13/10 529a263bbd8e1d57 +bladeMaster 13/103 a0c06587ab860a57 +bladeMaster 13/104 e25ec83ad8a71087 +bladeMaster 13/105 11c44a149124e637 +bladeMaster 13/106 a6531e75889c240f +bladeMaster 13/107 22f7dc22142daacd +bladeMaster 13/109 62dda29b1e8ac567 +bladeMaster 13/11 ca251cadf4efe0af +bladeMaster 13/110 d21fdcf7bd5da3ef +bladeMaster 13/111 7c6995664dc669f7 +bladeMaster 13/112 b6d1c4164fc45eb7 +bladeMaster 13/113 9bba473761a8fbd7 +bladeMaster 13/114 be80ff02dda7ff87 +bladeMaster 13/115 79a6f7868b041687 +bladeMaster 13/116 a65bd32348eed3c7 +bladeMaster 13/117 2f4a8fe8a8543ebf +bladeMaster 13/118 594a3416af0c2207 +bladeMaster 13/119 4556b07b3faf16af +bladeMaster 13/12 7f4ae42053ead8f4 +bladeMaster 13/120 82292ce5233e4427 +bladeMaster 13/121 706a4efc0b80fa9f +bladeMaster 13/122 59d90271281a0463 +bladeMaster 13/123 dfe32dd01d675b47 +bladeMaster 13/124 0f8347c18ec36c17 +bladeMaster 13/125 866a46434a96a9ab +bladeMaster 13/126 cd02aab0ffd34d27 +bladeMaster 13/127 a0e4bf3c0b9b0cc7 +bladeMaster 13/128 6eb83947ae6255b3 +bladeMaster 13/129 f84dc961130cf64b +bladeMaster 13/13 4855b6566e176943 +bladeMaster 13/130 8e4a02eaec7a2163 +bladeMaster 13/131 57d9f5b854210f03 +bladeMaster 13/132 31086e82282ebb8b +bladeMaster 13/133 d364626c60c36753 +bladeMaster 13/134 67ad94ef50b2e1a7 +bladeMaster 13/135 ac92570bf4df4bd1 +bladeMaster 13/136 3527092c0f8db6f9 +bladeMaster 13/137 f51d5582336e12e1 +bladeMaster 13/138 7cb539aa5f722b51 +bladeMaster 13/139 36020c77f301d5c1 +bladeMaster 13/14 22783d889c964739 +bladeMaster 13/140 a8234a1ec30cc531 +bladeMaster 13/141 33351655b6812699 +bladeMaster 13/142 17990a47be7698e1 +bladeMaster 13/143 73c343087474bff9 +bladeMaster 13/144 9760b94e063b84a1 +bladeMaster 13/15 34e632e4ef2021cd +bladeMaster 13/16 030350570d552f51 +bladeMaster 13/17 f0946f4c21761b51 +bladeMaster 13/18 cffecd839926dbaf +bladeMaster 13/19 d7b537649b8a6c2f +bladeMaster 13/2 f4d1777da000dff3 +bladeMaster 13/20 dd6bbd7965c66b6c +bladeMaster 13/21 fa9f0f2214905220 +bladeMaster 13/22 627e2e230cb38a66 +bladeMaster 13/23 d12f50174d1f13d2 +bladeMaster 13/24 a31b1afc0e1b569c +bladeMaster 13/25 22f7688196333949 +bladeMaster 13/26 08c51008ead920da +bladeMaster 13/27 07565412e02e8e90 +bladeMaster 13/28 b0db10562eca56f0 +bladeMaster 13/29 96136e0b41bb1057 +bladeMaster 13/3 519bd6746eea3be9 +bladeMaster 13/30 f128116392053825 +bladeMaster 13/31 38092e722dfbb503 +bladeMaster 13/32 604569a5586adeb1 +bladeMaster 13/33 fb22d733400b2441 +bladeMaster 13/34 2e951a2b32305e09 +bladeMaster 13/35 1b6db1b0541416c3 +bladeMaster 13/36 8b7bc1f5c088e80c +bladeMaster 13/37 6ce60c7aa7864db3 +bladeMaster 13/38 6db378efe4781d61 +bladeMaster 13/39 69ae46fabd3eef5c +bladeMaster 13/4 9248b7654a0bc221 +bladeMaster 13/40 d40cdd8d9aab3713 +bladeMaster 13/41 8024c7668af0d701 +bladeMaster 13/42 7c2007c5c5121bae +bladeMaster 13/43 767ee61993c3cabf +bladeMaster 13/44 619da2b17735d3ef +bladeMaster 13/45 5a22f067fe2046d7 +bladeMaster 13/46 467d0c4a6785a99f +bladeMaster 13/47 274c4c72da37f20b +bladeMaster 13/48 3160a03383623ce7 +bladeMaster 13/49 935a3932c49e11ff +bladeMaster 13/5 0023ef722ff7f135 +bladeMaster 13/50 a9be140b7e205df7 +bladeMaster 13/51 52a7b589bd7ec6af +bladeMaster 13/52 07aab6b3e768c069 +bladeMaster 13/53 f60eef5ebabb6439 +bladeMaster 13/54 981bf5cee0219a99 +bladeMaster 13/55 ec31da2f2e6bb615 +bladeMaster 13/56 f65899c19a6dd4d9 +bladeMaster 13/57 b67e29983438b725 +bladeMaster 13/58 b26c9fc094765a75 +bladeMaster 13/59 30c16f909dfc8a8f +bladeMaster 13/60 501db23c8db8b75f +bladeMaster 13/61 2648fa6c3b24a55b +bladeMaster 13/62 38882f540d6b57c7 +bladeMaster 13/63 9a02ce95ffd5ce9f +bladeMaster 13/64 562420f43b1c5fb3 +bladeMaster 13/65 f7f30b77856d6b17 +bladeMaster 13/66 d5f6c9e8a038110f +bladeMaster 13/67 2f17202ef4d1737b +bladeMaster 13/68 c19aec3a7cfd6f73 +bladeMaster 13/69 f344f755c2696caf +bladeMaster 13/7 3330d0097ba26b7b +bladeMaster 13/70 6af124eaa3190dcf +bladeMaster 13/71 0df227b29824b397 +bladeMaster 13/72 8ce4f7de71ecb317 +bladeMaster 13/73 0715b3cfbbe11ac7 +bladeMaster 13/74 a7c6c1fd17465e8f +bladeMaster 13/75 25c98569e923395f +bladeMaster 13/76 0367fcec33468523 +bladeMaster 13/8 0504588b80cdb852 +bladeMaster 13/80 789b64b468111ab3 +bladeMaster 13/81 0d4f194599173b1f +bladeMaster 13/82 aa498d64785d5177 +bladeMaster 13/83 477c82d2000b9501 +bladeMaster 13/84 65d8038378da4c73 +bladeMaster 13/85 6e460e4fd3357b59 +bladeMaster 13/86 fd811954964f473f +bladeMaster 13/87 6b56df3b7634b883 +bladeMaster 13/88 00b45840876f795f +bladeMaster 13/89 0d1d55db5dba9ba7 +bladeMaster 13/9 6d899169d15c6c01 +bladeMaster 13/90 6f0a07b2f9efbb69 +bladeMaster 13/91 72596b59778cb3db +bladeMaster 13/92 1ae3a448940e92f7 +bladeMaster 13/93 9014222cac01631d +bladeMaster 13/94 a9b46b3a6597678f +bladeMaster 13/95 fe89957e5f92159b +bladeMaster 13/96 abed498aeedccec7 +bladeMaster 13/97 8d8d68e87900f9df +bladeMaster 13/98 767d807d241fa79f +bladeMaster 13/99 e1bbf2b744b22237 +bladeMaster 14/0 0e75992c5c685491 +bladeMaster 14/1 1cf3d14cf5fdae99 +bladeMaster 14/10 e914bb5934358487 +bladeMaster 14/100 e2938f447feea095 +bladeMaster 14/101 7e9db85331cc3865 +bladeMaster 14/102 b2bc5e7d4bf6b56f +bladeMaster 14/103 0a0faeb76de93bb3 +bladeMaster 14/104 d6d403900c55b50f +bladeMaster 14/105 e9abe6867c9564e3 +bladeMaster 14/106 9ad4df3b27fd870f +bladeMaster 14/107 9d6f17c568bfbc1b +bladeMaster 14/108 14f6fac0daa28afb +bladeMaster 14/109 c0d5b4084f8267cb +bladeMaster 14/11 526ac98541f0fc99 +bladeMaster 14/110 0d79a8c89a8f8d2f +bladeMaster 14/111 6fd718b0b3e9b887 +bladeMaster 14/112 680ebd8daa70f68f +bladeMaster 14/113 c3fcf7e9a42f4a57 +bladeMaster 14/114 5b1e86d36ee977a7 +bladeMaster 14/115 93bdcd4ff3bbfa9f +bladeMaster 14/116 c3c23f935631b2ef +bladeMaster 14/117 757f3c45d7635447 +bladeMaster 14/118 42a7081e35e242ff +bladeMaster 14/119 5ca986e84a8a2747 +bladeMaster 14/12 105995432f607ba3 +bladeMaster 14/120 9bf1be432721439f +bladeMaster 14/121 07fd78217089de87 +bladeMaster 14/122 5cad2c7bdc43bad7 +bladeMaster 14/123 059a2889b7c83b1f +bladeMaster 14/124 94495a8a9fb64f2f +bladeMaster 14/125 79419fb650d8b38f +bladeMaster 14/126 df16ce76226b63df +bladeMaster 14/127 05143cdd0f0e61af +bladeMaster 14/128 b6166b01b0c49797 +bladeMaster 14/129 b27a33569e28fd7f +bladeMaster 14/13 9fb07e3fd7608069 +bladeMaster 14/130 de053e93ebd1294f +bladeMaster 14/131 47501066ea51dc67 +bladeMaster 14/132 a5d467c35b64dfcf +bladeMaster 14/133 f0bfe8d8aab0bbdb +bladeMaster 14/134 ca1b186f8de66997 +bladeMaster 14/135 e177ef83bfc77def +bladeMaster 14/136 19878f834c4b3827 +bladeMaster 14/137 1a21981517631df7 +bladeMaster 14/138 5ca0ab39c5575ce7 +bladeMaster 14/139 359010652d835157 +bladeMaster 14/14 9f67faa39bbdfd31 +bladeMaster 14/140 22bc6afb2a5d71bf +bladeMaster 14/141 955b553b2b5186d9 +bladeMaster 14/142 4a8e85091a5650b1 +bladeMaster 14/143 a3a213dfb3dbe8e9 +bladeMaster 14/144 15faa000cf449cc1 +bladeMaster 14/145 4facca377b3ec7c7 +bladeMaster 14/146 fe265c655cb65e47 +bladeMaster 14/147 c494659308cbfdbf +bladeMaster 14/148 a840f0078ff4275f +bladeMaster 14/149 2561a9d80573184f +bladeMaster 14/15 b4dea4850ee63c57 +bladeMaster 14/150 23e73e511cf1bb5f +bladeMaster 14/151 f84f4fc6a90a278f +bladeMaster 14/152 f43cda3711c89f97 +bladeMaster 14/153 4a4155a11eef50c5 +bladeMaster 14/154 2fbf50213eac0f81 +bladeMaster 14/155 3e334494c05d1f01 +bladeMaster 14/156 b0386049c7944b21 +bladeMaster 14/157 2c9588743a7960f7 +bladeMaster 14/158 a88257b8a97ef6c7 +bladeMaster 14/159 cc60b9b519d39bd7 +bladeMaster 14/16 0d057527d0afc2d9 +bladeMaster 14/160 20aa3199779df619 +bladeMaster 14/161 4afd4b36491b4789 +bladeMaster 14/162 d09f2bcc4e7d7067 +bladeMaster 14/163 5403d0cf33edf147 +bladeMaster 14/169 6ee71683899da9e7 +bladeMaster 14/17 09fe57de2ed54971 +bladeMaster 14/18 20dafaff6694e799 +bladeMaster 14/19 bf31a92912519589 +bladeMaster 14/2 053b4f9be2ee31a5 +bladeMaster 14/20 4cf110106bcb3e67 +bladeMaster 14/21 1d3d5783a708f2ee +bladeMaster 14/22 b6dff055d2d99a01 +bladeMaster 14/23 c1feaa98fd073ced +bladeMaster 14/24 c27e06fffd01bb27 +bladeMaster 14/25 4cc7832e82a33c67 +bladeMaster 14/26 1f73adb562a8c75b +bladeMaster 14/28 ac38d0eaac333af1 +bladeMaster 14/29 4cd203b499bb7167 +bladeMaster 14/3 9ff5db753763245d +bladeMaster 14/31 55f01f932fd124d9 +bladeMaster 14/32 21ed13ce2f5b4b73 +bladeMaster 14/33 fe9ec82c867f6ca7 +bladeMaster 14/34 379c90ccb5a4d1e1 +bladeMaster 14/35 19a9b2260193c74d +bladeMaster 14/36 67007b3fda2ccb29 +bladeMaster 14/37 8b10d2d2048fee59 +bladeMaster 14/38 60118f49b16a5329 +bladeMaster 14/39 44940cebe5d91085 +bladeMaster 14/4 dbf48c5bc12b79f5 +bladeMaster 14/40 3cf353dd635aeafd +bladeMaster 14/41 95ab4597722fadf3 +bladeMaster 14/42 7bce9edcf753b2f7 +bladeMaster 14/43 913e9e93ac525caf +bladeMaster 14/44 be840bbfe3face53 +bladeMaster 14/45 58d412eff43d2c71 +bladeMaster 14/46 e0f2cfa532bc93b3 +bladeMaster 14/47 959c7e423cceea17 +bladeMaster 14/48 b10662acfc0ebcaf +bladeMaster 14/49 fbcf332ea88dc52f +bladeMaster 14/5 6c681e3318754a59 +bladeMaster 14/50 99b706c7db930e9b +bladeMaster 14/51 f6f9dbc1d09bce07 +bladeMaster 14/52 089a880b99d7b79f +bladeMaster 14/53 35117b4189364e91 +bladeMaster 14/54 ee33a4163082f177 +bladeMaster 14/55 509ed431a590c26f +bladeMaster 14/56 d08bb894440c935f +bladeMaster 14/57 1875d6215b819797 +bladeMaster 14/58 b2f8404f65d2f7cf +bladeMaster 14/59 2ef7930fb66421ef +bladeMaster 14/6 25113d2718302611 +bladeMaster 14/60 2fa3874a91416a37 +bladeMaster 14/61 4eda2f1a067ffff7 +bladeMaster 14/62 691e55ae485c96df +bladeMaster 14/63 fdcd22c1fff6bcdf +bladeMaster 14/64 e5c90893b58ac4bf +bladeMaster 14/65 8374968951df9089 +bladeMaster 14/66 565d90b130468ba1 +bladeMaster 14/67 c58e149598da9241 +bladeMaster 14/68 89617eaad46fc939 +bladeMaster 14/7 97fcee4b79b0f553 +bladeMaster 14/70 f55c9a6ae06df79b +bladeMaster 14/71 0e0bc45b342ef263 +bladeMaster 14/72 7819754bb65757f7 +bladeMaster 14/73 c09fccb4ca29813f +bladeMaster 14/74 f3f05c7546dee56f +bladeMaster 14/75 8c507a50656c4867 +bladeMaster 14/76 6626dcd7f87848cf +bladeMaster 14/77 a3597a99980ab3c7 +bladeMaster 14/78 28a56f5a5b6c3e8f +bladeMaster 14/79 169f7ff7ee533e3b +bladeMaster 14/8 275a607710508969 +bladeMaster 14/80 fb1f194d47b451db +bladeMaster 14/81 e6c99c9e63675157 +bladeMaster 14/82 eccd04582c540ecb +bladeMaster 14/83 3461a71e5bd9b51f +bladeMaster 14/84 78c9eb5ebc303ab7 +bladeMaster 14/85 ea25565a0d64f6b7 +bladeMaster 14/86 13c8c34c1ab2319f +bladeMaster 14/87 fca39fc5d1af9647 +bladeMaster 14/88 33637ff82acfc0af +bladeMaster 14/89 39ac9476241d380f +bladeMaster 14/9 c6729e0719002e0b +bladeMaster 14/90 eb7cf1b9618a0a2f +bladeMaster 14/91 5d708d37fed52fff +bladeMaster 14/92 2db3ac3526365187 +bladeMaster 14/93 7a934e419597c12f +bladeMaster 14/94 9b4ab23f0bb858f7 +bladeMaster 14/95 3b7393b527cbd4ff +bladeMaster 14/96 3274aa16bd96ae47 +bladeMaster 14/97 a68e6e83b1e4e67f +bladeMaster 14/98 c816e2375d98a40f +bladeMaster 14/99 3fd0fb4430867017 +bladeMaster 15/0 94ce54985cbe647f +bladeMaster 15/1 d72d78f5fd002a4f +bladeMaster 15/10 fea0b5d4ffdf390f +bladeMaster 15/11 2dc4a8d19564ac17 +bladeMaster 15/12 a3ff146fd1245347 +bladeMaster 15/13 67c1554386fbd6ef +bladeMaster 15/14 8ae03ec63b35145f +bladeMaster 15/15 6702f1170db5aa87 +bladeMaster 15/16 fbfa796123c120ef +bladeMaster 15/17 7e6b5f4c9092866f +bladeMaster 15/18 9326aad9eb901e87 +bladeMaster 15/19 207bc50ca82757df +bladeMaster 15/2 5a71f658ec075187 +bladeMaster 15/20 1cd089d9d672bfbf +bladeMaster 15/21 715e40eab56b0b27 +bladeMaster 15/22 6853a678e3c898a5 +bladeMaster 15/23 b2efb5dcc22e2547 +bladeMaster 15/24 62bf719e91833967 +bladeMaster 15/26 0833d76c162be30f +bladeMaster 15/27 14bd7bd8c9f6c709 +bladeMaster 15/28 6fa3c0bf809729fb +bladeMaster 15/29 afe79b67bbe4d127 +bladeMaster 15/3 7b629672dec32f8f +bladeMaster 15/30 bbb254dab20503a1 +bladeMaster 15/31 9c573f67218f42b5 +bladeMaster 15/32 8819c71a5038f399 +bladeMaster 15/33 69412f62301e7f23 +bladeMaster 15/34 5baec8c54f36afe9 +bladeMaster 15/35 f52e9bd17dfb5ec5 +bladeMaster 15/36 1678574c6b15a32f +bladeMaster 15/4 7de7b1f5b9b576ef +bladeMaster 15/5 e26606ae5049bf37 +bladeMaster 15/6 da847cbab1b73caf +bladeMaster 15/7 1104e29ab6c85d6f +bladeMaster 15/8 6d3b781a5eed5f7f +bladeMaster 15/9 8315e3f8a9e655d7 +bladeMaster 2/0 8474c86668592eae +bladeMaster 2/1 736763cd74b45934 +bladeMaster 2/10 db17595bb7882376 +bladeMaster 2/11 eab5de90f505f5b2 +bladeMaster 2/12 5510b48d654ac4b8 +bladeMaster 2/13 4b7d598f3c5aa971 +bladeMaster 2/14 635051f5b5f2d122 +bladeMaster 2/15 05ac8c23f7425bf9 +bladeMaster 2/16 b11b509051a70647 +bladeMaster 2/17 91357ae8b612b123 +bladeMaster 2/18 0c786843bece40a5 +bladeMaster 2/2 98c8e97ef09b8695 +bladeMaster 2/3 3ffbd94755d4de95 +bladeMaster 2/4 d803fcea09242ba5 +bladeMaster 2/5 840f1f45b046499d +bladeMaster 2/6 919faa9f25b44631 +bladeMaster 2/7 049a026f12b70bbf +bladeMaster 2/8 289afddc959bb6e6 +bladeMaster 2/9 d4a1f69b1947cea1 +bladeMaster 3/0 33c2ff13d89493df +bladeMaster 3/1 e7c6b345cb5e9e1a +bladeMaster 3/10 be1a5b88a58a22b2 +bladeMaster 3/11 88b4decffe1c854b +bladeMaster 3/2 6cdd4ede90dd7278 +bladeMaster 3/3 6f7515f62b695c82 +bladeMaster 3/4 403272d1c7bfdaf8 +bladeMaster 3/5 1a5c43efde297486 +bladeMaster 3/6 50c32610eada3f56 +bladeMaster 3/7 a418746508c7205b +bladeMaster 3/8 e873df33e4e81254 +bladeMaster 3/9 6dc8380d8386ff65 +bladeMaster 4/0 9a2e49d71ab8291a +bladeMaster 4/1 b9901a31c5035db6 +bladeMaster 4/10 48d62cfffd31d2fc +bladeMaster 4/11 702e308a2b07e3ed +bladeMaster 4/12 686b0dbd906ae280 +bladeMaster 4/13 3707394033e0a9f6 +bladeMaster 4/14 f1d189cde632bc22 +bladeMaster 4/15 3afe4c0bdd96d073 +bladeMaster 4/16 21574016bf280e2d +bladeMaster 4/17 5ef18bce3187883e +bladeMaster 4/18 e5c8d14afcf77995 +bladeMaster 4/19 5a46308e5682b186 +bladeMaster 4/2 5321bda919cab66b +bladeMaster 4/20 7df3a497ab207625 +bladeMaster 4/21 7d2e631c81b31b3f +bladeMaster 4/22 9996acffdc1f3ae2 +bladeMaster 4/23 0fc24db5f183f5e2 +bladeMaster 4/24 82ac0492c93fef13 +bladeMaster 4/3 df94454e20e29982 +bladeMaster 4/4 35922ea4bd23ae72 +bladeMaster 4/5 60b417d65ec700d6 +bladeMaster 4/6 eaf54812be5f1b02 +bladeMaster 4/7 08034f934cc9fa5d +bladeMaster 4/8 1b00eb79d6054e50 +bladeMaster 4/9 f67d991f934079cd +bladeMaster 5/0 7c01e5417d4f7677 +bladeMaster 5/1 9cf024ad9efeb734 +bladeMaster 5/10 56dd7c8ed7e8f0fe +bladeMaster 5/11 12a8feade357dce8 +bladeMaster 5/12 6bd8851712291652 +bladeMaster 5/13 cf946a07bda2b8de +bladeMaster 5/14 cee9c40fb713e272 +bladeMaster 5/15 495a760875bf1e75 +bladeMaster 5/16 ab525402026d52bf +bladeMaster 5/17 f5be4dccd8d5ae32 +bladeMaster 5/18 6d50421ec136c231 +bladeMaster 5/19 55d81fb8e68abb5e +bladeMaster 5/2 1a89d6ca8f832cc2 +bladeMaster 5/20 ce219833d827cf83 +bladeMaster 5/21 ac8b6c82147f61d6 +bladeMaster 5/22 856df621d0e77059 +bladeMaster 5/23 674f7a4c61dbfcb5 +bladeMaster 5/3 fbd27f0450e0da99 +bladeMaster 5/30 1cbbeb38bcad7a63 +bladeMaster 5/31 d601b657b3ac877a +bladeMaster 5/33 f089bbfc2bbc1c11 +bladeMaster 5/34 d0819725fb9429d3 +bladeMaster 5/36 38a0403a1b4f67e2 +bladeMaster 5/4 4e39ca9591b922ee +bladeMaster 5/5 44a6a37e4ac51f57 +bladeMaster 5/6 b3e2780384a79f6c +bladeMaster 5/7 94876fe3a2883a25 +bladeMaster 5/8 8b75da49ea553f1d +bladeMaster 5/9 cb8013cacc29a268 +bladeMaster 6/0 8f7be15ab2b8f681 +bladeMaster 6/1 1b69f885478c7205 +bladeMaster 6/10 a270389a93aad187 +bladeMaster 6/11 e6ad29c212dd897f +bladeMaster 6/12 c304a2df449c4a84 +bladeMaster 6/13 4820c4ce1e55c61d +bladeMaster 6/14 f93c8c8763866349 +bladeMaster 6/15 de5c4e860f82137e +bladeMaster 6/16 a1afba9c8bcd7fb7 +bladeMaster 6/17 a5479c90bd1e0678 +bladeMaster 6/18 3f89d85ecf0a6888 +bladeMaster 6/19 a037742e82ebce93 +bladeMaster 6/2 e4105c443f94909c +bladeMaster 6/20 2a8e662eead7fb6c +bladeMaster 6/21 7d33a28bc2b9fef6 +bladeMaster 6/3 ff35d57943ee4877 +bladeMaster 6/4 7c36b38a65b556be +bladeMaster 6/5 80903d3589e52ea3 +bladeMaster 6/6 bcb773f3adb34bc7 +bladeMaster 6/7 0fb6f1847dbb1c14 +bladeMaster 6/8 4bd193590b49beb7 +bladeMaster 6/9 102919872a60c0ba +bladeMaster 7/0 6180196a46dde4ee +bladeMaster 7/1 6d76be3f0cd09355 +bladeMaster 7/10 ebc4dd9a6d09051f +bladeMaster 7/11 676b71467a4815fe +bladeMaster 7/12 8b02b6a71f5e5f25 +bladeMaster 7/13 e50404fa9da51972 +bladeMaster 7/14 7e9f1fda77cb19c5 +bladeMaster 7/16 ce1abdeaf91234cd +bladeMaster 7/17 ccdadd20a0912703 +bladeMaster 7/18 17d8b8736743573e +bladeMaster 7/19 7a0c0c9d630122ee +bladeMaster 7/2 56f5d89c4573966c +bladeMaster 7/21 a0a4a5594ac241ab +bladeMaster 7/22 03238b8ed21e40bf +bladeMaster 7/24 11c8d44cc39e5fa5 +bladeMaster 7/25 8acecc1320e3274d +bladeMaster 7/26 b31eb4d86be3e7c2 +bladeMaster 7/27 41ad1c64f5feac3f +bladeMaster 7/28 cf13cbd80e6df33a +bladeMaster 7/29 abb64004de037147 +bladeMaster 7/3 bd2e76d8559b6c77 +bladeMaster 7/30 73c558a4921ddade +bladeMaster 7/31 cb5d61e6793fdc0c +bladeMaster 7/33 869c08c35e7ca8da +bladeMaster 7/34 f6c51dc8dd8b054f +bladeMaster 7/35 219b35701b8175ca +bladeMaster 7/36 52fa22834f2f35bc +bladeMaster 7/38 ff9cb83b61ba12ce +bladeMaster 7/39 e6634bd423693f76 +bladeMaster 7/4 3f3f46556c76fc5c +bladeMaster 7/40 c4184a9707def612 +bladeMaster 7/41 46acb86e0737f9f4 +bladeMaster 7/42 95beff3ddaa7b51a +bladeMaster 7/43 b99b89eb3e6ec892 +bladeMaster 7/44 6bba81eb761a1d95 +bladeMaster 7/45 a3781021b33bb155 +bladeMaster 7/46 092e097cf68bfdd2 +bladeMaster 7/49 e65673abf25d3be3 +bladeMaster 7/5 186556204f346814 +bladeMaster 7/50 95e6c12822228221 +bladeMaster 7/51 09fe5f5bbf67645e +bladeMaster 7/52 bb708993713ae825 +bladeMaster 7/59 e56c225fa2fb0987 +bladeMaster 7/6 16b25c2c4ca65f81 +bladeMaster 7/60 ba3d6e513f13f0b5 +bladeMaster 7/61 f2576dba99cde5df +bladeMaster 7/62 60df63c43732c2b9 +bladeMaster 7/63 d1995acb4dcae717 +bladeMaster 7/64 d09f0fb2990d62d8 +bladeMaster 7/65 c8ca8193620a600a +bladeMaster 7/66 a1b589a0539ac2a6 +bladeMaster 7/67 34f1ff3392b71993 +bladeMaster 7/68 726d6b3e85be97db +bladeMaster 7/69 6266fa6e41bc42ca +bladeMaster 7/7 373da62ac0b70cd5 +bladeMaster 7/70 0fdb045394513eb1 +bladeMaster 7/72 1e775ebde59716d0 +bladeMaster 7/73 fc11a8251a249586 +bladeMaster 7/8 628f906de3fc2f1d +bladeMaster 7/9 f329dc53b61b5149 +bladeMaster 8/0 8e9c748a034d390c +bladeMaster 8/1 d7c715b3ee97dc70 +bladeMaster 8/10 6df5d603947f5c5a +bladeMaster 8/11 d70747f64e0a40ec +bladeMaster 8/12 a2378c6e6e2200e8 +bladeMaster 8/13 ed10fff298c0780e +bladeMaster 8/14 dd84981d627e9047 +bladeMaster 8/15 d8ee4aff75279049 +bladeMaster 8/16 1a9d6524f483537b +bladeMaster 8/17 fa24465180cd5bfc +bladeMaster 8/18 1d622566c72834d0 +bladeMaster 8/19 2f6f43d0ef90a0bb +bladeMaster 8/2 fd44811ad6347aba +bladeMaster 8/20 e674870af10db29b +bladeMaster 8/21 7290974dc1203816 +bladeMaster 8/22 2ea2e5525459a9b8 +bladeMaster 8/23 7edb207ceefbf589 +bladeMaster 8/24 fc92161acce33ec9 +bladeMaster 8/25 a5592668c1154182 +bladeMaster 8/26 fab8e1b2f2f71075 +bladeMaster 8/27 9d30e47c03079774 +bladeMaster 8/28 39f0078967869c4d +bladeMaster 8/29 44f2c9716d323195 +bladeMaster 8/3 4fa6dd6e38ed6136 +bladeMaster 8/30 622dbe9d00b3fb53 +bladeMaster 8/31 44722e2a4cb72a1d +bladeMaster 8/32 0159b786068410aa +bladeMaster 8/33 e77e7bb2db6ef833 +bladeMaster 8/34 ffb9d1e9d7c510fb +bladeMaster 8/35 2d1085374caaec0b +bladeMaster 8/36 c2664253ecbedb05 +bladeMaster 8/37 fa142ac859086c0b +bladeMaster 8/38 22395dc12943c26a +bladeMaster 8/39 b0f8212ff3e86e93 +bladeMaster 8/4 e28d4eca9acad0df +bladeMaster 8/40 04dc51f90fa08f40 +bladeMaster 8/41 a8325ad2eba57a48 +bladeMaster 8/42 1f4e0726cb9436a6 +bladeMaster 8/43 64664bf41f199975 +bladeMaster 8/44 8374d6064be02898 +bladeMaster 8/45 a8682c24520e3a59 +bladeMaster 8/46 08732b5f9befeb37 +bladeMaster 8/47 be7160e8ed35175b +bladeMaster 8/48 6c037d87947e0a21 +bladeMaster 8/49 077c78a6c89adc93 +bladeMaster 8/5 db2c4f36bfc6d643 +bladeMaster 8/50 574297811b93818f +bladeMaster 8/51 c2b46101663a945d +bladeMaster 8/52 4da4b6e42646003a +bladeMaster 8/59 9feacb572d6a6add +bladeMaster 8/6 0b1ce414baf1a325 +bladeMaster 8/60 6a0eb0bec25a2b54 +bladeMaster 8/61 d8f3a1f0014cfa2d +bladeMaster 8/62 eabc3865e03d7a48 +bladeMaster 8/63 159d7fbed56a8edb +bladeMaster 8/64 037cff9a2b434273 +bladeMaster 8/65 7bb3d1cef31245a5 +bladeMaster 8/66 bef7c9d5bd72b420 +bladeMaster 8/67 ba0ecafda7aebee6 +bladeMaster 8/68 5764a87e4ace8eb7 +bladeMaster 8/69 3182324925f6951c +bladeMaster 8/7 8c738ced37193529 +bladeMaster 8/70 6fe0e1aa771ab7eb +bladeMaster 8/71 0dc0dc0ef17ef61e +bladeMaster 8/72 05be27f597483cc8 +bladeMaster 8/73 8cec5ed0385e423e +bladeMaster 8/8 798b84e702e20063 +bladeMaster 8/9 4dfa3cbe90ef4abf +bladeMaster 9/0 65c38a6e9e4aac5e +bladeMaster 9/1 62cea8734475ac10 +bladeMaster 9/10 979022443d688a0a +bladeMaster 9/11 1bfd8f7293a8dbf9 +bladeMaster 9/12 794aeb1db896259b +bladeMaster 9/13 e487292418a8d6c2 +bladeMaster 9/14 f4db175a640679fc +bladeMaster 9/15 1fe2020152ccd512 +bladeMaster 9/16 509658b2c7ccf11d +bladeMaster 9/17 9d69f12fe8938263 +bladeMaster 9/18 a8e663d9cb3d5e10 +bladeMaster 9/19 2a394ad37cbe8248 +bladeMaster 9/2 fcb6bba2258d4dd9 +bladeMaster 9/20 c60d8ea303880188 +bladeMaster 9/21 6c554ae41da3075b +bladeMaster 9/22 5ce1defb53f32716 +bladeMaster 9/23 a5faab6eaf0c4bff +bladeMaster 9/24 5871e76c87948463 +bladeMaster 9/25 bb610ee2f736bc19 +bladeMaster 9/26 68e399c445a5bb59 +bladeMaster 9/27 b91228c0b24845c6 +bladeMaster 9/28 73ef2f570be09b98 +bladeMaster 9/29 16f857a17d1ad4bb +bladeMaster 9/3 f4f7ce0640347050 +bladeMaster 9/30 46618893449f64da +bladeMaster 9/31 1a27bb281a33794e +bladeMaster 9/32 fcd3b9a78715bbc0 +bladeMaster 9/33 a0a395c73065a4ec +bladeMaster 9/34 9f3cc4b08d5617cc +bladeMaster 9/35 88b6469e8ed53386 +bladeMaster 9/36 67bbb940cd3814e7 +bladeMaster 9/37 5e58f4750f14d755 +bladeMaster 9/38 da85021a058487df +bladeMaster 9/39 43cd4a90204df678 +bladeMaster 9/4 0fa09bb548e759e6 +bladeMaster 9/40 4208d2f980cbb755 +bladeMaster 9/41 b925374fea205222 +bladeMaster 9/42 54dc991a6888b3bd +bladeMaster 9/43 320149ef4b4b47ee +bladeMaster 9/44 26c4266f6167f2a6 +bladeMaster 9/45 54d59f864385a56c +bladeMaster 9/46 ab0220bc5b76544b +bladeMaster 9/47 7c45064af8516b55 +bladeMaster 9/48 6721ef4ef2d74ea6 +bladeMaster 9/49 929b0a2526b37dbf +bladeMaster 9/5 047f5187c717e9d4 +bladeMaster 9/50 05309232ae37398e +bladeMaster 9/51 e38b0b970984f28f +bladeMaster 9/52 5fa6512cd3512434 +bladeMaster 9/59 12dd8a6fa4c2fc47 +bladeMaster 9/6 7f92021ed18093d9 +bladeMaster 9/60 5b9131479ad541a6 +bladeMaster 9/61 d92c791cc201ad8d +bladeMaster 9/62 d3d166a00753a38f +bladeMaster 9/63 913a47dadb641d26 +bladeMaster 9/64 0ee1e123d5eedbd6 +bladeMaster 9/65 41ec739be0806291 +bladeMaster 9/66 65df8bbe3928baf0 +bladeMaster 9/67 0e25a8236e2247ef +bladeMaster 9/68 e68afde35d1279ca +bladeMaster 9/69 fc7fef08799b77a3 +bladeMaster 9/7 787b99de885f9ce3 +bladeMaster 9/70 ebdb47bd2384c811 +bladeMaster 9/71 a8667ef19ada300a +bladeMaster 9/72 14149e8961b94f57 +bladeMaster 9/73 311e24ffe10339bc +bladeMaster 9/8 e729bfea047ca286 +bladeMaster 9/9 01ada0a47f3919de +newDarkWizard 0/0 43abab5ac08318ce +newDarkWizard 0/1 d76281a7238e2433 +newDarkWizard 0/10 b21bfc487032161a +newDarkWizard 0/11 00f0a742ce2c5542 +newDarkWizard 0/12 4090e9423ee30dbf +newDarkWizard 0/13 f4d11ba066c3184a +newDarkWizard 0/14 674d865356367a36 +newDarkWizard 0/15 9b09ef315ba3da29 +newDarkWizard 0/16 8eb6cbed373c8cef +newDarkWizard 0/17 5d83fdf4c63d12cf +newDarkWizard 0/18 7b1cc36e338eb955 +newDarkWizard 0/19 1f3b02f7c8928fd8 +newDarkWizard 0/2 2358c74d71fdb94e +newDarkWizard 0/20 f7c713879f224114 +newDarkWizard 0/21 0d09472137750a6b +newDarkWizard 0/22 15e58d97dd0906e0 +newDarkWizard 0/23 a25baec8b016d634 +newDarkWizard 0/24 5b59e36ad5f8c132 +newDarkWizard 0/25 d6e923c105c62e79 +newDarkWizard 0/26 e95912b9f2f97aa9 +newDarkWizard 0/27 e8fef209baedc3b5 +newDarkWizard 0/28 a56a44b89fcaf23d +newDarkWizard 0/3 9e6285c0cb7603c7 +newDarkWizard 0/31 c684d3ea7e34adf1 +newDarkWizard 0/32 5abf67a1e260006d +newDarkWizard 0/33 59dbe1c5582d56fe +newDarkWizard 0/34 12141f264c34b87a +newDarkWizard 0/35 bd5a2b637ee6d9f3 +newDarkWizard 0/4 d8078e76cce21c71 +newDarkWizard 0/5 4718d01d9b23a7c9 +newDarkWizard 0/6 fa33a01a4560058d +newDarkWizard 0/7 e7ebf4352216aa6e +newDarkWizard 0/8 6b9f556343016eac +newDarkWizard 0/9 d955d2c0dd863ea7 +newDarkWizard 1/0 3165d6effe8ffed9 +newDarkWizard 1/1 88e696a6e7fce900 +newDarkWizard 1/2 a57f574b7da46976 +newDarkWizard 1/3 54504190c0917563 +newDarkWizard 1/4 a1c2c177dc90e8ce +newDarkWizard 1/5 57a48c4502fe2733 +newDarkWizard 1/6 0583d2ca4551edd7 +newDarkWizard 1/7 435559bcccb69277 +newDarkWizard 1/8 0af64145e8b009f5 +newDarkWizard 10/0 16560fd7fd9c9164 +newDarkWizard 10/1 e93f59d4c19b6cef +newDarkWizard 10/10 584431271a5b45c5 +newDarkWizard 10/11 073c14aafa2af089 +newDarkWizard 10/12 2685861ed3493a80 +newDarkWizard 10/13 900d26b8e72ae1bb +newDarkWizard 10/14 304a9842ac95a25c +newDarkWizard 10/15 c194923a34a5c688 +newDarkWizard 10/16 e810d38ac20b85e5 +newDarkWizard 10/17 6015e6f1c3b4d653 +newDarkWizard 10/18 498bd74f55ddfb97 +newDarkWizard 10/19 1a1ae5b76376310b +newDarkWizard 10/2 22df5692515c6834 +newDarkWizard 10/20 d4b8ffcd056f7470 +newDarkWizard 10/21 a3e3e87ba8ea8a20 +newDarkWizard 10/22 11fbd39ed2152851 +newDarkWizard 10/23 41c1a63106761a5e +newDarkWizard 10/24 a5e57edfa4507223 +newDarkWizard 10/25 10b874f019a6b737 +newDarkWizard 10/26 9f2312f8457036bd +newDarkWizard 10/27 f5b08326704fd5d1 +newDarkWizard 10/28 b0aaa7729a5316cb +newDarkWizard 10/29 2f7138e5cad8d24c +newDarkWizard 10/3 8f79eb1d419932bb +newDarkWizard 10/30 da0a67eb44af50f4 +newDarkWizard 10/31 48709275e2f37296 +newDarkWizard 10/32 885af5864732f9d0 +newDarkWizard 10/33 19c8f654d9b3729a +newDarkWizard 10/34 b3bc0dbb230c8fee +newDarkWizard 10/35 06d2772144b3abda +newDarkWizard 10/36 b39f76b2e9b12a26 +newDarkWizard 10/37 a8fba0b98660aaf1 +newDarkWizard 10/38 2f2f71709232714e +newDarkWizard 10/39 07023bbed527d19c +newDarkWizard 10/4 e6b4844a911ed8ea +newDarkWizard 10/40 44d0052da3e3479a +newDarkWizard 10/41 410177dfe6f6af27 +newDarkWizard 10/42 457e742d4b0f57af +newDarkWizard 10/43 afaac04198e2fd39 +newDarkWizard 10/44 0868ec813ccf7c9c +newDarkWizard 10/45 dabb450cd62b94ba +newDarkWizard 10/46 889ec46af4c297b8 +newDarkWizard 10/47 d441d5b7aaaf80d6 +newDarkWizard 10/48 f5c95d1b8138e880 +newDarkWizard 10/49 f32792af097479ff +newDarkWizard 10/5 e62fdd78433e38ac +newDarkWizard 10/50 cae11ba50dcd1d8c +newDarkWizard 10/51 6fdaf3c64343c49d +newDarkWizard 10/52 6ff34d8708f170d8 +newDarkWizard 10/6 5e12d4c94fb2e5a6 +newDarkWizard 10/62 7bf2cf6e2ee8c131 +newDarkWizard 10/63 e21eee43c5264f5c +newDarkWizard 10/64 1abde7742b43968c +newDarkWizard 10/65 db16b90406874ee0 +newDarkWizard 10/66 b75754e6c08568e5 +newDarkWizard 10/67 e76e74ad81e11930 +newDarkWizard 10/68 0c328cee6212aaab +newDarkWizard 10/69 b952a46c0c2d014b +newDarkWizard 10/7 3badeffd78a4ddb1 +newDarkWizard 10/70 24490a6d981d48b6 +newDarkWizard 10/71 9f60852a3de543f8 +newDarkWizard 10/8 6eac91a9d5b6f56c +newDarkWizard 10/9 65a5ad74c87182fe +newDarkWizard 11/0 967cc3bbf2a84089 +newDarkWizard 11/1 a29e7326b55b21ac +newDarkWizard 11/10 32ab56ab945e5022 +newDarkWizard 11/11 80d2b9ac541b0df9 +newDarkWizard 11/12 c45bab482dfe8f54 +newDarkWizard 11/13 7f24d7db2bd836b5 +newDarkWizard 11/14 d7dd6b78bc52db66 +newDarkWizard 11/15 6eb3544af5dbd2fd +newDarkWizard 11/16 478854047a2d9178 +newDarkWizard 11/17 0efdd3569fe9257a +newDarkWizard 11/18 f64684355397210e +newDarkWizard 11/19 aac749e3392aabec +newDarkWizard 11/2 91c6e31dab91778e +newDarkWizard 11/20 aa82802a442b5cc9 +newDarkWizard 11/21 6939954262ab5507 +newDarkWizard 11/22 cd7e1290e6997538 +newDarkWizard 11/23 ad5bfe36551f7964 +newDarkWizard 11/24 c62b7f41bd8a09d0 +newDarkWizard 11/25 8faa6353cd07fd9f +newDarkWizard 11/26 d065cffe7e48b88b +newDarkWizard 11/27 277e95c9991a46d9 +newDarkWizard 11/28 c3baf82613a31879 +newDarkWizard 11/29 1f6cfe0514b210a6 +newDarkWizard 11/3 bef1502139b3c15c +newDarkWizard 11/30 4c9669f85172f7bc +newDarkWizard 11/31 638507bf26c62b2b +newDarkWizard 11/32 7d534b27961bddf2 +newDarkWizard 11/33 4c06a4e5a061193f +newDarkWizard 11/34 949498f6b68c3de5 +newDarkWizard 11/35 460cabcd78ed3258 +newDarkWizard 11/36 2f806ad8a59b6410 +newDarkWizard 11/37 d61c61ed5150875e +newDarkWizard 11/38 426fa6ffadca0c7f +newDarkWizard 11/39 bcea2354cf7e4fde +newDarkWizard 11/4 5fd2628fbba2e647 +newDarkWizard 11/40 763ad0fbd8768709 +newDarkWizard 11/41 d8ddda1c9c31eefb +newDarkWizard 11/42 842f9f1b3f5e02df +newDarkWizard 11/43 ad5f96a9ff371878 +newDarkWizard 11/44 4773b61aad7084c3 +newDarkWizard 11/45 780cf53e83dc1015 +newDarkWizard 11/46 d25e789fafb21e35 +newDarkWizard 11/47 e77ac2108983e63d +newDarkWizard 11/48 b816f9b6a0b836bd +newDarkWizard 11/49 371d495c9fa16970 +newDarkWizard 11/5 f6afc472a4f6c94b +newDarkWizard 11/50 55b86f079705a1b6 +newDarkWizard 11/51 0f4c7f5e6f1078df +newDarkWizard 11/52 1d413ffc7aafac32 +newDarkWizard 11/59 ae729389720b6065 +newDarkWizard 11/6 2d8bbb54bbfb7c04 +newDarkWizard 11/60 a2ed748e277a01e1 +newDarkWizard 11/61 d08fbd36100ce4d5 +newDarkWizard 11/62 62c4fb8e487e7e86 +newDarkWizard 11/63 486b5130c40e0ed5 +newDarkWizard 11/64 8f5a3efeea32a894 +newDarkWizard 11/65 7817993b26f7b7ee +newDarkWizard 11/66 db8ca730fe6494a9 +newDarkWizard 11/67 5ec22e983d730453 +newDarkWizard 11/68 9409d1b7b394ec22 +newDarkWizard 11/69 0028935d0eb9e046 +newDarkWizard 11/7 e3cda4ac36ff625b +newDarkWizard 11/70 26cdeeadadd39960 +newDarkWizard 11/71 384952b982877696 +newDarkWizard 11/72 376e8032fa0f7b3d +newDarkWizard 11/73 4b8198ae457d464c +newDarkWizard 11/8 673fd440dc9c6bbd +newDarkWizard 11/9 df7b1ca9d5b52808 +newDarkWizard 12/0 722755a88ebbb40d +newDarkWizard 12/1 c7267a641bf5d041 +newDarkWizard 12/10 a905bfa19d8ccc8f +newDarkWizard 12/100 ace0cbe8324255ff +newDarkWizard 12/101 efe807f6b2616b6d +newDarkWizard 12/102 ae337c04909c73e5 +newDarkWizard 12/103 a618149f9df0bae7 +newDarkWizard 12/104 e4cb92336459b4cb +newDarkWizard 12/105 13b933945cc50391 +newDarkWizard 12/106 1e611ff7df8e8d95 +newDarkWizard 12/107 148958a4c0e0b82f +newDarkWizard 12/108 c8fd75d413be873b +newDarkWizard 12/109 9c8b62b1ae9e42e3 +newDarkWizard 12/11 37ec68e823ad3ba9 +newDarkWizard 12/110 8466580ae62bf97f +newDarkWizard 12/111 0fa8b88292f3222d +newDarkWizard 12/112 d568652384dbc381 +newDarkWizard 12/113 049cd597a1b31929 +newDarkWizard 12/114 2439f565157eb709 +newDarkWizard 12/115 64d6ccc6c740e089 +newDarkWizard 12/116 100fd82d6aa5531d +newDarkWizard 12/117 7b1d953f44795115 +newDarkWizard 12/118 e99e3c9b9dc8da4f +newDarkWizard 12/119 1aa21c30ae17c11f +newDarkWizard 12/12 d42d14fb95ea5f9f +newDarkWizard 12/120 7552475392a1150b +newDarkWizard 12/121 543a2e63f96b31d1 +newDarkWizard 12/122 0762d070ad38acfd +newDarkWizard 12/123 0193c8772628c791 +newDarkWizard 12/124 121b01d493121c05 +newDarkWizard 12/125 6f61bd066d03b3cd +newDarkWizard 12/126 f93c761b53a96b6d +newDarkWizard 12/127 3a76e34e4b5c1dab +newDarkWizard 12/128 bc1d6bb1ca836d31 +newDarkWizard 12/129 0a66275606de4775 +newDarkWizard 12/13 7d4a79cc1fa09907 +newDarkWizard 12/130 b949dcd9f1b9093d +newDarkWizard 12/131 835a525bb5a153df +newDarkWizard 12/132 fdfc4f1d9e42a713 +newDarkWizard 12/133 a1fb91ba920261f7 +newDarkWizard 12/134 39e96043ca155053 +newDarkWizard 12/135 194b3e01704e8089 +newDarkWizard 12/136 d3700c9c69c24d83 +newDarkWizard 12/137 f889d8c3c5ae9a63 +newDarkWizard 12/138 32c8be98c2efde43 +newDarkWizard 12/139 7a008263db90f54f +newDarkWizard 12/14 0f2e7b0ae8d0df07 +newDarkWizard 12/140 d9e7df472c7b036b +newDarkWizard 12/141 82ef38ecc63f2ae3 +newDarkWizard 12/142 514fcce998eaea7b +newDarkWizard 12/143 b678d4e6713f2f1b +newDarkWizard 12/15 881af6d245cd85d1 +newDarkWizard 12/16 41a1178e62b4b32f +newDarkWizard 12/17 9f4d6590ca853c27 +newDarkWizard 12/18 e24322be10718237 +newDarkWizard 12/19 1de44b5729891d9f +newDarkWizard 12/2 e2dfde0b710ffb2d +newDarkWizard 12/21 2269caaf8fba1fb7 +newDarkWizard 12/22 24331b4999eb6ca7 +newDarkWizard 12/23 154cd5548d89708f +newDarkWizard 12/24 824b525a5f8bb5cf +newDarkWizard 12/26 8e46436f467e492f +newDarkWizard 12/3 71fa367a69d46828 +newDarkWizard 12/30 948ac956c6cc2bff +newDarkWizard 12/31 0878942c1ef09697 +newDarkWizard 12/32 f4c0c92c81e53e61 +newDarkWizard 12/33 e3ec721d0e4b91d9 +newDarkWizard 12/34 e504a9064f93cb5d +newDarkWizard 12/35 a5a7a1710ac81991 +newDarkWizard 12/36 47c71b51a54270ed +newDarkWizard 12/37 d567a53097bbb9ef +newDarkWizard 12/38 cb5d77f26991c4b1 +newDarkWizard 12/39 fab8e1d39d305fe7 +newDarkWizard 12/4 d316819146727ec4 +newDarkWizard 12/40 0afa06ba113054dd +newDarkWizard 12/41 21a27c223b6b8473 +newDarkWizard 12/42 75c0b0cf93c02b2a +newDarkWizard 12/43 e11af59b19043eb7 +newDarkWizard 12/44 31f4c40967319937 +newDarkWizard 12/45 84478923d33fed0f +newDarkWizard 12/46 1deb71b878c4d787 +newDarkWizard 12/47 c297034624125f27 +newDarkWizard 12/48 4e02a3955c48d34f +newDarkWizard 12/49 9a0c11de4ff339e6 +newDarkWizard 12/5 7632ea85dd2a8e30 +newDarkWizard 12/50 2e5aa267e194f293 +newDarkWizard 12/6 68e750482d14e5f0 +newDarkWizard 12/60 5305b88bf4aaa959 +newDarkWizard 12/61 fbf77eab0ae51083 +newDarkWizard 12/62 6f883c5b173acbaf +newDarkWizard 12/63 17c1c6045eb4e10b +newDarkWizard 12/64 1e1b0fccd07ceca9 +newDarkWizard 12/65 5941b80a6e1df989 +newDarkWizard 12/7 86647f510e6bacf7 +newDarkWizard 12/70 a8fbc988a7312a67 +newDarkWizard 12/71 76f087ea8e66ad57 +newDarkWizard 12/72 dbdfa055cdc0a20b +newDarkWizard 12/8 d2dad957bda8aca7 +newDarkWizard 12/9 fe03ec574f46b677 +newDarkWizard 13/0 7392110397391a17 +newDarkWizard 13/1 f70a6636e9e361c9 +newDarkWizard 13/10 73b8daab6d07a605 +newDarkWizard 13/103 a0c06587ab860a57 +newDarkWizard 13/104 e25ec83ad8a71087 +newDarkWizard 13/105 11c44a149124e637 +newDarkWizard 13/106 56c938f4fc100809 +newDarkWizard 13/107 22f7dc22142daacd +newDarkWizard 13/109 62dda29b1e8ac567 +newDarkWizard 13/11 ca251cadf4efe0af +newDarkWizard 13/110 d21fdcf7bd5da3ef +newDarkWizard 13/111 7c6995664dc669f7 +newDarkWizard 13/112 b6d1c4164fc45eb7 +newDarkWizard 13/113 9bba473761a8fbd7 +newDarkWizard 13/114 be80ff02dda7ff87 +newDarkWizard 13/115 79a6f7868b041687 +newDarkWizard 13/116 a65bd32348eed3c7 +newDarkWizard 13/117 2f4a8fe8a8543ebf +newDarkWizard 13/118 594a3416af0c2207 +newDarkWizard 13/119 4556b07b3faf16af +newDarkWizard 13/12 ac06d929afdcbf21 +newDarkWizard 13/120 82292ce5233e4427 +newDarkWizard 13/121 706a4efc0b80fa9f +newDarkWizard 13/122 4cc1c33760414973 +newDarkWizard 13/123 f3dda8993e0e2633 +newDarkWizard 13/124 0f8347c18ec36c17 +newDarkWizard 13/125 866a46434a96a9ab +newDarkWizard 13/126 cd02aab0ffd34d27 +newDarkWizard 13/127 a0e4bf3c0b9b0cc7 +newDarkWizard 13/128 6eb83947ae6255b3 +newDarkWizard 13/129 f84dc961130cf64b +newDarkWizard 13/13 0d0e7fd58ff8b825 +newDarkWizard 13/130 8e4a02eaec7a2163 +newDarkWizard 13/131 57d9f5b854210f03 +newDarkWizard 13/132 31086e82282ebb8b +newDarkWizard 13/133 d364626c60c36753 +newDarkWizard 13/134 67ad94ef50b2e1a7 +newDarkWizard 13/135 ac92570bf4df4bd1 +newDarkWizard 13/136 3527092c0f8db6f9 +newDarkWizard 13/137 f51d5582336e12e1 +newDarkWizard 13/138 7cb539aa5f722b51 +newDarkWizard 13/139 36020c77f301d5c1 +newDarkWizard 13/14 22783d889c964739 +newDarkWizard 13/140 a8234a1ec30cc531 +newDarkWizard 13/141 33351655b6812699 +newDarkWizard 13/142 17990a47be7698e1 +newDarkWizard 13/143 73c343087474bff9 +newDarkWizard 13/144 9760b94e063b84a1 +newDarkWizard 13/15 34e632e4ef2021cd +newDarkWizard 13/16 030350570d552f51 +newDarkWizard 13/17 f0946f4c21761b51 +newDarkWizard 13/18 cffecd839926dbaf +newDarkWizard 13/19 d7b537649b8a6c2f +newDarkWizard 13/2 6a265006848e57af +newDarkWizard 13/20 dd6bbd7965c66b6c +newDarkWizard 13/21 82c7e83132cfe0d9 +newDarkWizard 13/22 d5c17f6322acb259 +newDarkWizard 13/23 02cb23ffbe023d29 +newDarkWizard 13/24 26aa21a155328969 +newDarkWizard 13/25 bd928dcd6e2ce3b5 +newDarkWizard 13/26 b18ad7cc5dc0cabf +newDarkWizard 13/27 44740b0b5e133ff9 +newDarkWizard 13/28 70b2a54c0fbd5281 +newDarkWizard 13/29 0a90b62ec6535667 +newDarkWizard 13/3 ce13bbe3929d1677 +newDarkWizard 13/30 56d05f6e8564d1b9 +newDarkWizard 13/31 38092e722dfbb503 +newDarkWizard 13/32 604569a5586adeb1 +newDarkWizard 13/33 fb22d733400b2441 +newDarkWizard 13/34 2e951a2b32305e09 +newDarkWizard 13/35 1b6db1b0541416c3 +newDarkWizard 13/36 8b7bc1f5c088e80c +newDarkWizard 13/37 813f49170771a951 +newDarkWizard 13/38 9a1d214104c38129 +newDarkWizard 13/39 f8300227ebbb3b3a +newDarkWizard 13/4 9248b7654a0bc221 +newDarkWizard 13/40 d622d9635c4c20bd +newDarkWizard 13/41 a60f65444044221b +newDarkWizard 13/42 7c2007c5c5121bae +newDarkWizard 13/43 767ee61993c3cabf +newDarkWizard 13/44 619da2b17735d3ef +newDarkWizard 13/45 5a22f067fe2046d7 +newDarkWizard 13/46 467d0c4a6785a99f +newDarkWizard 13/47 274c4c72da37f20b +newDarkWizard 13/48 3160a03383623ce7 +newDarkWizard 13/49 935a3932c49e11ff +newDarkWizard 13/5 0023ef722ff7f135 +newDarkWizard 13/50 a9be140b7e205df7 +newDarkWizard 13/51 52a7b589bd7ec6af +newDarkWizard 13/52 07aab6b3e768c069 +newDarkWizard 13/53 f60eef5ebabb6439 +newDarkWizard 13/54 981bf5cee0219a99 +newDarkWizard 13/55 ec31da2f2e6bb615 +newDarkWizard 13/56 f65899c19a6dd4d9 +newDarkWizard 13/57 b67e29983438b725 +newDarkWizard 13/58 b26c9fc094765a75 +newDarkWizard 13/59 30c16f909dfc8a8f +newDarkWizard 13/60 501db23c8db8b75f +newDarkWizard 13/61 2648fa6c3b24a55b +newDarkWizard 13/62 38882f540d6b57c7 +newDarkWizard 13/63 9a02ce95ffd5ce9f +newDarkWizard 13/64 6fe4e2b91af9eb47 +newDarkWizard 13/65 1c11ed11d28a2c1b +newDarkWizard 13/66 d5f6c9e8a038110f +newDarkWizard 13/67 d2e2051ae80371ed +newDarkWizard 13/68 fcd933a61755dc6b +newDarkWizard 13/69 f344f755c2696caf +newDarkWizard 13/7 3330d0097ba26b7b +newDarkWizard 13/70 6af124eaa3190dcf +newDarkWizard 13/71 0df227b29824b397 +newDarkWizard 13/72 8ce4f7de71ecb317 +newDarkWizard 13/73 0715b3cfbbe11ac7 +newDarkWizard 13/74 a7c6c1fd17465e8f +newDarkWizard 13/75 25c98569e923395f +newDarkWizard 13/76 2400633ed2a51bbf +newDarkWizard 13/8 7a84bd02a621e59c +newDarkWizard 13/80 7c29e56dcf23d8ff +newDarkWizard 13/81 0d4f194599173b1f +newDarkWizard 13/82 aa498d64785d5177 +newDarkWizard 13/83 477c82d2000b9501 +newDarkWizard 13/84 65d8038378da4c73 +newDarkWizard 13/85 6e460e4fd3357b59 +newDarkWizard 13/86 fd811954964f473f +newDarkWizard 13/87 6b56df3b7634b883 +newDarkWizard 13/88 00b45840876f795f +newDarkWizard 13/89 0d1d55db5dba9ba7 +newDarkWizard 13/9 2357013b38b20a2d +newDarkWizard 13/90 6f0a07b2f9efbb69 +newDarkWizard 13/91 72596b59778cb3db +newDarkWizard 13/92 1ae3a448940e92f7 +newDarkWizard 13/93 9014222cac01631d +newDarkWizard 13/94 a9b46b3a6597678f +newDarkWizard 13/95 fe89957e5f92159b +newDarkWizard 13/96 abed498aeedccec7 +newDarkWizard 13/97 8d8d68e87900f9df +newDarkWizard 13/98 767d807d241fa79f +newDarkWizard 13/99 e1bbf2b744b22237 +newDarkWizard 14/0 0e75992c5c685491 +newDarkWizard 14/1 1cf3d14cf5fdae99 +newDarkWizard 14/10 e914bb5934358487 +newDarkWizard 14/100 e2938f447feea095 +newDarkWizard 14/101 7e9db85331cc3865 +newDarkWizard 14/102 b2bc5e7d4bf6b56f +newDarkWizard 14/103 0a0faeb76de93bb3 +newDarkWizard 14/104 d6d403900c55b50f +newDarkWizard 14/105 e9abe6867c9564e3 +newDarkWizard 14/106 9ad4df3b27fd870f +newDarkWizard 14/107 9d6f17c568bfbc1b +newDarkWizard 14/108 14f6fac0daa28afb +newDarkWizard 14/109 c0d5b4084f8267cb +newDarkWizard 14/11 526ac98541f0fc99 +newDarkWizard 14/110 0d79a8c89a8f8d2f +newDarkWizard 14/111 6fd718b0b3e9b887 +newDarkWizard 14/112 680ebd8daa70f68f +newDarkWizard 14/113 c3fcf7e9a42f4a57 +newDarkWizard 14/114 5b1e86d36ee977a7 +newDarkWizard 14/115 93bdcd4ff3bbfa9f +newDarkWizard 14/116 c3c23f935631b2ef +newDarkWizard 14/117 757f3c45d7635447 +newDarkWizard 14/118 42a7081e35e242ff +newDarkWizard 14/119 5ca986e84a8a2747 +newDarkWizard 14/12 105995432f607ba3 +newDarkWizard 14/120 9bf1be432721439f +newDarkWizard 14/121 07fd78217089de87 +newDarkWizard 14/122 5cad2c7bdc43bad7 +newDarkWizard 14/123 059a2889b7c83b1f +newDarkWizard 14/124 94495a8a9fb64f2f +newDarkWizard 14/125 79419fb650d8b38f +newDarkWizard 14/126 df16ce76226b63df +newDarkWizard 14/127 05143cdd0f0e61af +newDarkWizard 14/128 b6166b01b0c49797 +newDarkWizard 14/129 b27a33569e28fd7f +newDarkWizard 14/13 9fb07e3fd7608069 +newDarkWizard 14/130 de053e93ebd1294f +newDarkWizard 14/131 47501066ea51dc67 +newDarkWizard 14/132 a5d467c35b64dfcf +newDarkWizard 14/133 f0bfe8d8aab0bbdb +newDarkWizard 14/134 ca1b186f8de66997 +newDarkWizard 14/135 e177ef83bfc77def +newDarkWizard 14/136 19878f834c4b3827 +newDarkWizard 14/137 1a21981517631df7 +newDarkWizard 14/138 5ca0ab39c5575ce7 +newDarkWizard 14/139 359010652d835157 +newDarkWizard 14/14 9f67faa39bbdfd31 +newDarkWizard 14/140 22bc6afb2a5d71bf +newDarkWizard 14/141 955b553b2b5186d9 +newDarkWizard 14/142 4a8e85091a5650b1 +newDarkWizard 14/143 a3a213dfb3dbe8e9 +newDarkWizard 14/144 15faa000cf449cc1 +newDarkWizard 14/145 4facca377b3ec7c7 +newDarkWizard 14/146 fe265c655cb65e47 +newDarkWizard 14/147 c494659308cbfdbf +newDarkWizard 14/148 a840f0078ff4275f +newDarkWizard 14/149 2561a9d80573184f +newDarkWizard 14/15 b4dea4850ee63c57 +newDarkWizard 14/150 23e73e511cf1bb5f +newDarkWizard 14/151 f84f4fc6a90a278f +newDarkWizard 14/152 f43cda3711c89f97 +newDarkWizard 14/153 4a4155a11eef50c5 +newDarkWizard 14/154 2fbf50213eac0f81 +newDarkWizard 14/155 3e334494c05d1f01 +newDarkWizard 14/156 b0386049c7944b21 +newDarkWizard 14/157 2c9588743a7960f7 +newDarkWizard 14/158 a88257b8a97ef6c7 +newDarkWizard 14/159 cc60b9b519d39bd7 +newDarkWizard 14/16 0d057527d0afc2d9 +newDarkWizard 14/160 20aa3199779df619 +newDarkWizard 14/161 4afd4b36491b4789 +newDarkWizard 14/162 d09f2bcc4e7d7067 +newDarkWizard 14/163 5403d0cf33edf147 +newDarkWizard 14/169 6ee71683899da9e7 +newDarkWizard 14/17 09fe57de2ed54971 +newDarkWizard 14/18 20dafaff6694e799 +newDarkWizard 14/19 bf31a92912519589 +newDarkWizard 14/2 053b4f9be2ee31a5 +newDarkWizard 14/20 4cf110106bcb3e67 +newDarkWizard 14/21 1d3d5783a708f2ee +newDarkWizard 14/22 b6dff055d2d99a01 +newDarkWizard 14/23 c1feaa98fd073ced +newDarkWizard 14/24 c27e06fffd01bb27 +newDarkWizard 14/25 4cc7832e82a33c67 +newDarkWizard 14/26 1f73adb562a8c75b +newDarkWizard 14/28 2a06bc1a19ee2dc1 +newDarkWizard 14/29 4cd203b499bb7167 +newDarkWizard 14/3 9ff5db753763245d +newDarkWizard 14/31 55f01f932fd124d9 +newDarkWizard 14/32 21ed13ce2f5b4b73 +newDarkWizard 14/33 fe9ec82c867f6ca7 +newDarkWizard 14/34 379c90ccb5a4d1e1 +newDarkWizard 14/35 19a9b2260193c74d +newDarkWizard 14/36 67007b3fda2ccb29 +newDarkWizard 14/37 8b10d2d2048fee59 +newDarkWizard 14/38 60118f49b16a5329 +newDarkWizard 14/39 44940cebe5d91085 +newDarkWizard 14/4 dbf48c5bc12b79f5 +newDarkWizard 14/40 3cf353dd635aeafd +newDarkWizard 14/41 95ab4597722fadf3 +newDarkWizard 14/42 7bce9edcf753b2f7 +newDarkWizard 14/43 913e9e93ac525caf +newDarkWizard 14/44 be840bbfe3face53 +newDarkWizard 14/45 58d412eff43d2c71 +newDarkWizard 14/46 e0f2cfa532bc93b3 +newDarkWizard 14/47 959c7e423cceea17 +newDarkWizard 14/48 b10662acfc0ebcaf +newDarkWizard 14/49 fbcf332ea88dc52f +newDarkWizard 14/5 6c681e3318754a59 +newDarkWizard 14/50 99b706c7db930e9b +newDarkWizard 14/51 f6f9dbc1d09bce07 +newDarkWizard 14/52 089a880b99d7b79f +newDarkWizard 14/53 35117b4189364e91 +newDarkWizard 14/54 ee33a4163082f177 +newDarkWizard 14/55 509ed431a590c26f +newDarkWizard 14/56 d08bb894440c935f +newDarkWizard 14/57 1875d6215b819797 +newDarkWizard 14/58 b2f8404f65d2f7cf +newDarkWizard 14/59 2ef7930fb66421ef +newDarkWizard 14/6 25113d2718302611 +newDarkWizard 14/60 2fa3874a91416a37 +newDarkWizard 14/61 4eda2f1a067ffff7 +newDarkWizard 14/62 691e55ae485c96df +newDarkWizard 14/63 fdcd22c1fff6bcdf +newDarkWizard 14/64 e5c90893b58ac4bf +newDarkWizard 14/65 8374968951df9089 +newDarkWizard 14/66 565d90b130468ba1 +newDarkWizard 14/67 c58e149598da9241 +newDarkWizard 14/68 89617eaad46fc939 +newDarkWizard 14/7 97fcee4b79b0f553 +newDarkWizard 14/70 f55c9a6ae06df79b +newDarkWizard 14/71 0e0bc45b342ef263 +newDarkWizard 14/72 7819754bb65757f7 +newDarkWizard 14/73 c09fccb4ca29813f +newDarkWizard 14/74 f3f05c7546dee56f +newDarkWizard 14/75 8c507a50656c4867 +newDarkWizard 14/76 6626dcd7f87848cf +newDarkWizard 14/77 a3597a99980ab3c7 +newDarkWizard 14/78 28a56f5a5b6c3e8f +newDarkWizard 14/79 169f7ff7ee533e3b +newDarkWizard 14/8 275a607710508969 +newDarkWizard 14/80 fb1f194d47b451db +newDarkWizard 14/81 e6c99c9e63675157 +newDarkWizard 14/82 eccd04582c540ecb +newDarkWizard 14/83 3461a71e5bd9b51f +newDarkWizard 14/84 78c9eb5ebc303ab7 +newDarkWizard 14/85 ea25565a0d64f6b7 +newDarkWizard 14/86 13c8c34c1ab2319f +newDarkWizard 14/87 fca39fc5d1af9647 +newDarkWizard 14/88 33637ff82acfc0af +newDarkWizard 14/89 39ac9476241d380f +newDarkWizard 14/9 c6729e0719002e0b +newDarkWizard 14/90 eb7cf1b9618a0a2f +newDarkWizard 14/91 5d708d37fed52fff +newDarkWizard 14/92 2db3ac3526365187 +newDarkWizard 14/93 7a934e419597c12f +newDarkWizard 14/94 9b4ab23f0bb858f7 +newDarkWizard 14/95 3b7393b527cbd4ff +newDarkWizard 14/96 3274aa16bd96ae47 +newDarkWizard 14/97 a68e6e83b1e4e67f +newDarkWizard 14/98 c816e2375d98a40f +newDarkWizard 14/99 3fd0fb4430867017 +newDarkWizard 15/0 8b28d28b6acdb577 +newDarkWizard 15/1 4e6e28833cee3627 +newDarkWizard 15/10 1ca66d83872fc2c7 +newDarkWizard 15/11 775732b3ebabc24f +newDarkWizard 15/12 572cc85b61a86ddf +newDarkWizard 15/13 5d91ad98689c3ea7 +newDarkWizard 15/14 5167eff387435b1f +newDarkWizard 15/15 25c4ab8d7e4e32df +newDarkWizard 15/16 b1e0ad11ca47ce07 +newDarkWizard 15/17 826ec6fb49da2297 +newDarkWizard 15/18 70f78f5a507bd36f +newDarkWizard 15/19 ad781b53ffa40d2f +newDarkWizard 15/2 58faede21a4f4cd7 +newDarkWizard 15/20 0d08a0935c1c760f +newDarkWizard 15/21 be3342cd5e702b0f +newDarkWizard 15/22 714c9ce6f8588c05 +newDarkWizard 15/23 b9b3b9d84e0d017f +newDarkWizard 15/24 0160161d47683edf +newDarkWizard 15/26 89c42c9611460bd7 +newDarkWizard 15/27 195e32459ab64a39 +newDarkWizard 15/28 bacfdd07c9d7576f +newDarkWizard 15/29 32714aba42509cd7 +newDarkWizard 15/3 42ee9f933db5d0ff +newDarkWizard 15/30 42cd1ddb3fea8467 +newDarkWizard 15/31 73aa30565c19d4f9 +newDarkWizard 15/32 947d71c0b8848467 +newDarkWizard 15/33 4d8e7ee91a138f25 +newDarkWizard 15/34 ec3bed2752079af9 +newDarkWizard 15/35 1934ccf93c501997 +newDarkWizard 15/36 f51cb074b02964df +newDarkWizard 15/4 f5546692667f14b7 +newDarkWizard 15/5 8f72fed73d2d97af +newDarkWizard 15/6 2912505a9954e72f +newDarkWizard 15/7 120b71b3aa69fbf7 +newDarkWizard 15/8 1d35287561fdd27f +newDarkWizard 15/9 5eb583b50ea94b8f +newDarkWizard 2/0 f317cfe1179e7b88 +newDarkWizard 2/1 604650456e4ebe58 +newDarkWizard 2/10 baabda694ec570c5 +newDarkWizard 2/11 44cb4e638381067e +newDarkWizard 2/12 6d7f60b365498f7c +newDarkWizard 2/13 91586737375d6f51 +newDarkWizard 2/14 e8c28704d220edc6 +newDarkWizard 2/15 94d52ed261b5528b +newDarkWizard 2/16 cc1550270221b376 +newDarkWizard 2/17 865f3a2dd95c6d0a +newDarkWizard 2/18 efe76bbd0aceda3b +newDarkWizard 2/2 93b6914fce5c0ddc +newDarkWizard 2/3 3d25f60d1cd94f47 +newDarkWizard 2/4 2222639e08ccdd3a +newDarkWizard 2/5 d0fbb30af35a2f20 +newDarkWizard 2/6 f6eecab2b44eaa99 +newDarkWizard 2/7 0cf698fd6a44dc3b +newDarkWizard 2/8 8a1fdc464c1c33fe +newDarkWizard 2/9 8ca11bd39235d1d1 +newDarkWizard 3/0 817c1405dc996fd3 +newDarkWizard 3/1 aace9b7a1f4d8708 +newDarkWizard 3/10 6ad3867325d8af43 +newDarkWizard 3/11 5a0631368d36bf08 +newDarkWizard 3/2 3c00695d9f509380 +newDarkWizard 3/3 6b7613d4f7311240 +newDarkWizard 3/4 5d9b361d3e5278af +newDarkWizard 3/5 bb6a8f72e122a7b7 +newDarkWizard 3/6 e02c2ded08b3fc82 +newDarkWizard 3/7 7c32f5ae3bef77e9 +newDarkWizard 3/8 eecda007a706fd61 +newDarkWizard 3/9 e365fcb5d307ae9a +newDarkWizard 4/0 cc53b1be2d08d230 +newDarkWizard 4/1 a5b6c2fdb51e815b +newDarkWizard 4/10 73ceb3475f89ea20 +newDarkWizard 4/11 06a7ffcd7dcf1341 +newDarkWizard 4/12 7b9b2898ac45292a +newDarkWizard 4/13 f2ff6ceebb429135 +newDarkWizard 4/14 0537a6d157dfbaee +newDarkWizard 4/15 3afe4c0bdd96d073 +newDarkWizard 4/16 dd625ce2f672f7a1 +newDarkWizard 4/17 c52af6c191b49160 +newDarkWizard 4/18 f7d5e81eb5610ecd +newDarkWizard 4/19 06df3f883abc9949 +newDarkWizard 4/2 4a609cc619ff60d8 +newDarkWizard 4/20 84a65137a3f1713b +newDarkWizard 4/21 ed97945fcaa2d12a +newDarkWizard 4/22 708beaf09a3e7e2c +newDarkWizard 4/23 c1174a60f6b0ed19 +newDarkWizard 4/24 793af3b355dfcecd +newDarkWizard 4/3 471c785a430be100 +newDarkWizard 4/4 30bcc93af0c2240f +newDarkWizard 4/5 8e0fbca6871b32ad +newDarkWizard 4/6 4d4b6b2d42c045f1 +newDarkWizard 4/7 08034f934cc9fa5d +newDarkWizard 4/8 7ecb787aaf30c58d +newDarkWizard 4/9 2e58f178cc6d7881 +newDarkWizard 5/0 d4d6292f29822039 +newDarkWizard 5/1 f7bae210e159ffdc +newDarkWizard 5/10 e90ec761c5e2bd61 +newDarkWizard 5/11 34f5d92ee7e5bdd1 +newDarkWizard 5/12 f201cba466035c94 +newDarkWizard 5/13 9164dc68508079c0 +newDarkWizard 5/14 1984bdbe7c3384e8 +newDarkWizard 5/15 550313a30a95ae92 +newDarkWizard 5/16 f3afce1b0c4d06aa +newDarkWizard 5/17 dcf9665096bdc668 +newDarkWizard 5/18 d1a9149b028e3d58 +newDarkWizard 5/19 97ac23481539d19a +newDarkWizard 5/2 02366cdf531e36e5 +newDarkWizard 5/20 d287bcb71143ce5d +newDarkWizard 5/21 c1443accdab95d5c +newDarkWizard 5/22 e97743b49a925449 +newDarkWizard 5/23 e86286039566cd4e +newDarkWizard 5/3 48b29029c010ba38 +newDarkWizard 5/30 f7fc673fa66eec0a +newDarkWizard 5/31 81322ec9cb290c8b +newDarkWizard 5/33 13e034faf248c4d6 +newDarkWizard 5/34 39609c9fe1c83302 +newDarkWizard 5/36 b6e4cf67cb9c808e +newDarkWizard 5/4 e75ee5c0565783c4 +newDarkWizard 5/5 2f19865064407a04 +newDarkWizard 5/6 389efdc96d9de24a +newDarkWizard 5/7 583deed499da35e1 +newDarkWizard 5/8 7cda386a7ce223ba +newDarkWizard 5/9 4068006ba6e417eb +newDarkWizard 6/0 894c0004bc2ddbcc +newDarkWizard 6/1 ab4035baa7af699c +newDarkWizard 6/10 e91abb1fe4975ec9 +newDarkWizard 6/11 1d9502e805c8a274 +newDarkWizard 6/12 e0748dbc158abce8 +newDarkWizard 6/13 03803ec8fb6ce606 +newDarkWizard 6/14 d11d4943a7d78097 +newDarkWizard 6/15 a24c76b21f41eade +newDarkWizard 6/16 acd2d530ccb14b1d +newDarkWizard 6/17 30b5a11aecd52fc6 +newDarkWizard 6/18 54c376f8c77e3d34 +newDarkWizard 6/19 41e5be2661d6c990 +newDarkWizard 6/2 750ccbeeb0c354c9 +newDarkWizard 6/20 66fabb258cab910d +newDarkWizard 6/21 88b9490f75c860fa +newDarkWizard 6/3 113dc79e4014fcc3 +newDarkWizard 6/4 a0ffa2381be51092 +newDarkWizard 6/5 9ec29badc8f26839 +newDarkWizard 6/6 f397421beed755c7 +newDarkWizard 6/7 adb2b94e30dd04a2 +newDarkWizard 6/8 c47c75543baf26b2 +newDarkWizard 6/9 1b940e2bc46d4234 +newDarkWizard 7/0 ef5fb127cca4a083 +newDarkWizard 7/1 37e821051c13c250 +newDarkWizard 7/10 8c3a3312618a3cc5 +newDarkWizard 7/11 25f8b6517e803260 +newDarkWizard 7/12 ff6c148c51164059 +newDarkWizard 7/13 21c585fa242e4ad9 +newDarkWizard 7/14 6fae6b8cfbfe12ab +newDarkWizard 7/16 dc60a6ff73fa121d +newDarkWizard 7/17 c141025e9d9ac47a +newDarkWizard 7/18 494126351fed901e +newDarkWizard 7/19 acadc250c9d1613c +newDarkWizard 7/2 e8e8ca3a8666e740 +newDarkWizard 7/21 64cb59591b411538 +newDarkWizard 7/22 ad4c1ff6db266fb0 +newDarkWizard 7/24 4825c51649bb186e +newDarkWizard 7/25 2a9255d82cc8f46a +newDarkWizard 7/26 4524887f1e22faa5 +newDarkWizard 7/27 f9c7d1ee315be36e +newDarkWizard 7/28 a68d95081cb2dfdf +newDarkWizard 7/29 cf4e87425c2df33f +newDarkWizard 7/3 e2335037f06ecd25 +newDarkWizard 7/30 274d25e128d311a0 +newDarkWizard 7/31 d92f4978bb0d2eca +newDarkWizard 7/33 298d6e05800cba71 +newDarkWizard 7/34 ea75f21516261332 +newDarkWizard 7/35 dff5c7b1898cab27 +newDarkWizard 7/36 1bd5d9091c873671 +newDarkWizard 7/38 e7e222c629683cea +newDarkWizard 7/39 966632cc500cb22e +newDarkWizard 7/4 803b3f7e6f85fdd8 +newDarkWizard 7/40 241a57167bf3f993 +newDarkWizard 7/41 706af466b7a2892a +newDarkWizard 7/42 81ed002b5927a30e +newDarkWizard 7/43 37db8ecf80048d03 +newDarkWizard 7/44 2e31e2d6b307c50e +newDarkWizard 7/45 c2f1d281021d4569 +newDarkWizard 7/46 fa86593600d64dc1 +newDarkWizard 7/49 d8665a84e825aa27 +newDarkWizard 7/5 168cd38ae273c044 +newDarkWizard 7/50 d54ded5a586c3d1a +newDarkWizard 7/51 ac4a560d4b26da00 +newDarkWizard 7/52 3def649034cbb1be +newDarkWizard 7/59 e0301c3aacb6db8f +newDarkWizard 7/6 4da99b741cc6df01 +newDarkWizard 7/60 641a4029b6ce2dcc +newDarkWizard 7/61 f9dfc5655778f0f4 +newDarkWizard 7/62 c388010873fb3765 +newDarkWizard 7/63 d1995acb4dcae717 +newDarkWizard 7/64 f11113ec0491f0d0 +newDarkWizard 7/65 c8ca8193620a600a +newDarkWizard 7/66 0464c952147822a2 +newDarkWizard 7/67 76bcb036f58fc597 +newDarkWizard 7/68 ed9316992889b7ef +newDarkWizard 7/69 68788a6e6ba0d284 +newDarkWizard 7/7 acf7750dee59b3a4 +newDarkWizard 7/70 f530299ed2c0be49 +newDarkWizard 7/72 0b2449ef2a8d9664 +newDarkWizard 7/73 581db1ab500e886c +newDarkWizard 7/8 3a125a7bd5083c64 +newDarkWizard 7/9 2c812669875bff56 +newDarkWizard 8/0 66eb6d2c41edc5bf +newDarkWizard 8/1 84c36cca1eb7343f +newDarkWizard 8/10 ceac25db748515ed +newDarkWizard 8/11 78b7d2d7d2eb009c +newDarkWizard 8/12 96e6f054c2daa13d +newDarkWizard 8/13 c23eaeb22ca37cff +newDarkWizard 8/14 d9ca447136aacd5e +newDarkWizard 8/15 a550a3ae072f71ef +newDarkWizard 8/16 c4c8c966d9779755 +newDarkWizard 8/17 8c61b15879e8aa2b +newDarkWizard 8/18 67785a47d45c7de4 +newDarkWizard 8/19 6dffd304f2ce4729 +newDarkWizard 8/2 f07ccd13567b7222 +newDarkWizard 8/20 d0ab98121e076676 +newDarkWizard 8/21 3ef04764d06f722c +newDarkWizard 8/22 86f216ea317881f6 +newDarkWizard 8/23 f03194eeb9ee0da6 +newDarkWizard 8/24 ce0bce6023dd07fa +newDarkWizard 8/25 f9c772a1fa403fbb +newDarkWizard 8/26 fcfd866e17e1d054 +newDarkWizard 8/27 ee02d00a1f3f3888 +newDarkWizard 8/28 5b7bb653729442d0 +newDarkWizard 8/29 74264655c1072037 +newDarkWizard 8/3 e5ec940ce932c5c3 +newDarkWizard 8/30 3682249b20d2a572 +newDarkWizard 8/31 19ec050029e2424b +newDarkWizard 8/32 41dfd76f6454dec4 +newDarkWizard 8/33 326b7a8ef9c01e3d +newDarkWizard 8/34 bcb86fb07430ca8b +newDarkWizard 8/35 cacc942650286a28 +newDarkWizard 8/36 b727c697f4970f23 +newDarkWizard 8/37 8fa96b056018edaa +newDarkWizard 8/38 c074401e609f31fa +newDarkWizard 8/39 09f9edad9426d3c2 +newDarkWizard 8/4 dd9b7334f88408ad +newDarkWizard 8/40 aa03cfb375591591 +newDarkWizard 8/41 48e279946b98ce89 +newDarkWizard 8/42 3ee1f63c952e7cf8 +newDarkWizard 8/43 c7b743f2c4d02c2c +newDarkWizard 8/44 346de7fa1524b3ef +newDarkWizard 8/45 4a14a300b1bde00a +newDarkWizard 8/46 79f472a49483bd60 +newDarkWizard 8/47 ea97dac979cb4079 +newDarkWizard 8/48 ca897bf0af4d3ff5 +newDarkWizard 8/49 8139ca9582457495 +newDarkWizard 8/5 93dba74f903981fd +newDarkWizard 8/50 2ce4f346fe5cf1ed +newDarkWizard 8/51 f2b376a9b28bde88 +newDarkWizard 8/52 8be567f6fe5e9cae +newDarkWizard 8/59 b532a3f518b62e0b +newDarkWizard 8/6 7c71f5d5b9cd0f05 +newDarkWizard 8/60 014f6ce48b449a1c +newDarkWizard 8/61 d12c91820ca52b87 +newDarkWizard 8/62 9627bd69888ded1a +newDarkWizard 8/63 159d7fbed56a8edb +newDarkWizard 8/64 b9a16feb4ba8e6f9 +newDarkWizard 8/65 7bb3d1cef31245a5 +newDarkWizard 8/66 3450a0f9e85d0218 +newDarkWizard 8/67 02aa21390c636d62 +newDarkWizard 8/68 4d1e3edf890e2ae3 +newDarkWizard 8/69 0a48e8d79eb2b70e +newDarkWizard 8/7 3b25850f93735a0b +newDarkWizard 8/70 0daa64b73cc3a1a7 +newDarkWizard 8/71 4391e9866d7e0496 +newDarkWizard 8/72 cf2448916aa6f444 +newDarkWizard 8/73 27b82d0a299bf2ea +newDarkWizard 8/8 2ef582a7cab75d5a +newDarkWizard 8/9 8257d4f8f343b7dc +newDarkWizard 9/0 63010208ce9c3808 +newDarkWizard 9/1 52acf0207fd79f37 +newDarkWizard 9/10 0058ce1f9ba438e1 +newDarkWizard 9/11 dbef93d07c4db055 +newDarkWizard 9/12 e29816baac8df57b +newDarkWizard 9/13 d7b0bf1907027265 +newDarkWizard 9/14 cb5850ae4ff2baab +newDarkWizard 9/15 83d3950e4d89a04e +newDarkWizard 9/16 f3b42e38b538fb53 +newDarkWizard 9/17 ec0dadd709cd4ce9 +newDarkWizard 9/18 d93731eefe2200f4 +newDarkWizard 9/19 c111b4589e7747f7 +newDarkWizard 9/2 4e6bf17d81e9400f +newDarkWizard 9/20 b3e65983c5fce370 +newDarkWizard 9/21 d8c402fa3489a4ee +newDarkWizard 9/22 e83987be9226cfb3 +newDarkWizard 9/23 83a9e9f54596a983 +newDarkWizard 9/24 62558053fd217f4d +newDarkWizard 9/25 f47b7303e9a5a93b +newDarkWizard 9/26 b78297594730c76b +newDarkWizard 9/27 329c768ccae757a9 +newDarkWizard 9/28 dc36cbd9c7f2d718 +newDarkWizard 9/29 6c1a1f418620e122 +newDarkWizard 9/3 4af91b0b775e707c +newDarkWizard 9/30 d96827c29030a21d +newDarkWizard 9/31 6a79d10cce66ff42 +newDarkWizard 9/32 54beead2ae8d9dbb +newDarkWizard 9/33 b61307da05de4eaf +newDarkWizard 9/34 56e5393d44f8fd1a +newDarkWizard 9/35 e83de520a5537c25 +newDarkWizard 9/36 2a68714b7472dee1 +newDarkWizard 9/37 a03f02a60d39b5dc +newDarkWizard 9/38 629318b53c2f6c72 +newDarkWizard 9/39 abf962f88ed5385a +newDarkWizard 9/4 5a36ef2a91f4569d +newDarkWizard 9/40 fbec396b7a98b2be +newDarkWizard 9/41 67893b5326b0654a +newDarkWizard 9/42 e8c9e9988a1fa238 +newDarkWizard 9/43 24de9eae44e3e7a7 +newDarkWizard 9/44 374d12ba5f804591 +newDarkWizard 9/45 8862f4302a37cd4b +newDarkWizard 9/46 cd0e3db370f1194e +newDarkWizard 9/47 0edb9fe59d725936 +newDarkWizard 9/48 0e7f7c0c96323ed7 +newDarkWizard 9/49 da60d51959bb9a25 +newDarkWizard 9/5 631c2d9a6fb90148 +newDarkWizard 9/50 a9161171d931f6f7 +newDarkWizard 9/51 c6c6c7c37e7e2bdd +newDarkWizard 9/52 70896ec29e033c00 +newDarkWizard 9/59 39f7716a2f679881 +newDarkWizard 9/6 e45442eabe74f995 +newDarkWizard 9/60 fafb26d9e213d13e +newDarkWizard 9/61 be82f20f4e1a2e2c +newDarkWizard 9/62 413d69f6fbda0ce9 +newDarkWizard 9/63 913a47dadb641d26 +newDarkWizard 9/64 ff7ebd06ba062f40 +newDarkWizard 9/65 41ec739be0806291 +newDarkWizard 9/66 1a9e345e9b2b4138 +newDarkWizard 9/67 1462dffdd7878c97 +newDarkWizard 9/68 d93bb8c8c81c4bf6 +newDarkWizard 9/69 f8feed6eb33acd15 +newDarkWizard 9/7 7fe358faf23d350e +newDarkWizard 9/70 5c8dde488cb428f5 +newDarkWizard 9/71 94a4f338f7fa18f2 +newDarkWizard 9/72 124a62de6cd3c287 +newDarkWizard 9/73 4749bcbd09155197 +newDarkWizard 9/8 82eb2ab66a2430e2 +newDarkWizard 9/9 01e259c1cd35ae57 diff --git a/tests/data/test_item_tooltips.cpp b/tests/data/test_item_tooltips.cpp index 3655ceb69f..dfae9d6c6a 100644 --- a/tests/data/test_item_tooltips.cpp +++ b/tests/data/test_item_tooltips.cpp @@ -169,9 +169,9 @@ class TextMeasureScope }; } // namespace -// Every item's tooltip at every level 0 to 15, in the 25 variants of WriteItemTooltipSnapshot (plain, full, ancient, -// harmony, each option alone, the additional option at levels 2 to 7 and option types 1 to 3, each excellent option -// alone, worn, broken and expired), +// Every item's tooltip at every level 0 to 15, in the 28 variants of WriteItemTooltipSnapshot (plain, full, ancient, +// the ancient bonus at levels 1 to 3, harmony, each option alone, the additional option at levels 2 to 7 and option +// types 1 to 3, each excellent option alone, worn, broken and expired), // for the two heroes, against the hashes recorded in item_tooltip_snapshot.txt: a tooltip that changes shows here. // After a change that is meant, run the test with MU_TOOLTIP_SNAPSHOT_UPDATE=1 to record the new hashes; the control // socket's `tooltip-snapshot` writes the full lines in the game to compare with. @@ -225,7 +225,7 @@ TEST_CASE("Every item's tooltip is as recorded [data][items][tooltip]") changedTooltips.emplace_back(key, text); } }); - CHECK(tooltips == 911 * 25 * 16); + CHECK(tooltips == 911 * 28 * 16); } SetItemTooltipTextMeasure(nullptr); From 1a93c3b1ff9cfc0dd7769569a94ae836920532c7 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 16:33:21 +0100 Subject: [PATCH 03/17] test(items): every ancient item's bonus raises the stat of its attackType A test of the code before the ancient bonus moves into data: each of the 334 items with an attackType adds 5 per bonus level to its stat (61 strength, 24 agility, 15 energy, 234 vitality), and a broken one adds nothing. The stats are taken as the difference to wearing nothing, so set options an earlier test left don't count. --- tests/data/CharacterMachineScope.h | 38 +++++++++++++ tests/data/test_item_option_slots.cpp | 82 +++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 tests/data/CharacterMachineScope.h diff --git a/tests/data/CharacterMachineScope.h b/tests/data/CharacterMachineScope.h new file mode 100644 index 0000000000..13d7443fe6 --- /dev/null +++ b/tests/data/CharacterMachineScope.h @@ -0,0 +1,38 @@ +#pragma once + +#include "Engine/Object/ZzzInfomation.h" + +#include + +// A character machine of the test's own (CharacterMachine) with nothing worn, for the scope: what the stat code reads +// as the hero's equipment. The previous machine is back when the scope goes. +class CharacterMachineScope +{ +public: + CharacterMachineScope() : m_previous(CharacterMachine), m_machine(std::make_unique()) + { + for (ITEM& equipped : m_machine->Equipment) + { + equipped = ITEM{}; + equipped.Type = -1; + } + CharacterMachine = m_machine.get(); + } + + ~CharacterMachineScope() + { + CharacterMachine = m_previous; + } + + CharacterMachineScope(const CharacterMachineScope&) = delete; + CharacterMachineScope& operator=(const CharacterMachineScope&) = delete; + + CHARACTER_MACHINE& Machine() + { + return *m_machine; + } + +private: + CHARACTER_MACHINE* m_previous; + std::unique_ptr m_machine; +}; diff --git a/tests/data/test_item_option_slots.cpp b/tests/data/test_item_option_slots.cpp index 3fb0e24330..0fa6840b4b 100644 --- a/tests/data/test_item_option_slots.cpp +++ b/tests/data/test_item_option_slots.cpp @@ -2,6 +2,7 @@ #include "doctest.h" +#include "CharacterMachineScope.h" #include "ClientDataScope.h" #include "HeroScope.h" #include "ItemOptionsScope.h" @@ -12,6 +13,7 @@ #include "Data/GameData/ItemData/ItemDatabase.h" #include "Engine/Object/ZzzInfomation.h" #include "Engine/Object/ZzzInventory.h" +#include "GameLogic/Items/CSItemOption.h" #include "GameLogic/Items/ItemOptionSlots.h" #include "GameLogic/Items/ItemOptions.h" #include "GameLogic/Pets/GIPetManager.h" @@ -1107,3 +1109,83 @@ TEST_CASE("An item is excellent when its excellent byte turns on an option it li CHECK(durability(ITEM_WINGS_OF_SPIRITS, 0x01) == durability(ITEM_WINGS_OF_SPIRITS, 0)); } +namespace +{ +// An item of an ancient set with its bonus at `bonusLevel`, as the server sends it (set 1). +ITEM MakeAncientItem(int type, BYTE bonusLevel) +{ + ItemCreationParams params{}; + params.Group = type / MAX_ITEM_INDEX; + params.Number = type % MAX_ITEM_INDEX; + params.IsAncient = true; + params.AncientDiscriminator = 1; + params.AncientBonusOption = bonusLevel; + params.Durability = 20; + ITEM item; + FillItemFromParameters(item, params); + return item; +} + +// The stats the stat code adds up (strength, agility, energy, vitality). +std::array AddedUpStats() +{ + std::array stats{}; + g_csItemOption.getAllAddStateOnlyAddValue(&stats[0], &stats[1], &stats[2], &stats[3], &stats[4]); + return {stats[0], stats[1], stats[2], stats[3]}; +} + +// What wearing `worn` adds to the stats the stat code adds up, as the difference to wearing nothing, so the set options +// a test before left in g_csItemOption don't count. +std::array AddedStats(const ITEM& worn) +{ + CharacterMachineScope scope; + const std::array without = AddedUpStats(); + scope.Machine().Equipment[EQUIPMENT_RING_RIGHT] = worn; + const std::array with = AddedUpStats(); + return {with[0] - without[0], with[1] - without[1], with[2] - without[2], with[3] - without[3]}; +} +} // namespace + +// The ancient bonus of an item of a set raises the stat of its attackType (1 strength, 2 agility, 3 energy, 4 +// vitality) by 5 at bonus level 1 and 10 at level 2, for every item that has one; a broken item adds nothing. +TEST_CASE("Every ancient item's bonus raises the stat of its attackType [data][items]") +{ + ClientDataScope client(ClientDirectory); + I18N::SetLocale("en"); + std::string errorMessage; + REQUIRE(g_ItemDataHandler.Load(errorMessage)); + HeroScope hero; + + std::array itemsPerStat{}; + int someAncientItem = -1; + for (const Data::Items::ItemDefinition& definition : g_ItemDatabase.GetAllSlots()) + { + if (!definition.Exists()) + { + continue; + } + const int type = definition.group * MAX_ITEM_INDEX + definition.number; + const int attackType = ItemAttribute[type].AttType; + if (attackType < 1 || attackType > 4) + { + continue; + } + ++itemsPerStat[static_cast(attackType - 1)]; + someAncientItem = type; + for (int level = 1; level <= 2; ++level) + { + std::array expected{}; + expected[static_cast(attackType - 1)] = 5 * level; + CAPTURE(type); + CAPTURE(level); + CHECK(AddedStats(MakeAncientItem(type, static_cast(level))) == expected); + } + } + // Each stat has items, so each case of the stat code ran. + CHECK(std::all_of(itemsPerStat.begin(), itemsPerStat.end(), [](int items) { return items >= 1; })); + + REQUIRE(someAncientItem >= 0); + ITEM broken = MakeAncientItem(someAncientItem, 2); + broken.Durability = 0; + CHECK(AddedStats(broken) == std::array{}); +} From 226b1e60c155da1199fe927c0a826f3fa4ca0ba8 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 16:36:37 +0100 Subject: [PATCH 04/17] fix(items): an ancient bonus level above 2 counts as level 2 The ancient bonus has two levels on Season 6 and OpenMU, +5 and +10. The client multiplied whatever level the ancient byte held by 5, so a level of 3 to 15, which no server sends but the byte holds, gave +15 to +75. A level above 2 now counts as the second, as the bonus's value list will give it when it moves into data. The snapshot re-records the items whose bonus level 3 changes from +15 to +10. --- src/source/GameLogic/Items/CSItemOption.cpp | 22 +- tests/data/item_tooltip_snapshot.txt | 1336 +++++++++---------- tests/data/test_item_option_slots.cpp | 7 +- 3 files changed, 689 insertions(+), 676 deletions(-) diff --git a/src/source/GameLogic/Items/CSItemOption.cpp b/src/source/GameLogic/Items/CSItemOption.cpp index 18aaf7ab15..6c8b3b05c0 100644 --- a/src/source/GameLogic/Items/CSItemOption.cpp +++ b/src/source/GameLogic/Items/CSItemOption.cpp @@ -535,6 +535,18 @@ int CSItemOption::GetMasteryBonus(const SET_SEARCH_RESULT_OPT& set, std::uint8_t return bonus; } +namespace +{ +// The ancient bonus has two levels, as on Season 6 and OpenMU (+5 and +10); a higher level the ancient byte holds counts +// as the second. +constexpr BYTE MaxAncientBonusLevel = 2; + +int GetAncientBonusLevel(const ITEM* ip) +{ + return std::min(ip->AncientBonusOption, MaxAncientBonusLevel); +} +} // namespace + int CSItemOption::GetDefaultOptionValue(ITEM* ip, std::uint16_t* Value) { if (ip->Type > MAX_ITEM) @@ -542,7 +554,7 @@ int CSItemOption::GetDefaultOptionValue(ITEM* ip, std::uint16_t* Value) return -1; } - *Value = ip->AncientBonusOption; + *Value = static_cast(GetAncientBonusLevel(ip)); const ITEM_ATTRIBUTE* p = &ItemAttribute[ip->Type]; @@ -564,19 +576,19 @@ bool CSItemOption::GetDefaultOptionText(const ITEM* ip, wchar_t* Text) switch (ItemAttribute[ip->Type].AttType) { case SET_OPTION_STRENGTH: - mu_swprintf(Text, I18N::Game::IncreaseStrengthD, ip->AncientBonusOption * 5); + mu_swprintf(Text, I18N::Game::IncreaseStrengthD, GetAncientBonusLevel(ip) * 5); break; case SET_OPTION_DEXTERITY: - mu_swprintf(Text, I18N::Game::IncreaseAgilityD, ip->AncientBonusOption * 5); + mu_swprintf(Text, I18N::Game::IncreaseAgilityD, GetAncientBonusLevel(ip) * 5); break; case SET_OPTION_ENERGY: - mu_swprintf(Text, I18N::Game::IncreaseEnergyD, ip->AncientBonusOption * 5); + mu_swprintf(Text, I18N::Game::IncreaseEnergyD, GetAncientBonusLevel(ip) * 5); break; case SET_OPTION_VITALITY: - mu_swprintf(Text, I18N::Game::IncreaseStaminaD, ip->AncientBonusOption * 5); + mu_swprintf(Text, I18N::Game::IncreaseStaminaD, GetAncientBonusLevel(ip) * 5); break; default: diff --git a/tests/data/item_tooltip_snapshot.txt b/tests/data/item_tooltip_snapshot.txt index faa6eaf8e4..db8d6a3a57 100644 --- a/tests/data/item_tooltip_snapshot.txt +++ b/tests/data/item_tooltip_snapshot.txt @@ -1,18 +1,18 @@ -bladeMaster 0/0 2944b9bd87b2043e -bladeMaster 0/1 d447839a62f26545 -bladeMaster 0/10 a79777225595b884 -bladeMaster 0/11 1edf5b45c1043c8e -bladeMaster 0/12 7c4867d489cf28dc -bladeMaster 0/13 feffef94f400edb5 -bladeMaster 0/14 5506c54448d14eff -bladeMaster 0/15 4f617ad22e2371e7 -bladeMaster 0/16 b1bc6cffaf9a7091 -bladeMaster 0/17 087e2bb4ae3558ee -bladeMaster 0/18 2856bf7fe47d75ed +bladeMaster 0/0 a687ac4307e66502 +bladeMaster 0/1 deca541407a6cb91 +bladeMaster 0/10 08365e96df9bb5c8 +bladeMaster 0/11 04060f59ee22936a +bladeMaster 0/12 27733e812167a484 +bladeMaster 0/13 9637d9d3cfd72aa3 +bladeMaster 0/14 43764e11efadccc1 +bladeMaster 0/15 cd8bf3ba471e2035 +bladeMaster 0/16 4beb7a0bd0913181 +bladeMaster 0/17 812aa9cacf054d8a +bladeMaster 0/18 4dec8eb09dd8b335 bladeMaster 0/19 a3727ab62e048133 -bladeMaster 0/2 04c06dc66f900c57 -bladeMaster 0/20 32290ccc06fbe1bc -bladeMaster 0/21 a64145fa6e07205a +bladeMaster 0/2 16fd7c1ba765a1bd +bladeMaster 0/20 276a9a27f7612dac +bladeMaster 0/21 203276ae977341ca bladeMaster 0/22 4f1b357700c3e3d2 bladeMaster 0/23 ec9604a152e027b8 bladeMaster 0/24 ca58910ed10f2648 @@ -20,51 +20,51 @@ bladeMaster 0/25 75f8a89b3c7c2c52 bladeMaster 0/26 0388049d6d596d32 bladeMaster 0/27 639e307a9be65ef6 bladeMaster 0/28 94e020187a6e3755 -bladeMaster 0/3 647006ef1e474e29 -bladeMaster 0/31 5a11dd6e17a0ebf8 -bladeMaster 0/32 47329e9cf337c28b +bladeMaster 0/3 4326a0eedec4ac8b +bladeMaster 0/31 151e9829b88dd064 +bladeMaster 0/32 24c7e9e6f641db27 bladeMaster 0/33 a00323a1f07cd85a bladeMaster 0/34 ce5481b3eb4dedaa bladeMaster 0/35 d09b04fb0b744495 -bladeMaster 0/4 1e05fb638d1bfe44 -bladeMaster 0/5 420c5a88b46148de -bladeMaster 0/6 ddfc2d5d70f4beea -bladeMaster 0/7 92d4c314915cf524 -bladeMaster 0/8 54d23dc4c44db2f6 -bladeMaster 0/9 d9d784db0b8de1b2 -bladeMaster 1/0 4538c45449f3403e -bladeMaster 1/1 6106baf00667b0ea -bladeMaster 1/2 06e4884cb996cdc8 -bladeMaster 1/3 707480d40cb29f8f -bladeMaster 1/4 cc86dea331a63d21 -bladeMaster 1/5 cfa2cb0d4e439c08 -bladeMaster 1/6 86f1604727cf4ab2 -bladeMaster 1/7 ad7e079fe711ac4f -bladeMaster 1/8 d052e0e5017ca8ba -bladeMaster 10/0 3fc05a02676de691 -bladeMaster 10/1 2eb4e3a652ac6eba -bladeMaster 10/10 adc88bee13b4f99c -bladeMaster 10/11 0da58096b3cd5125 -bladeMaster 10/12 f67d9716dbe1b5ba -bladeMaster 10/13 da7e123a6aa092b8 -bladeMaster 10/14 3e7778ac518761bd -bladeMaster 10/15 08c2825f9eb37dba -bladeMaster 10/16 cfc3d163fae2f6a0 -bladeMaster 10/17 4ea749d05a2993bc -bladeMaster 10/18 7ab116a6cef2f51d -bladeMaster 10/19 c5633420ed36a522 -bladeMaster 10/2 c50378ae33bd9e3c -bladeMaster 10/20 cfcd13fd36140fa1 -bladeMaster 10/21 04a671ab6f315840 -bladeMaster 10/22 62f7686abe6f273b -bladeMaster 10/23 24d4b4d0afbe4034 -bladeMaster 10/24 60cb1f69eb637f98 -bladeMaster 10/25 4b9fbb5b4f3f6afc -bladeMaster 10/26 1e2cd1d052ac9449 -bladeMaster 10/27 3d9ea1430c8f49a3 -bladeMaster 10/28 d18b1db690ba129f +bladeMaster 0/4 9df00c53bd44de5e +bladeMaster 0/5 5a86735a9b759158 +bladeMaster 0/6 243459cce1a8ee10 +bladeMaster 0/7 5cfaefb2aa4f6f74 +bladeMaster 0/8 8d3e96d958b2e25a +bladeMaster 0/9 233d806df2f4511c +bladeMaster 1/0 90e0e09c04f737f6 +bladeMaster 1/1 301c4f98a721cda0 +bladeMaster 1/2 e858cdbdc6b10866 +bladeMaster 1/3 546fe395761669a5 +bladeMaster 1/4 0e30e79a40df28fd +bladeMaster 1/5 d6566ca8ed63e24a +bladeMaster 1/6 bb8ee1aa3f94cd30 +bladeMaster 1/7 57c4daa17c913139 +bladeMaster 1/8 ff5ce4338f381ff4 +bladeMaster 10/0 f3013ae3f8977d77 +bladeMaster 10/1 667b791ceecb4e56 +bladeMaster 10/10 ce345ad27e18e980 +bladeMaster 10/11 791ad79294124893 +bladeMaster 10/12 c99437b142d00aa8 +bladeMaster 10/13 e53c353170321f7e +bladeMaster 10/14 a0b8ef49b41e5265 +bladeMaster 10/15 0f89563941de22d8 +bladeMaster 10/16 f7baeaee0c122016 +bladeMaster 10/17 2ae60ae7aba3d77c +bladeMaster 10/18 540bcedead52d663 +bladeMaster 10/19 2e22319c61c7ac1a +bladeMaster 10/2 2cb0f951ff2189fc +bladeMaster 10/20 019e62e2c77684db +bladeMaster 10/21 ab09d57a7c47b76c +bladeMaster 10/22 c79cf639b77e3715 +bladeMaster 10/23 8371fc06e697e222 +bladeMaster 10/24 ae119dea90489a56 +bladeMaster 10/25 4f5e0ca1e029bc1a +bladeMaster 10/26 04b6a949e6548b7d +bladeMaster 10/27 a181ea90131e4401 +bladeMaster 10/28 933d7014bbcb90f7 bladeMaster 10/29 672d524ecaf52e20 -bladeMaster 10/3 a2e73a2ddb28b028 +bladeMaster 10/3 d1abfd75efc327c2 bladeMaster 10/30 f8ce6127a9e8c858 bladeMaster 10/31 dcffaa3bc8aba268 bladeMaster 10/32 5eeb877f0f3a4463 @@ -74,10 +74,10 @@ bladeMaster 10/35 3cf344434fa0b5ef bladeMaster 10/36 fcc7dab97f495742 bladeMaster 10/37 61ee7a41551330e0 bladeMaster 10/38 8364fad3f994589d -bladeMaster 10/39 4b72f38a512478bb -bladeMaster 10/4 d25d20ee1a9d75d9 -bladeMaster 10/40 300bf7a77a23f0c3 -bladeMaster 10/41 b9a6e2cc7b03ff73 +bladeMaster 10/39 9f946abfeefeae55 +bladeMaster 10/4 d4444e5c5b71b671 +bladeMaster 10/40 30506d42cdda55a1 +bladeMaster 10/41 b27264bb63410d8d bladeMaster 10/42 a0fa46f3f1d9f9fd bladeMaster 10/43 3464089c5979b18d bladeMaster 10/44 90dd74ab0e80aed1 @@ -86,48 +86,48 @@ bladeMaster 10/46 532431362961bfe0 bladeMaster 10/47 db3a3ae0a21b91cd bladeMaster 10/48 c91c509834144b2c bladeMaster 10/49 96906ed6e90d2976 -bladeMaster 10/5 2429f5127d7e60dc +bladeMaster 10/5 d7b11a2c7a232a7c bladeMaster 10/50 b20e65237cd0db0e bladeMaster 10/51 4ca2e21757b2844b bladeMaster 10/52 bd594fbb20d99522 -bladeMaster 10/6 553447ceb700daeb -bladeMaster 10/62 46dac5208e97e5dd -bladeMaster 10/63 e21eee43c5264f5c -bladeMaster 10/64 b8a604960db89124 -bladeMaster 10/65 db16b90406874ee0 -bladeMaster 10/66 ae3d944a23355999 -bladeMaster 10/67 bfd231b4e4f97a7e -bladeMaster 10/68 18c41458902e94d7 -bladeMaster 10/69 7cec9d1afaa570af -bladeMaster 10/7 430865205e33d109 -bladeMaster 10/70 33d1293bdb863c76 -bladeMaster 10/71 d8955f823648e784 -bladeMaster 10/8 f217cd771314904f -bladeMaster 10/9 7ca77c89a48f9854 -bladeMaster 11/0 f1d8c6a98231b813 -bladeMaster 11/1 c3fd4e2d30ccef58 -bladeMaster 11/10 103cbcadbbddfc16 -bladeMaster 11/11 c5708132a0f25d96 -bladeMaster 11/12 0c3502589b936f29 -bladeMaster 11/13 48806e9a3649d466 -bladeMaster 11/14 b204b94899caf26a -bladeMaster 11/15 bc7e353f32bfcbaa -bladeMaster 11/16 3f0209724bcdce24 -bladeMaster 11/17 b8de27fac70fe646 -bladeMaster 11/18 8a06185eb90c3030 -bladeMaster 11/19 02cf206394a9b11d -bladeMaster 11/2 de77a4ad7a881a4d -bladeMaster 11/20 885ee73233a540e5 -bladeMaster 11/21 37dff5f36674bf22 -bladeMaster 11/22 0b05ff6dc2660062 -bladeMaster 11/23 ecfabefa38b0de80 -bladeMaster 11/24 6e4c8afd14f4d0a9 -bladeMaster 11/25 48c51c18fedc9e8e -bladeMaster 11/26 b8208e04c2fba0ae -bladeMaster 11/27 420d8d6d88d480f3 -bladeMaster 11/28 b02f2714f4868645 +bladeMaster 10/6 e145ae43b5dc2fe1 +bladeMaster 10/62 8f61b85ab1a267cd +bladeMaster 10/63 b682edbdf15f7268 +bladeMaster 10/64 c3b12f840b8c7574 +bladeMaster 10/65 36654664f5030b30 +bladeMaster 10/66 22f5f266db4a0f87 +bladeMaster 10/67 d1f50f3018f8dfdc +bladeMaster 10/68 4a9ec6ca8b708019 +bladeMaster 10/69 cbd9c40e5fa50691 +bladeMaster 10/7 df705d244b9486df +bladeMaster 10/70 2702fc7d61bc6498 +bladeMaster 10/71 835d55106ca2eee0 +bladeMaster 10/8 129accd689ccd57d +bladeMaster 10/9 e1a1e37c54160d54 +bladeMaster 11/0 608147103bac9e05 +bladeMaster 11/1 8f98dfb4e8ee514c +bladeMaster 11/10 c078f81f4785cfc6 +bladeMaster 11/11 628882527e2ec0d0 +bladeMaster 11/12 c1623a6aac27a503 +bladeMaster 11/13 fe77c0186757a440 +bladeMaster 11/14 470ff2a447e165d6 +bladeMaster 11/15 7b7c9979d7d53584 +bladeMaster 11/16 775b9dada722b3bc +bladeMaster 11/17 36e9a26726bfd660 +bladeMaster 11/18 4004c487c74426ba +bladeMaster 11/19 26604ea7e5a32ba1 +bladeMaster 11/2 bd2763dbffad3d75 +bladeMaster 11/20 8be47f2f06b872ef +bladeMaster 11/21 b1971a694e84615a +bladeMaster 11/22 5646e62a49a79974 +bladeMaster 11/23 b3a5043e73f5c9ac +bladeMaster 11/24 ace13bbcc844854b +bladeMaster 11/25 bc1b2f4374c8e986 +bladeMaster 11/26 68b5af21c9a9601c +bladeMaster 11/27 97239730d981ffb7 +bladeMaster 11/28 296d9a12cf7fea4d bladeMaster 11/29 de9efecb18b3f62d -bladeMaster 11/3 9a53f83ece632f7c +bladeMaster 11/3 57edda20ec462d72 bladeMaster 11/30 62b09a67dfdad310 bladeMaster 11/31 000d337aadc7866b bladeMaster 11/32 0f63957377806ee0 @@ -137,10 +137,10 @@ bladeMaster 11/35 52ab2484ab44fa0c bladeMaster 11/36 8f066fa7e1fccaa5 bladeMaster 11/37 d4c6710b26122dff bladeMaster 11/38 3e3e9347c7ac38e5 -bladeMaster 11/39 5257e75bc6e8168f -bladeMaster 11/4 02615e6ba42919a7 -bladeMaster 11/40 82839819de241872 -bladeMaster 11/41 ace4b4b4b27712fc +bladeMaster 11/39 e03cc12f4521d283 +bladeMaster 11/4 876567e3a456b5c9 +bladeMaster 11/40 47fcb296e92f4424 +bladeMaster 11/41 2c52d1803378d3fa bladeMaster 11/42 207c16a6625d6938 bladeMaster 11/43 4541d4ab6f77c5aa bladeMaster 11/44 71531a5c1eac4162 @@ -149,29 +149,29 @@ bladeMaster 11/46 0ddea287ec352ee6 bladeMaster 11/47 3b877bf5f4859d92 bladeMaster 11/48 98ebf6e4bdfe094b bladeMaster 11/49 bb3223b5fc5533ea -bladeMaster 11/5 6e21a48064e56a10 +bladeMaster 11/5 3607bd96bf198a08 bladeMaster 11/50 40f22a04247c0a21 bladeMaster 11/51 319a5a73e7d4aec9 bladeMaster 11/52 dc8b8157d5fce66d -bladeMaster 11/59 d6adbcaec761662e -bladeMaster 11/6 2234477225548a31 +bladeMaster 11/59 60f3df681be3a898 +bladeMaster 11/6 1f312e7a08294d87 bladeMaster 11/60 5ad1303396ed70d6 bladeMaster 11/61 d3071c07f15104db -bladeMaster 11/62 a1cc917982f2741a -bladeMaster 11/63 486b5130c40e0ed5 -bladeMaster 11/64 e396339a6d00c6e0 -bladeMaster 11/65 7817993b26f7b7ee -bladeMaster 11/66 e1a2e98cc565652d -bladeMaster 11/67 7a61d7b8e77053a9 -bladeMaster 11/68 85d5dd4ba0556f4a -bladeMaster 11/69 0c7db888d85303b8 -bladeMaster 11/7 4edac757ba660f83 -bladeMaster 11/70 5dba3bebc122f2d0 -bladeMaster 11/71 b6260f0d5e047f3a -bladeMaster 11/72 20f38a06ec438a41 +bladeMaster 11/62 dfbb96a66fc1d6d2 +bladeMaster 11/63 c666b97f44e5e6f9 +bladeMaster 11/64 dcb5cc87bec6c490 +bladeMaster 11/65 b4cc91272750d9f4 +bladeMaster 11/66 fec4837fc27e0089 +bladeMaster 11/67 df8cff58f45ffe73 +bladeMaster 11/68 2d003dd5a6d34bb0 +bladeMaster 11/69 16c8f4e327703632 +bladeMaster 11/7 9b5656b543037283 +bladeMaster 11/70 31059bdb1dd3927e +bladeMaster 11/71 747a8ec1d4514532 +bladeMaster 11/72 c5dd22ae0fb81093 bladeMaster 11/73 a87e19b94a908472 -bladeMaster 11/8 75a73f111e088092 -bladeMaster 11/9 10e1e9e872f955da +bladeMaster 11/8 1555e0d730e19730 +bladeMaster 11/9 5bf7f57ebfecc9ca bladeMaster 12/0 42de7ba110fb8621 bladeMaster 12/1 078c924989eb73a5 bladeMaster 12/10 98a80d043ea0ec7f @@ -291,7 +291,7 @@ bladeMaster 13/116 a65bd32348eed3c7 bladeMaster 13/117 2f4a8fe8a8543ebf bladeMaster 13/118 594a3416af0c2207 bladeMaster 13/119 4556b07b3faf16af -bladeMaster 13/12 7f4ae42053ead8f4 +bladeMaster 13/12 d8e48658f9607874 bladeMaster 13/120 82292ce5233e4427 bladeMaster 13/121 706a4efc0b80fa9f bladeMaster 13/122 59d90271281a0463 @@ -302,7 +302,7 @@ bladeMaster 13/126 cd02aab0ffd34d27 bladeMaster 13/127 a0e4bf3c0b9b0cc7 bladeMaster 13/128 6eb83947ae6255b3 bladeMaster 13/129 f84dc961130cf64b -bladeMaster 13/13 4855b6566e176943 +bladeMaster 13/13 6ddbd60f020c8503 bladeMaster 13/130 8e4a02eaec7a2163 bladeMaster 13/131 57d9f5b854210f03 bladeMaster 13/132 31086e82282ebb8b @@ -326,13 +326,13 @@ bladeMaster 13/18 cffecd839926dbaf bladeMaster 13/19 d7b537649b8a6c2f bladeMaster 13/2 f4d1777da000dff3 bladeMaster 13/20 dd6bbd7965c66b6c -bladeMaster 13/21 fa9f0f2214905220 -bladeMaster 13/22 627e2e230cb38a66 -bladeMaster 13/23 d12f50174d1f13d2 -bladeMaster 13/24 a31b1afc0e1b569c -bladeMaster 13/25 22f7688196333949 -bladeMaster 13/26 08c51008ead920da -bladeMaster 13/27 07565412e02e8e90 +bladeMaster 13/21 e1e266087a1a0cb4 +bladeMaster 13/22 9c474b6e356653be +bladeMaster 13/23 8e1aa07de50c1a40 +bladeMaster 13/24 3ffdd4565a0950c6 +bladeMaster 13/25 44d8a207fa27bdf9 +bladeMaster 13/26 c7151e5c9c4a4310 +bladeMaster 13/27 b916833b8a94245e bladeMaster 13/28 b0db10562eca56f0 bladeMaster 13/29 96136e0b41bb1057 bladeMaster 13/3 519bd6746eea3be9 @@ -344,7 +344,7 @@ bladeMaster 13/34 2e951a2b32305e09 bladeMaster 13/35 1b6db1b0541416c3 bladeMaster 13/36 8b7bc1f5c088e80c bladeMaster 13/37 6ce60c7aa7864db3 -bladeMaster 13/38 6db378efe4781d61 +bladeMaster 13/38 eb3281052e4f510b bladeMaster 13/39 69ae46fabd3eef5c bladeMaster 13/4 9248b7654a0bc221 bladeMaster 13/40 d40cdd8d9aab3713 @@ -386,7 +386,7 @@ bladeMaster 13/73 0715b3cfbbe11ac7 bladeMaster 13/74 a7c6c1fd17465e8f bladeMaster 13/75 25c98569e923395f bladeMaster 13/76 0367fcec33468523 -bladeMaster 13/8 0504588b80cdb852 +bladeMaster 13/8 0cd7ce9d8aec7b62 bladeMaster 13/80 789b64b468111ab3 bladeMaster 13/81 0d4f194599173b1f bladeMaster 13/82 aa498d64785d5177 @@ -397,7 +397,7 @@ bladeMaster 13/86 fd811954964f473f bladeMaster 13/87 6b56df3b7634b883 bladeMaster 13/88 00b45840876f795f bladeMaster 13/89 0d1d55db5dba9ba7 -bladeMaster 13/9 6d899169d15c6c01 +bladeMaster 13/9 20cc487e1e8708b9 bladeMaster 13/90 6f0a07b2f9efbb69 bladeMaster 13/91 72596b59778cb3db bladeMaster 13/92 1ae3a448940e92f7 @@ -606,64 +606,64 @@ bladeMaster 15/6 da847cbab1b73caf bladeMaster 15/7 1104e29ab6c85d6f bladeMaster 15/8 6d3b781a5eed5f7f bladeMaster 15/9 8315e3f8a9e655d7 -bladeMaster 2/0 8474c86668592eae -bladeMaster 2/1 736763cd74b45934 -bladeMaster 2/10 db17595bb7882376 -bladeMaster 2/11 eab5de90f505f5b2 -bladeMaster 2/12 5510b48d654ac4b8 -bladeMaster 2/13 4b7d598f3c5aa971 +bladeMaster 2/0 f90610c940a16b1a +bladeMaster 2/1 37363b5f18fea972 +bladeMaster 2/10 94760a9f63aa8ab4 +bladeMaster 2/11 5b2601e77b2c47c0 +bladeMaster 2/12 71d39505fc0a24e0 +bladeMaster 2/13 c2606c95fc105087 bladeMaster 2/14 635051f5b5f2d122 bladeMaster 2/15 05ac8c23f7425bf9 -bladeMaster 2/16 b11b509051a70647 +bladeMaster 2/16 176614605a11e0bb bladeMaster 2/17 91357ae8b612b123 bladeMaster 2/18 0c786843bece40a5 -bladeMaster 2/2 98c8e97ef09b8695 -bladeMaster 2/3 3ffbd94755d4de95 -bladeMaster 2/4 d803fcea09242ba5 -bladeMaster 2/5 840f1f45b046499d +bladeMaster 2/2 435dfdf383d6fb4b +bladeMaster 2/3 62709d8c4d4238b7 +bladeMaster 2/4 a62563132a795fab +bladeMaster 2/5 be79fd3d8209eca9 bladeMaster 2/6 919faa9f25b44631 -bladeMaster 2/7 049a026f12b70bbf -bladeMaster 2/8 289afddc959bb6e6 -bladeMaster 2/9 d4a1f69b1947cea1 -bladeMaster 3/0 33c2ff13d89493df -bladeMaster 3/1 e7c6b345cb5e9e1a -bladeMaster 3/10 be1a5b88a58a22b2 -bladeMaster 3/11 88b4decffe1c854b -bladeMaster 3/2 6cdd4ede90dd7278 -bladeMaster 3/3 6f7515f62b695c82 -bladeMaster 3/4 403272d1c7bfdaf8 -bladeMaster 3/5 1a5c43efde297486 -bladeMaster 3/6 50c32610eada3f56 -bladeMaster 3/7 a418746508c7205b -bladeMaster 3/8 e873df33e4e81254 -bladeMaster 3/9 6dc8380d8386ff65 -bladeMaster 4/0 9a2e49d71ab8291a -bladeMaster 4/1 b9901a31c5035db6 -bladeMaster 4/10 48d62cfffd31d2fc -bladeMaster 4/11 702e308a2b07e3ed -bladeMaster 4/12 686b0dbd906ae280 -bladeMaster 4/13 3707394033e0a9f6 -bladeMaster 4/14 f1d189cde632bc22 +bladeMaster 2/7 5e9088d3c8aaaba9 +bladeMaster 2/8 5f4efff057d8c40e +bladeMaster 2/9 1f16ec47a5d0d4bf +bladeMaster 3/0 4385f3c7e3a94e0b +bladeMaster 3/1 bf5b70b9147dc40a +bladeMaster 3/10 1ebb3744eb6b40e6 +bladeMaster 3/11 302fcf2534bb1f1b +bladeMaster 3/2 e64cbf120ff0879c +bladeMaster 3/3 3c353ef26c5643a4 +bladeMaster 3/4 93d098b4fb2afacc +bladeMaster 3/5 5badd943aad4911a +bladeMaster 3/6 1b772c62ca0be480 +bladeMaster 3/7 d13ffceed45ff99f +bladeMaster 3/8 f880414d02b29910 +bladeMaster 3/9 18e36d1316847229 +bladeMaster 4/0 18db3534b5031524 +bladeMaster 4/1 8cb2820247d4dfb8 +bladeMaster 4/10 d6403a9848947116 +bladeMaster 4/11 695b757a29185505 +bladeMaster 4/12 ce8a9a328910f33a +bladeMaster 4/13 a47665d0dbdc227e +bladeMaster 4/14 95dd4d2ad854a200 bladeMaster 4/15 3afe4c0bdd96d073 -bladeMaster 4/16 21574016bf280e2d -bladeMaster 4/17 5ef18bce3187883e +bladeMaster 4/16 c1a3707c47aa8d07 +bladeMaster 4/17 d07081997802e4ea bladeMaster 4/18 e5c8d14afcf77995 -bladeMaster 4/19 5a46308e5682b186 -bladeMaster 4/2 5321bda919cab66b -bladeMaster 4/20 7df3a497ab207625 +bladeMaster 4/19 fe4639f57aa3212a +bladeMaster 4/2 b649a7e792bcfe91 +bladeMaster 4/20 d1f796a975581315 bladeMaster 4/21 7d2e631c81b31b3f bladeMaster 4/22 9996acffdc1f3ae2 -bladeMaster 4/23 0fc24db5f183f5e2 +bladeMaster 4/23 a684bb366ce7d0bc bladeMaster 4/24 82ac0492c93fef13 -bladeMaster 4/3 df94454e20e29982 -bladeMaster 4/4 35922ea4bd23ae72 -bladeMaster 4/5 60b417d65ec700d6 +bladeMaster 4/3 b074dec743b67db8 +bladeMaster 4/4 f2379acf034f1990 +bladeMaster 4/5 bb08177fb676865a bladeMaster 4/6 eaf54812be5f1b02 bladeMaster 4/7 08034f934cc9fa5d -bladeMaster 4/8 1b00eb79d6054e50 -bladeMaster 4/9 f67d991f934079cd -bladeMaster 5/0 7c01e5417d4f7677 -bladeMaster 5/1 9cf024ad9efeb734 +bladeMaster 4/8 6b199ad5f7dbb66c +bladeMaster 4/9 fd1fabed884864d9 +bladeMaster 5/0 f1a04684ada98cf5 +bladeMaster 5/1 085ebb0f14bdd110 bladeMaster 5/10 56dd7c8ed7e8f0fe bladeMaster 5/11 12a8feade357dce8 bladeMaster 5/12 6bd8851712291652 @@ -674,66 +674,66 @@ bladeMaster 5/16 ab525402026d52bf bladeMaster 5/17 f5be4dccd8d5ae32 bladeMaster 5/18 6d50421ec136c231 bladeMaster 5/19 55d81fb8e68abb5e -bladeMaster 5/2 1a89d6ca8f832cc2 +bladeMaster 5/2 d55d5157b43a0ede bladeMaster 5/20 ce219833d827cf83 bladeMaster 5/21 ac8b6c82147f61d6 bladeMaster 5/22 856df621d0e77059 bladeMaster 5/23 674f7a4c61dbfcb5 -bladeMaster 5/3 fbd27f0450e0da99 -bladeMaster 5/30 1cbbeb38bcad7a63 +bladeMaster 5/3 2be2c65e7b147b59 +bladeMaster 5/30 c0174856f9199b69 bladeMaster 5/31 d601b657b3ac877a bladeMaster 5/33 f089bbfc2bbc1c11 bladeMaster 5/34 d0819725fb9429d3 bladeMaster 5/36 38a0403a1b4f67e2 -bladeMaster 5/4 4e39ca9591b922ee -bladeMaster 5/5 44a6a37e4ac51f57 -bladeMaster 5/6 b3e2780384a79f6c +bladeMaster 5/4 3671bf7db5462eca +bladeMaster 5/5 c17551a5a0f314f5 +bladeMaster 5/6 9b909866dde2205e bladeMaster 5/7 94876fe3a2883a25 -bladeMaster 5/8 8b75da49ea553f1d -bladeMaster 5/9 cb8013cacc29a268 -bladeMaster 6/0 8f7be15ab2b8f681 -bladeMaster 6/1 1b69f885478c7205 -bladeMaster 6/10 a270389a93aad187 -bladeMaster 6/11 e6ad29c212dd897f -bladeMaster 6/12 c304a2df449c4a84 -bladeMaster 6/13 4820c4ce1e55c61d -bladeMaster 6/14 f93c8c8763866349 -bladeMaster 6/15 de5c4e860f82137e -bladeMaster 6/16 a1afba9c8bcd7fb7 -bladeMaster 6/17 a5479c90bd1e0678 -bladeMaster 6/18 3f89d85ecf0a6888 -bladeMaster 6/19 a037742e82ebce93 -bladeMaster 6/2 e4105c443f94909c -bladeMaster 6/20 2a8e662eead7fb6c -bladeMaster 6/21 7d33a28bc2b9fef6 -bladeMaster 6/3 ff35d57943ee4877 -bladeMaster 6/4 7c36b38a65b556be -bladeMaster 6/5 80903d3589e52ea3 -bladeMaster 6/6 bcb773f3adb34bc7 -bladeMaster 6/7 0fb6f1847dbb1c14 -bladeMaster 6/8 4bd193590b49beb7 -bladeMaster 6/9 102919872a60c0ba -bladeMaster 7/0 6180196a46dde4ee -bladeMaster 7/1 6d76be3f0cd09355 -bladeMaster 7/10 ebc4dd9a6d09051f -bladeMaster 7/11 676b71467a4815fe -bladeMaster 7/12 8b02b6a71f5e5f25 -bladeMaster 7/13 e50404fa9da51972 -bladeMaster 7/14 7e9f1fda77cb19c5 -bladeMaster 7/16 ce1abdeaf91234cd -bladeMaster 7/17 ccdadd20a0912703 -bladeMaster 7/18 17d8b8736743573e -bladeMaster 7/19 7a0c0c9d630122ee -bladeMaster 7/2 56f5d89c4573966c -bladeMaster 7/21 a0a4a5594ac241ab -bladeMaster 7/22 03238b8ed21e40bf -bladeMaster 7/24 11c8d44cc39e5fa5 -bladeMaster 7/25 8acecc1320e3274d -bladeMaster 7/26 b31eb4d86be3e7c2 -bladeMaster 7/27 41ad1c64f5feac3f -bladeMaster 7/28 cf13cbd80e6df33a +bladeMaster 5/8 d0fb45b116e15cc7 +bladeMaster 5/9 d2acc25547d4f33e +bladeMaster 6/0 50f68fb15d358883 +bladeMaster 6/1 42e8aaa115dd6d01 +bladeMaster 6/10 30e3883321727b17 +bladeMaster 6/11 a71335aa7dba4d47 +bladeMaster 6/12 48ab2e50acac369e +bladeMaster 6/13 cfe54fc6bf9192eb +bladeMaster 6/14 c094715529541e03 +bladeMaster 6/15 f57c1c7574158666 +bladeMaster 6/16 0996d4c587d7d92d +bladeMaster 6/17 1889f1fc9639c704 +bladeMaster 6/18 ad7c5fac2c45b538 +bladeMaster 6/19 b6d88e98d2df9687 +bladeMaster 6/2 23b8a3af6a227840 +bladeMaster 6/20 aebe52e64a1cfb9e +bladeMaster 6/21 58719a83f98fd85c +bladeMaster 6/3 fe0a7f22aa665e0d +bladeMaster 6/4 7606cda289246a84 +bladeMaster 6/5 cd682b3166a7ca4f +bladeMaster 6/6 7823477a3fbcd6cf +bladeMaster 6/7 b3a6a7dedadaea8a +bladeMaster 6/8 2d925a1601ef368f +bladeMaster 6/9 3af5062ad26d9548 +bladeMaster 7/0 331d0b665e5414a0 +bladeMaster 7/1 5dbb6e43bc186837 +bladeMaster 7/10 d00c943a829bc971 +bladeMaster 7/11 3e38e9d93b77da30 +bladeMaster 7/12 625c025fadff990f +bladeMaster 7/13 48a39a96a3af08da +bladeMaster 7/14 4195ff8fc761466d +bladeMaster 7/16 73a0646f579c2169 +bladeMaster 7/17 f513275c83838cbb +bladeMaster 7/18 c62b594ca4f8b912 +bladeMaster 7/19 9de42c06277fde8c +bladeMaster 7/2 094882f698aa4e48 +bladeMaster 7/21 8b460637b4c73bc1 +bladeMaster 7/22 7f1f62ce49912d87 +bladeMaster 7/24 98126d56e6cfb5df +bladeMaster 7/25 03dcd2a80fe461e9 +bladeMaster 7/26 0d31ef66d6d65b7c +bladeMaster 7/27 553a32241f371d83 +bladeMaster 7/28 8218fb2a37965786 bladeMaster 7/29 abb64004de037147 -bladeMaster 7/3 bd2e76d8559b6c77 +bladeMaster 7/3 a03222564e6759d9 bladeMaster 7/30 73c558a4921ddade bladeMaster 7/31 cb5d61e6793fdc0c bladeMaster 7/33 869c08c35e7ca8da @@ -741,62 +741,62 @@ bladeMaster 7/34 f6c51dc8dd8b054f bladeMaster 7/35 219b35701b8175ca bladeMaster 7/36 52fa22834f2f35bc bladeMaster 7/38 ff9cb83b61ba12ce -bladeMaster 7/39 e6634bd423693f76 -bladeMaster 7/4 3f3f46556c76fc5c -bladeMaster 7/40 c4184a9707def612 -bladeMaster 7/41 46acb86e0737f9f4 +bladeMaster 7/39 2800c432686d3622 +bladeMaster 7/4 6f27d3c2cd410c62 +bladeMaster 7/40 d6664c25bc8c42e2 +bladeMaster 7/41 36bc0230b0fd71dc bladeMaster 7/42 95beff3ddaa7b51a bladeMaster 7/43 b99b89eb3e6ec892 bladeMaster 7/44 6bba81eb761a1d95 bladeMaster 7/45 a3781021b33bb155 bladeMaster 7/46 092e097cf68bfdd2 bladeMaster 7/49 e65673abf25d3be3 -bladeMaster 7/5 186556204f346814 +bladeMaster 7/5 d3fc2c757231fe98 bladeMaster 7/50 95e6c12822228221 bladeMaster 7/51 09fe5f5bbf67645e bladeMaster 7/52 bb708993713ae825 -bladeMaster 7/59 e56c225fa2fb0987 -bladeMaster 7/6 16b25c2c4ca65f81 +bladeMaster 7/59 7c1c19111c5d0e49 +bladeMaster 7/6 6529e1b74bad3b7f bladeMaster 7/60 ba3d6e513f13f0b5 bladeMaster 7/61 f2576dba99cde5df -bladeMaster 7/62 60df63c43732c2b9 -bladeMaster 7/63 d1995acb4dcae717 -bladeMaster 7/64 d09f0fb2990d62d8 -bladeMaster 7/65 c8ca8193620a600a -bladeMaster 7/66 a1b589a0539ac2a6 -bladeMaster 7/67 34f1ff3392b71993 -bladeMaster 7/68 726d6b3e85be97db -bladeMaster 7/69 6266fa6e41bc42ca -bladeMaster 7/7 373da62ac0b70cd5 -bladeMaster 7/70 0fdb045394513eb1 -bladeMaster 7/72 1e775ebde59716d0 +bladeMaster 7/62 c50fec1c1b466f77 +bladeMaster 7/63 2735a334a2660c33 +bladeMaster 7/64 487d0eb0f8e34f1a +bladeMaster 7/65 e3389abf5e0e7e48 +bladeMaster 7/66 6ee03a404b1267aa +bladeMaster 7/67 633c7db64ceeb71b +bladeMaster 7/68 c49de6026acf393b +bladeMaster 7/69 2bed163a6be04dc8 +bladeMaster 7/7 ad3656be56659753 +bladeMaster 7/70 3dd0865e43b676d3 +bladeMaster 7/72 547570a8ff055e38 bladeMaster 7/73 fc11a8251a249586 -bladeMaster 7/8 628f906de3fc2f1d -bladeMaster 7/9 f329dc53b61b5149 -bladeMaster 8/0 8e9c748a034d390c -bladeMaster 8/1 d7c715b3ee97dc70 -bladeMaster 8/10 6df5d603947f5c5a -bladeMaster 8/11 d70747f64e0a40ec -bladeMaster 8/12 a2378c6e6e2200e8 -bladeMaster 8/13 ed10fff298c0780e -bladeMaster 8/14 dd84981d627e9047 -bladeMaster 8/15 d8ee4aff75279049 -bladeMaster 8/16 1a9d6524f483537b -bladeMaster 8/17 fa24465180cd5bfc -bladeMaster 8/18 1d622566c72834d0 -bladeMaster 8/19 2f6f43d0ef90a0bb -bladeMaster 8/2 fd44811ad6347aba -bladeMaster 8/20 e674870af10db29b -bladeMaster 8/21 7290974dc1203816 -bladeMaster 8/22 2ea2e5525459a9b8 -bladeMaster 8/23 7edb207ceefbf589 -bladeMaster 8/24 fc92161acce33ec9 -bladeMaster 8/25 a5592668c1154182 -bladeMaster 8/26 fab8e1b2f2f71075 -bladeMaster 8/27 9d30e47c03079774 -bladeMaster 8/28 39f0078967869c4d +bladeMaster 7/8 7eb4a7150d4a0251 +bladeMaster 7/9 4b3304716e660aef +bladeMaster 8/0 dc34b390fb6550e8 +bladeMaster 8/1 0c956948383262aa +bladeMaster 8/10 e3b0bea8558e7a24 +bladeMaster 8/11 f319d970bbbf927c +bladeMaster 8/12 5f9ee2ecc2d36cea +bladeMaster 8/13 227c960d10ae32a2 +bladeMaster 8/14 471f1387b29f302d +bladeMaster 8/15 02c5b235f7f3bd51 +bladeMaster 8/16 56fd0c7b8a98459d +bladeMaster 8/17 ecd5da464540799c +bladeMaster 8/18 72ae3cf9ad0107c2 +bladeMaster 8/19 509ec9d02d32917b +bladeMaster 8/2 1c3ff2cf62db4326 +bladeMaster 8/20 41e59e9ed21537bb +bladeMaster 8/21 502693d53ab94664 +bladeMaster 8/22 e90b6b82b981b942 +bladeMaster 8/23 6183277e094c676f +bladeMaster 8/24 aadaf614069ef71b +bladeMaster 8/25 b49abcc9ab02d00a +bladeMaster 8/26 ee1b581127c45509 +bladeMaster 8/27 e173818be968aa2e +bladeMaster 8/28 7264ff8483fcbc17 bladeMaster 8/29 44f2c9716d323195 -bladeMaster 8/3 4fa6dd6e38ed6136 +bladeMaster 8/3 aef58506e0533b6e bladeMaster 8/30 622dbe9d00b3fb53 bladeMaster 8/31 44722e2a4cb72a1d bladeMaster 8/32 0159b786068410aa @@ -806,10 +806,10 @@ bladeMaster 8/35 2d1085374caaec0b bladeMaster 8/36 c2664253ecbedb05 bladeMaster 8/37 fa142ac859086c0b bladeMaster 8/38 22395dc12943c26a -bladeMaster 8/39 b0f8212ff3e86e93 -bladeMaster 8/4 e28d4eca9acad0df -bladeMaster 8/40 04dc51f90fa08f40 -bladeMaster 8/41 a8325ad2eba57a48 +bladeMaster 8/39 f6e3824ac220d91d +bladeMaster 8/4 afdaa48c0d3fd7bb +bladeMaster 8/40 d30337be8513153e +bladeMaster 8/41 9a331b4707e7ef2a bladeMaster 8/42 1f4e0726cb9436a6 bladeMaster 8/43 64664bf41f199975 bladeMaster 8/44 8374d6064be02898 @@ -818,53 +818,53 @@ bladeMaster 8/46 08732b5f9befeb37 bladeMaster 8/47 be7160e8ed35175b bladeMaster 8/48 6c037d87947e0a21 bladeMaster 8/49 077c78a6c89adc93 -bladeMaster 8/5 db2c4f36bfc6d643 +bladeMaster 8/5 da289063029b83ef bladeMaster 8/50 574297811b93818f bladeMaster 8/51 c2b46101663a945d bladeMaster 8/52 4da4b6e42646003a -bladeMaster 8/59 9feacb572d6a6add -bladeMaster 8/6 0b1ce414baf1a325 +bladeMaster 8/59 e9bfe7bf631eece5 +bladeMaster 8/6 59b700f93429e461 bladeMaster 8/60 6a0eb0bec25a2b54 bladeMaster 8/61 d8f3a1f0014cfa2d -bladeMaster 8/62 eabc3865e03d7a48 -bladeMaster 8/63 159d7fbed56a8edb -bladeMaster 8/64 037cff9a2b434273 -bladeMaster 8/65 7bb3d1cef31245a5 -bladeMaster 8/66 bef7c9d5bd72b420 -bladeMaster 8/67 ba0ecafda7aebee6 -bladeMaster 8/68 5764a87e4ace8eb7 -bladeMaster 8/69 3182324925f6951c -bladeMaster 8/7 8c738ced37193529 -bladeMaster 8/70 6fe0e1aa771ab7eb -bladeMaster 8/71 0dc0dc0ef17ef61e -bladeMaster 8/72 05be27f597483cc8 +bladeMaster 8/62 bafdf46ccfece9fa +bladeMaster 8/63 871bdee997bde8f1 +bladeMaster 8/64 95df985ba44db595 +bladeMaster 8/65 7c504189139a0b61 +bladeMaster 8/66 dc5b7aa706f531ce +bladeMaster 8/67 ab017346de2ae988 +bladeMaster 8/68 f0459520e000556b +bladeMaster 8/69 d1af11b71b7b6c72 +bladeMaster 8/7 dde233a37a926c7d +bladeMaster 8/70 332f9a6607575167 +bladeMaster 8/71 32e60ced1af4a6e0 +bladeMaster 8/72 d672bad2e6544358 bladeMaster 8/73 8cec5ed0385e423e -bladeMaster 8/8 798b84e702e20063 -bladeMaster 8/9 4dfa3cbe90ef4abf -bladeMaster 9/0 65c38a6e9e4aac5e -bladeMaster 9/1 62cea8734475ac10 -bladeMaster 9/10 979022443d688a0a -bladeMaster 9/11 1bfd8f7293a8dbf9 -bladeMaster 9/12 794aeb1db896259b -bladeMaster 9/13 e487292418a8d6c2 -bladeMaster 9/14 f4db175a640679fc -bladeMaster 9/15 1fe2020152ccd512 -bladeMaster 9/16 509658b2c7ccf11d -bladeMaster 9/17 9d69f12fe8938263 -bladeMaster 9/18 a8e663d9cb3d5e10 -bladeMaster 9/19 2a394ad37cbe8248 -bladeMaster 9/2 fcb6bba2258d4dd9 -bladeMaster 9/20 c60d8ea303880188 -bladeMaster 9/21 6c554ae41da3075b -bladeMaster 9/22 5ce1defb53f32716 -bladeMaster 9/23 a5faab6eaf0c4bff -bladeMaster 9/24 5871e76c87948463 -bladeMaster 9/25 bb610ee2f736bc19 -bladeMaster 9/26 68e399c445a5bb59 -bladeMaster 9/27 b91228c0b24845c6 -bladeMaster 9/28 73ef2f570be09b98 +bladeMaster 8/8 d72124ffe04348d9 +bladeMaster 8/9 f5723cb0eba1c7e7 +bladeMaster 9/0 22d7a4aed1cc1c38 +bladeMaster 9/1 1ea4713d6dd4e416 +bladeMaster 9/10 7b4f38b796aac03c +bladeMaster 9/11 1126aebe7fba4cf3 +bladeMaster 9/12 74b318bf618d9fc3 +bladeMaster 9/13 49c822538b6ba4b2 +bladeMaster 9/14 287bdacf61e5aab8 +bladeMaster 9/15 2f921671a402a2e2 +bladeMaster 9/16 453f93d4c200f83b +bladeMaster 9/17 8f7f6f956f32c831 +bladeMaster 9/18 c8f63f300fbdc776 +bladeMaster 9/19 474363bad2cf3022 +bladeMaster 9/2 4c61e1e929485975 +bladeMaster 9/20 d15a0663139e79b2 +bladeMaster 9/21 c9fc5f56deb3d6b9 +bladeMaster 9/22 a85b8bc59c76be3a +bladeMaster 9/23 f1d52990281c94b3 +bladeMaster 9/24 066daa1b3e7763a5 +bladeMaster 9/25 45e4ed38ce7eaca1 +bladeMaster 9/26 dadaf8bf87437021 +bladeMaster 9/27 1de55229055f6e32 +bladeMaster 9/28 8b2e38a096315c5a bladeMaster 9/29 16f857a17d1ad4bb -bladeMaster 9/3 f4f7ce0640347050 +bladeMaster 9/3 c24c0d33ce37e050 bladeMaster 9/30 46618893449f64da bladeMaster 9/31 1a27bb281a33794e bladeMaster 9/32 fcd3b9a78715bbc0 @@ -874,10 +874,10 @@ bladeMaster 9/35 88b6469e8ed53386 bladeMaster 9/36 67bbb940cd3814e7 bladeMaster 9/37 5e58f4750f14d755 bladeMaster 9/38 da85021a058487df -bladeMaster 9/39 43cd4a90204df678 -bladeMaster 9/4 0fa09bb548e759e6 -bladeMaster 9/40 4208d2f980cbb755 -bladeMaster 9/41 b925374fea205222 +bladeMaster 9/39 d68872b2e0f8d834 +bladeMaster 9/4 fed2a6f398155390 +bladeMaster 9/40 5ec47355abfe9e25 +bladeMaster 9/41 731dc89f6af679d6 bladeMaster 9/42 54dc991a6888b3bd bladeMaster 9/43 320149ef4b4b47ee bladeMaster 9/44 26c4266f6167f2a6 @@ -886,44 +886,44 @@ bladeMaster 9/46 ab0220bc5b76544b bladeMaster 9/47 7c45064af8516b55 bladeMaster 9/48 6721ef4ef2d74ea6 bladeMaster 9/49 929b0a2526b37dbf -bladeMaster 9/5 047f5187c717e9d4 +bladeMaster 9/5 8bc534d1e2953004 bladeMaster 9/50 05309232ae37398e bladeMaster 9/51 e38b0b970984f28f bladeMaster 9/52 5fa6512cd3512434 -bladeMaster 9/59 12dd8a6fa4c2fc47 -bladeMaster 9/6 7f92021ed18093d9 +bladeMaster 9/59 d9f37c9bcca532b7 +bladeMaster 9/6 0e12bac0d43e3793 bladeMaster 9/60 5b9131479ad541a6 bladeMaster 9/61 d92c791cc201ad8d -bladeMaster 9/62 d3d166a00753a38f -bladeMaster 9/63 913a47dadb641d26 -bladeMaster 9/64 0ee1e123d5eedbd6 -bladeMaster 9/65 41ec739be0806291 -bladeMaster 9/66 65df8bbe3928baf0 -bladeMaster 9/67 0e25a8236e2247ef -bladeMaster 9/68 e68afde35d1279ca -bladeMaster 9/69 fc7fef08799b77a3 -bladeMaster 9/7 787b99de885f9ce3 -bladeMaster 9/70 ebdb47bd2384c811 -bladeMaster 9/71 a8667ef19ada300a -bladeMaster 9/72 14149e8961b94f57 +bladeMaster 9/62 22dd1bf928fe96a5 +bladeMaster 9/63 5b32392dd9669c4e +bladeMaster 9/64 23cbb846796cc828 +bladeMaster 9/65 f9b3462b4bd8020b +bladeMaster 9/66 cb3fff08d0d64658 +bladeMaster 9/67 0eb381b00cab9ebb +bladeMaster 9/68 6dae08dc91271fd6 +bladeMaster 9/69 d22abb4c66a9e001 +bladeMaster 9/7 0b2912d887482cbb +bladeMaster 9/70 cc56c62763d40bbb +bladeMaster 9/71 f7cdb2be2879b784 +bladeMaster 9/72 e02440c67c23a65f bladeMaster 9/73 311e24ffe10339bc -bladeMaster 9/8 e729bfea047ca286 -bladeMaster 9/9 01ada0a47f3919de -newDarkWizard 0/0 43abab5ac08318ce -newDarkWizard 0/1 d76281a7238e2433 -newDarkWizard 0/10 b21bfc487032161a -newDarkWizard 0/11 00f0a742ce2c5542 -newDarkWizard 0/12 4090e9423ee30dbf -newDarkWizard 0/13 f4d11ba066c3184a -newDarkWizard 0/14 674d865356367a36 -newDarkWizard 0/15 9b09ef315ba3da29 -newDarkWizard 0/16 8eb6cbed373c8cef -newDarkWizard 0/17 5d83fdf4c63d12cf -newDarkWizard 0/18 7b1cc36e338eb955 +bladeMaster 9/8 56d3957a7a4ee9de +bladeMaster 9/9 c949fa2853ce0afc +newDarkWizard 0/0 cee52635859221ee +newDarkWizard 0/1 32f54e7c0f4bb76b +newDarkWizard 0/10 ce5af66b7694b7ae +newDarkWizard 0/11 043afaaf79dbcdde +newDarkWizard 0/12 b713c90b2da8299b +newDarkWizard 0/13 5bc4929f6681b248 +newDarkWizard 0/14 a3f2ee898482df18 +newDarkWizard 0/15 59723ef447937caf +newDarkWizard 0/16 6af75aa41822e58f +newDarkWizard 0/17 09ca5fe5d08fb9eb +newDarkWizard 0/18 8fcc136f1a1a426d newDarkWizard 0/19 1f3b02f7c8928fd8 -newDarkWizard 0/2 2358c74d71fdb94e -newDarkWizard 0/20 f7c713879f224114 -newDarkWizard 0/21 0d09472137750a6b +newDarkWizard 0/2 4ab5b6092ef0c1a2 +newDarkWizard 0/20 db7d2eec22673d74 +newDarkWizard 0/21 1b4cbba97254d2d3 newDarkWizard 0/22 15e58d97dd0906e0 newDarkWizard 0/23 a25baec8b016d634 newDarkWizard 0/24 5b59e36ad5f8c132 @@ -931,51 +931,51 @@ newDarkWizard 0/25 d6e923c105c62e79 newDarkWizard 0/26 e95912b9f2f97aa9 newDarkWizard 0/27 e8fef209baedc3b5 newDarkWizard 0/28 a56a44b89fcaf23d -newDarkWizard 0/3 9e6285c0cb7603c7 -newDarkWizard 0/31 c684d3ea7e34adf1 -newDarkWizard 0/32 5abf67a1e260006d +newDarkWizard 0/3 479e7850c324db0d +newDarkWizard 0/31 3d3562fec5a023f1 +newDarkWizard 0/32 9b5e262b62a439e1 newDarkWizard 0/33 59dbe1c5582d56fe newDarkWizard 0/34 12141f264c34b87a newDarkWizard 0/35 bd5a2b637ee6d9f3 -newDarkWizard 0/4 d8078e76cce21c71 -newDarkWizard 0/5 4718d01d9b23a7c9 -newDarkWizard 0/6 fa33a01a4560058d -newDarkWizard 0/7 e7ebf4352216aa6e -newDarkWizard 0/8 6b9f556343016eac -newDarkWizard 0/9 d955d2c0dd863ea7 -newDarkWizard 1/0 3165d6effe8ffed9 -newDarkWizard 1/1 88e696a6e7fce900 -newDarkWizard 1/2 a57f574b7da46976 -newDarkWizard 1/3 54504190c0917563 -newDarkWizard 1/4 a1c2c177dc90e8ce -newDarkWizard 1/5 57a48c4502fe2733 -newDarkWizard 1/6 0583d2ca4551edd7 -newDarkWizard 1/7 435559bcccb69277 -newDarkWizard 1/8 0af64145e8b009f5 -newDarkWizard 10/0 16560fd7fd9c9164 -newDarkWizard 10/1 e93f59d4c19b6cef -newDarkWizard 10/10 584431271a5b45c5 -newDarkWizard 10/11 073c14aafa2af089 -newDarkWizard 10/12 2685861ed3493a80 -newDarkWizard 10/13 900d26b8e72ae1bb -newDarkWizard 10/14 304a9842ac95a25c -newDarkWizard 10/15 c194923a34a5c688 -newDarkWizard 10/16 e810d38ac20b85e5 -newDarkWizard 10/17 6015e6f1c3b4d653 -newDarkWizard 10/18 498bd74f55ddfb97 -newDarkWizard 10/19 1a1ae5b76376310b -newDarkWizard 10/2 22df5692515c6834 -newDarkWizard 10/20 d4b8ffcd056f7470 -newDarkWizard 10/21 a3e3e87ba8ea8a20 -newDarkWizard 10/22 11fbd39ed2152851 -newDarkWizard 10/23 41c1a63106761a5e -newDarkWizard 10/24 a5e57edfa4507223 -newDarkWizard 10/25 10b874f019a6b737 -newDarkWizard 10/26 9f2312f8457036bd -newDarkWizard 10/27 f5b08326704fd5d1 -newDarkWizard 10/28 b0aaa7729a5316cb +newDarkWizard 0/4 9fe3c62ccb1ab951 +newDarkWizard 0/5 2132d1be2406a4e7 +newDarkWizard 0/6 21cc0ea9fe9367bb +newDarkWizard 0/7 724ee28f04729eea +newDarkWizard 0/8 afc71197926d1858 +newDarkWizard 0/9 ae462c4dd72c8565 +newDarkWizard 1/0 779c576e63a1f2e9 +newDarkWizard 1/1 853cd94293678aee +newDarkWizard 1/2 6c89085e9d619430 +newDarkWizard 1/3 323f31c9875701d1 +newDarkWizard 1/4 9ca3351291e0c372 +newDarkWizard 1/5 1898dd684a8adf99 +newDarkWizard 1/6 8697ad3a003b5505 +newDarkWizard 1/7 13237754bc96a691 +newDarkWizard 1/8 4488670c22bdacff +newDarkWizard 10/0 a38331292e9a48fe +newDarkWizard 10/1 e7c531261132218b +newDarkWizard 10/10 70ec8beed1b94353 +newDarkWizard 10/11 25b334a4536d387f +newDarkWizard 10/12 18aebb7f1de9ac6a +newDarkWizard 10/13 a1ff3691338e0851 +newDarkWizard 10/14 10280c0b0d3fe9ec +newDarkWizard 10/15 a54caf3184e2fbea +newDarkWizard 10/16 c5eedecb7212cc43 +newDarkWizard 10/17 94a688892e6470a7 +newDarkWizard 10/18 afa3295d7376c761 +newDarkWizard 10/19 2aef67c0aff3f7ab +newDarkWizard 10/2 f4d414a284dadef8 +newDarkWizard 10/20 1ec12e93ee077706 +newDarkWizard 10/21 fe524397fc2a58d2 +newDarkWizard 10/22 973d62bac5b56d37 +newDarkWizard 10/23 ae98b2b71a22a8e4 +newDarkWizard 10/24 4bc0847a69354499 +newDarkWizard 10/25 7cb0386d77161235 +newDarkWizard 10/26 7c3370ab0b234e41 +newDarkWizard 10/27 56bf64b05c849195 +newDarkWizard 10/28 0efdb2ddd0676893 newDarkWizard 10/29 2f7138e5cad8d24c -newDarkWizard 10/3 8f79eb1d419932bb +newDarkWizard 10/3 3206e95dca2877ad newDarkWizard 10/30 da0a67eb44af50f4 newDarkWizard 10/31 48709275e2f37296 newDarkWizard 10/32 885af5864732f9d0 @@ -985,10 +985,10 @@ newDarkWizard 10/35 06d2772144b3abda newDarkWizard 10/36 b39f76b2e9b12a26 newDarkWizard 10/37 a8fba0b98660aaf1 newDarkWizard 10/38 2f2f71709232714e -newDarkWizard 10/39 07023bbed527d19c -newDarkWizard 10/4 e6b4844a911ed8ea -newDarkWizard 10/40 44d0052da3e3479a -newDarkWizard 10/41 410177dfe6f6af27 +newDarkWizard 10/39 8c8e316a37773646 +newDarkWizard 10/4 372a428ff50171f6 +newDarkWizard 10/40 23207daf986ce3b0 +newDarkWizard 10/41 5c1bf78715cf9005 newDarkWizard 10/42 457e742d4b0f57af newDarkWizard 10/43 afaac04198e2fd39 newDarkWizard 10/44 0868ec813ccf7c9c @@ -997,48 +997,48 @@ newDarkWizard 10/46 889ec46af4c297b8 newDarkWizard 10/47 d441d5b7aaaf80d6 newDarkWizard 10/48 f5c95d1b8138e880 newDarkWizard 10/49 f32792af097479ff -newDarkWizard 10/5 e62fdd78433e38ac +newDarkWizard 10/5 34d2ab4cf106a38e newDarkWizard 10/50 cae11ba50dcd1d8c newDarkWizard 10/51 6fdaf3c64343c49d newDarkWizard 10/52 6ff34d8708f170d8 -newDarkWizard 10/6 5e12d4c94fb2e5a6 -newDarkWizard 10/62 7bf2cf6e2ee8c131 -newDarkWizard 10/63 e21eee43c5264f5c -newDarkWizard 10/64 1abde7742b43968c -newDarkWizard 10/65 db16b90406874ee0 -newDarkWizard 10/66 b75754e6c08568e5 -newDarkWizard 10/67 e76e74ad81e11930 -newDarkWizard 10/68 0c328cee6212aaab -newDarkWizard 10/69 b952a46c0c2d014b -newDarkWizard 10/7 3badeffd78a4ddb1 -newDarkWizard 10/70 24490a6d981d48b6 -newDarkWizard 10/71 9f60852a3de543f8 -newDarkWizard 10/8 6eac91a9d5b6f56c -newDarkWizard 10/9 65a5ad74c87182fe -newDarkWizard 11/0 967cc3bbf2a84089 -newDarkWizard 11/1 a29e7326b55b21ac -newDarkWizard 11/10 32ab56ab945e5022 -newDarkWizard 11/11 80d2b9ac541b0df9 -newDarkWizard 11/12 c45bab482dfe8f54 -newDarkWizard 11/13 7f24d7db2bd836b5 -newDarkWizard 11/14 d7dd6b78bc52db66 -newDarkWizard 11/15 6eb3544af5dbd2fd -newDarkWizard 11/16 478854047a2d9178 -newDarkWizard 11/17 0efdd3569fe9257a -newDarkWizard 11/18 f64684355397210e -newDarkWizard 11/19 aac749e3392aabec -newDarkWizard 11/2 91c6e31dab91778e -newDarkWizard 11/20 aa82802a442b5cc9 -newDarkWizard 11/21 6939954262ab5507 -newDarkWizard 11/22 cd7e1290e6997538 -newDarkWizard 11/23 ad5bfe36551f7964 -newDarkWizard 11/24 c62b7f41bd8a09d0 -newDarkWizard 11/25 8faa6353cd07fd9f -newDarkWizard 11/26 d065cffe7e48b88b -newDarkWizard 11/27 277e95c9991a46d9 -newDarkWizard 11/28 c3baf82613a31879 +newDarkWizard 10/6 aeba4f6647675590 +newDarkWizard 10/62 1db254953d435d91 +newDarkWizard 10/63 b682edbdf15f7268 +newDarkWizard 10/64 09a978370f6e1dac +newDarkWizard 10/65 36654664f5030b30 +newDarkWizard 10/66 8197848d1a4c5927 +newDarkWizard 10/67 8bb1338816f594c6 +newDarkWizard 10/68 d8b34fd3b5b84cb1 +newDarkWizard 10/69 2fd323aed7044edd +newDarkWizard 10/7 ab1866accd125c1b +newDarkWizard 10/70 008e7d2f449c10b4 +newDarkWizard 10/71 9362f0b58bb43994 +newDarkWizard 10/8 7ff4665e2dcc6bba +newDarkWizard 10/9 4e83a6eb73ebebd6 +newDarkWizard 11/0 5263692b3cb8c6eb +newDarkWizard 11/1 bb8ddd7ef258622c +newDarkWizard 11/10 7d941e0263106104 +newDarkWizard 11/11 ca812b763c61599f +newDarkWizard 11/12 1dc66f41f3472d7a +newDarkWizard 11/13 026ebb559f299b27 +newDarkWizard 11/14 fdb1b59d7fb9007e +newDarkWizard 11/15 4bd6097284fdc003 +newDarkWizard 11/16 8ce0f71140461350 +newDarkWizard 11/17 2bfe2364cf8ddb78 +newDarkWizard 11/18 27b4030336406ad8 +newDarkWizard 11/19 5fcb839b65f8ec4c +newDarkWizard 11/2 4d451a01c769758e +newDarkWizard 11/20 baa6ec794df41503 +newDarkWizard 11/21 da4c0efb671d3e3b +newDarkWizard 11/22 99d6d9d096c1187e +newDarkWizard 11/23 185637c758e80e44 +newDarkWizard 11/24 2f36c9535d483b3e +newDarkWizard 11/25 d0c165319c1a82df +newDarkWizard 11/26 78ca5b3f41ddf4fd +newDarkWizard 11/27 6ad94ac51cc3261d +newDarkWizard 11/28 8c47daf4bdeb8edf newDarkWizard 11/29 1f6cfe0514b210a6 -newDarkWizard 11/3 bef1502139b3c15c +newDarkWizard 11/3 0658242274937394 newDarkWizard 11/30 4c9669f85172f7bc newDarkWizard 11/31 638507bf26c62b2b newDarkWizard 11/32 7d534b27961bddf2 @@ -1048,10 +1048,10 @@ newDarkWizard 11/35 460cabcd78ed3258 newDarkWizard 11/36 2f806ad8a59b6410 newDarkWizard 11/37 d61c61ed5150875e newDarkWizard 11/38 426fa6ffadca0c7f -newDarkWizard 11/39 bcea2354cf7e4fde -newDarkWizard 11/4 5fd2628fbba2e647 -newDarkWizard 11/40 763ad0fbd8768709 -newDarkWizard 11/41 d8ddda1c9c31eefb +newDarkWizard 11/39 23a110679a9d8f0e +newDarkWizard 11/4 9a80f357d4e096fd +newDarkWizard 11/40 02a161bd9fc396d7 +newDarkWizard 11/41 7db7171de787fe8d newDarkWizard 11/42 842f9f1b3f5e02df newDarkWizard 11/43 ad5f96a9ff371878 newDarkWizard 11/44 4773b61aad7084c3 @@ -1060,29 +1060,29 @@ newDarkWizard 11/46 d25e789fafb21e35 newDarkWizard 11/47 e77ac2108983e63d newDarkWizard 11/48 b816f9b6a0b836bd newDarkWizard 11/49 371d495c9fa16970 -newDarkWizard 11/5 f6afc472a4f6c94b +newDarkWizard 11/5 bcb134b4470e87a5 newDarkWizard 11/50 55b86f079705a1b6 newDarkWizard 11/51 0f4c7f5e6f1078df newDarkWizard 11/52 1d413ffc7aafac32 -newDarkWizard 11/59 ae729389720b6065 -newDarkWizard 11/6 2d8bbb54bbfb7c04 +newDarkWizard 11/59 bdbf7ae5bd3efd63 +newDarkWizard 11/6 f8a03dc2d7b29992 newDarkWizard 11/60 a2ed748e277a01e1 newDarkWizard 11/61 d08fbd36100ce4d5 -newDarkWizard 11/62 62c4fb8e487e7e86 -newDarkWizard 11/63 486b5130c40e0ed5 -newDarkWizard 11/64 8f5a3efeea32a894 -newDarkWizard 11/65 7817993b26f7b7ee -newDarkWizard 11/66 db8ca730fe6494a9 -newDarkWizard 11/67 5ec22e983d730453 -newDarkWizard 11/68 9409d1b7b394ec22 -newDarkWizard 11/69 0028935d0eb9e046 -newDarkWizard 11/7 e3cda4ac36ff625b -newDarkWizard 11/70 26cdeeadadd39960 -newDarkWizard 11/71 384952b982877696 -newDarkWizard 11/72 376e8032fa0f7b3d +newDarkWizard 11/62 0c0627ccca6f2bee +newDarkWizard 11/63 c666b97f44e5e6f9 +newDarkWizard 11/64 f53b75235aa26dc4 +newDarkWizard 11/65 b4cc91272750d9f4 +newDarkWizard 11/66 5d2d65f7cf5ba565 +newDarkWizard 11/67 372f68d5a5b2d125 +newDarkWizard 11/68 7655f01008c25bf4 +newDarkWizard 11/69 92a62dce0e90daa0 +newDarkWizard 11/7 70f7575c0a1d46db +newDarkWizard 11/70 56fb39122a3943ca +newDarkWizard 11/71 664ca60d0604a1a6 +newDarkWizard 11/72 200eb2a591965a1b newDarkWizard 11/73 4b8198ae457d464c -newDarkWizard 11/8 673fd440dc9c6bbd -newDarkWizard 11/9 df7b1ca9d5b52808 +newDarkWizard 11/8 5697633574c5721b +newDarkWizard 11/9 e5db9de8daecab48 newDarkWizard 12/0 722755a88ebbb40d newDarkWizard 12/1 c7267a641bf5d041 newDarkWizard 12/10 a905bfa19d8ccc8f @@ -1202,7 +1202,7 @@ newDarkWizard 13/116 a65bd32348eed3c7 newDarkWizard 13/117 2f4a8fe8a8543ebf newDarkWizard 13/118 594a3416af0c2207 newDarkWizard 13/119 4556b07b3faf16af -newDarkWizard 13/12 ac06d929afdcbf21 +newDarkWizard 13/12 2855d07d7d3abc89 newDarkWizard 13/120 82292ce5233e4427 newDarkWizard 13/121 706a4efc0b80fa9f newDarkWizard 13/122 4cc1c33760414973 @@ -1213,7 +1213,7 @@ newDarkWizard 13/126 cd02aab0ffd34d27 newDarkWizard 13/127 a0e4bf3c0b9b0cc7 newDarkWizard 13/128 6eb83947ae6255b3 newDarkWizard 13/129 f84dc961130cf64b -newDarkWizard 13/13 0d0e7fd58ff8b825 +newDarkWizard 13/13 8004efbdc0583761 newDarkWizard 13/130 8e4a02eaec7a2163 newDarkWizard 13/131 57d9f5b854210f03 newDarkWizard 13/132 31086e82282ebb8b @@ -1237,13 +1237,13 @@ newDarkWizard 13/18 cffecd839926dbaf newDarkWizard 13/19 d7b537649b8a6c2f newDarkWizard 13/2 6a265006848e57af newDarkWizard 13/20 dd6bbd7965c66b6c -newDarkWizard 13/21 82c7e83132cfe0d9 -newDarkWizard 13/22 d5c17f6322acb259 -newDarkWizard 13/23 02cb23ffbe023d29 -newDarkWizard 13/24 26aa21a155328969 -newDarkWizard 13/25 bd928dcd6e2ce3b5 -newDarkWizard 13/26 b18ad7cc5dc0cabf -newDarkWizard 13/27 44740b0b5e133ff9 +newDarkWizard 13/21 0682a42a9be25289 +newDarkWizard 13/22 468bcd9cd321fd7d +newDarkWizard 13/23 2b43d1f1b6c58479 +newDarkWizard 13/24 fb358286c1d8fbb1 +newDarkWizard 13/25 8a9b01522c8285f1 +newDarkWizard 13/26 8b049915c5839e1b +newDarkWizard 13/27 f0ab881bf56b25d1 newDarkWizard 13/28 70b2a54c0fbd5281 newDarkWizard 13/29 0a90b62ec6535667 newDarkWizard 13/3 ce13bbe3929d1677 @@ -1255,7 +1255,7 @@ newDarkWizard 13/34 2e951a2b32305e09 newDarkWizard 13/35 1b6db1b0541416c3 newDarkWizard 13/36 8b7bc1f5c088e80c newDarkWizard 13/37 813f49170771a951 -newDarkWizard 13/38 9a1d214104c38129 +newDarkWizard 13/38 c8e0238fd087cebf newDarkWizard 13/39 f8300227ebbb3b3a newDarkWizard 13/4 9248b7654a0bc221 newDarkWizard 13/40 d622d9635c4c20bd @@ -1297,7 +1297,7 @@ newDarkWizard 13/73 0715b3cfbbe11ac7 newDarkWizard 13/74 a7c6c1fd17465e8f newDarkWizard 13/75 25c98569e923395f newDarkWizard 13/76 2400633ed2a51bbf -newDarkWizard 13/8 7a84bd02a621e59c +newDarkWizard 13/8 f2081dbd0acd2334 newDarkWizard 13/80 7c29e56dcf23d8ff newDarkWizard 13/81 0d4f194599173b1f newDarkWizard 13/82 aa498d64785d5177 @@ -1308,7 +1308,7 @@ newDarkWizard 13/86 fd811954964f473f newDarkWizard 13/87 6b56df3b7634b883 newDarkWizard 13/88 00b45840876f795f newDarkWizard 13/89 0d1d55db5dba9ba7 -newDarkWizard 13/9 2357013b38b20a2d +newDarkWizard 13/9 24c975df1071b975 newDarkWizard 13/90 6f0a07b2f9efbb69 newDarkWizard 13/91 72596b59778cb3db newDarkWizard 13/92 1ae3a448940e92f7 @@ -1517,64 +1517,64 @@ newDarkWizard 15/6 2912505a9954e72f newDarkWizard 15/7 120b71b3aa69fbf7 newDarkWizard 15/8 1d35287561fdd27f newDarkWizard 15/9 5eb583b50ea94b8f -newDarkWizard 2/0 f317cfe1179e7b88 -newDarkWizard 2/1 604650456e4ebe58 -newDarkWizard 2/10 baabda694ec570c5 -newDarkWizard 2/11 44cb4e638381067e -newDarkWizard 2/12 6d7f60b365498f7c -newDarkWizard 2/13 91586737375d6f51 +newDarkWizard 2/0 67e0012ce8f9ffa0 +newDarkWizard 2/1 d7d81057723d77e2 +newDarkWizard 2/10 d7ba05f8d505e6a5 +newDarkWizard 2/11 da2a4e33d891da78 +newDarkWizard 2/12 8a76c9cbe789d594 +newDarkWizard 2/13 be3ebe7a02e453cf newDarkWizard 2/14 e8c28704d220edc6 newDarkWizard 2/15 94d52ed261b5528b -newDarkWizard 2/16 cc1550270221b376 +newDarkWizard 2/16 a9b76cf6aabc3b8c newDarkWizard 2/17 865f3a2dd95c6d0a newDarkWizard 2/18 efe76bbd0aceda3b -newDarkWizard 2/2 93b6914fce5c0ddc -newDarkWizard 2/3 3d25f60d1cd94f47 -newDarkWizard 2/4 2222639e08ccdd3a -newDarkWizard 2/5 d0fbb30af35a2f20 +newDarkWizard 2/2 d21438a55c83f066 +newDarkWizard 2/3 f25db78343f8efb5 +newDarkWizard 2/4 f665f611a1233e04 +newDarkWizard 2/5 a5d99225d5e47138 newDarkWizard 2/6 f6eecab2b44eaa99 -newDarkWizard 2/7 0cf698fd6a44dc3b -newDarkWizard 2/8 8a1fdc464c1c33fe -newDarkWizard 2/9 8ca11bd39235d1d1 -newDarkWizard 3/0 817c1405dc996fd3 -newDarkWizard 3/1 aace9b7a1f4d8708 -newDarkWizard 3/10 6ad3867325d8af43 -newDarkWizard 3/11 5a0631368d36bf08 -newDarkWizard 3/2 3c00695d9f509380 -newDarkWizard 3/3 6b7613d4f7311240 -newDarkWizard 3/4 5d9b361d3e5278af -newDarkWizard 3/5 bb6a8f72e122a7b7 -newDarkWizard 3/6 e02c2ded08b3fc82 -newDarkWizard 3/7 7c32f5ae3bef77e9 -newDarkWizard 3/8 eecda007a706fd61 -newDarkWizard 3/9 e365fcb5d307ae9a -newDarkWizard 4/0 cc53b1be2d08d230 -newDarkWizard 4/1 a5b6c2fdb51e815b -newDarkWizard 4/10 73ceb3475f89ea20 -newDarkWizard 4/11 06a7ffcd7dcf1341 -newDarkWizard 4/12 7b9b2898ac45292a -newDarkWizard 4/13 f2ff6ceebb429135 -newDarkWizard 4/14 0537a6d157dfbaee +newDarkWizard 2/7 a85d0dac437dbf25 +newDarkWizard 2/8 e2fb66916278296e +newDarkWizard 2/9 de13c87fdc8f68e7 +newDarkWizard 3/0 f886805629dc51db +newDarkWizard 3/1 c1b4a10e1a214d2c +newDarkWizard 3/10 f706e00c7653ee1b +newDarkWizard 3/11 22af243edfe0750e +newDarkWizard 3/2 80f7ca6f46d4c992 +newDarkWizard 3/3 558c3e7b3bf5024a +newDarkWizard 3/4 3ceb4cee62aebe61 +newDarkWizard 3/5 d76cfb95fb86aab5 +newDarkWizard 3/6 c7b5549c809be2a6 +newDarkWizard 3/7 f3f8ff1fb78c343d +newDarkWizard 3/8 161c475328aed831 +newDarkWizard 3/9 6b5935cef07ad26e +newDarkWizard 4/0 396d87c031560638 +newDarkWizard 4/1 4889fcd019734b75 +newDarkWizard 4/10 1d4f553277143bc6 +newDarkWizard 4/11 ba5e7c432fc7c1f9 +newDarkWizard 4/12 c097766f2932d88e +newDarkWizard 4/13 adcba8f299304c75 +newDarkWizard 4/14 bebc9bdc4d6f5b38 newDarkWizard 4/15 3afe4c0bdd96d073 -newDarkWizard 4/16 dd625ce2f672f7a1 -newDarkWizard 4/17 c52af6c191b49160 +newDarkWizard 4/16 90b501c714af2f9b +newDarkWizard 4/17 2334c5ca5ac2ecf6 newDarkWizard 4/18 f7d5e81eb5610ecd -newDarkWizard 4/19 06df3f883abc9949 -newDarkWizard 4/2 4a609cc619ff60d8 -newDarkWizard 4/20 84a65137a3f1713b +newDarkWizard 4/19 71939e95e9890dd5 +newDarkWizard 4/2 aa259209a29f4ff6 +newDarkWizard 4/20 8fb9cd6825ffa293 newDarkWizard 4/21 ed97945fcaa2d12a newDarkWizard 4/22 708beaf09a3e7e2c -newDarkWizard 4/23 c1174a60f6b0ed19 +newDarkWizard 4/23 d3fa5aa65c58f295 newDarkWizard 4/24 793af3b355dfcecd -newDarkWizard 4/3 471c785a430be100 -newDarkWizard 4/4 30bcc93af0c2240f -newDarkWizard 4/5 8e0fbca6871b32ad +newDarkWizard 4/3 d63ef160b2230e4e +newDarkWizard 4/4 3d086acd52b3c8c5 +newDarkWizard 4/5 10cfc8ed120f36d1 newDarkWizard 4/6 4d4b6b2d42c045f1 newDarkWizard 4/7 08034f934cc9fa5d -newDarkWizard 4/8 7ecb787aaf30c58d -newDarkWizard 4/9 2e58f178cc6d7881 -newDarkWizard 5/0 d4d6292f29822039 -newDarkWizard 5/1 f7bae210e159ffdc +newDarkWizard 4/8 8d7b26d5ebe51f1d +newDarkWizard 4/9 14b5fc7015126c81 +newDarkWizard 5/0 f787afb911a12f57 +newDarkWizard 5/1 b0b9e9811639500a newDarkWizard 5/10 e90ec761c5e2bd61 newDarkWizard 5/11 34f5d92ee7e5bdd1 newDarkWizard 5/12 f201cba466035c94 @@ -1585,66 +1585,66 @@ newDarkWizard 5/16 f3afce1b0c4d06aa newDarkWizard 5/17 dcf9665096bdc668 newDarkWizard 5/18 d1a9149b028e3d58 newDarkWizard 5/19 97ac23481539d19a -newDarkWizard 5/2 02366cdf531e36e5 +newDarkWizard 5/2 a9f63c85afbca2e7 newDarkWizard 5/20 d287bcb71143ce5d newDarkWizard 5/21 c1443accdab95d5c newDarkWizard 5/22 e97743b49a925449 newDarkWizard 5/23 e86286039566cd4e -newDarkWizard 5/3 48b29029c010ba38 -newDarkWizard 5/30 f7fc673fa66eec0a +newDarkWizard 5/3 15ecf3fdae28aa30 +newDarkWizard 5/30 d6ca3687141ac5e0 newDarkWizard 5/31 81322ec9cb290c8b newDarkWizard 5/33 13e034faf248c4d6 newDarkWizard 5/34 39609c9fe1c83302 newDarkWizard 5/36 b6e4cf67cb9c808e -newDarkWizard 5/4 e75ee5c0565783c4 -newDarkWizard 5/5 2f19865064407a04 -newDarkWizard 5/6 389efdc96d9de24a +newDarkWizard 5/4 2e3b7b2b31eed1a8 +newDarkWizard 5/5 74ec08738afbb336 +newDarkWizard 5/6 fa6e8c7c341cf958 newDarkWizard 5/7 583deed499da35e1 -newDarkWizard 5/8 7cda386a7ce223ba -newDarkWizard 5/9 4068006ba6e417eb -newDarkWizard 6/0 894c0004bc2ddbcc -newDarkWizard 6/1 ab4035baa7af699c -newDarkWizard 6/10 e91abb1fe4975ec9 -newDarkWizard 6/11 1d9502e805c8a274 -newDarkWizard 6/12 e0748dbc158abce8 -newDarkWizard 6/13 03803ec8fb6ce606 -newDarkWizard 6/14 d11d4943a7d78097 -newDarkWizard 6/15 a24c76b21f41eade -newDarkWizard 6/16 acd2d530ccb14b1d -newDarkWizard 6/17 30b5a11aecd52fc6 -newDarkWizard 6/18 54c376f8c77e3d34 -newDarkWizard 6/19 41e5be2661d6c990 -newDarkWizard 6/2 750ccbeeb0c354c9 -newDarkWizard 6/20 66fabb258cab910d -newDarkWizard 6/21 88b9490f75c860fa -newDarkWizard 6/3 113dc79e4014fcc3 -newDarkWizard 6/4 a0ffa2381be51092 -newDarkWizard 6/5 9ec29badc8f26839 -newDarkWizard 6/6 f397421beed755c7 -newDarkWizard 6/7 adb2b94e30dd04a2 -newDarkWizard 6/8 c47c75543baf26b2 -newDarkWizard 6/9 1b940e2bc46d4234 -newDarkWizard 7/0 ef5fb127cca4a083 -newDarkWizard 7/1 37e821051c13c250 -newDarkWizard 7/10 8c3a3312618a3cc5 -newDarkWizard 7/11 25f8b6517e803260 -newDarkWizard 7/12 ff6c148c51164059 -newDarkWizard 7/13 21c585fa242e4ad9 -newDarkWizard 7/14 6fae6b8cfbfe12ab -newDarkWizard 7/16 dc60a6ff73fa121d -newDarkWizard 7/17 c141025e9d9ac47a -newDarkWizard 7/18 494126351fed901e -newDarkWizard 7/19 acadc250c9d1613c -newDarkWizard 7/2 e8e8ca3a8666e740 -newDarkWizard 7/21 64cb59591b411538 -newDarkWizard 7/22 ad4c1ff6db266fb0 -newDarkWizard 7/24 4825c51649bb186e -newDarkWizard 7/25 2a9255d82cc8f46a -newDarkWizard 7/26 4524887f1e22faa5 -newDarkWizard 7/27 f9c7d1ee315be36e -newDarkWizard 7/28 a68d95081cb2dfdf +newDarkWizard 5/8 65825e94cd70ced8 +newDarkWizard 5/9 dfcd28f0785955a1 +newDarkWizard 6/0 68c59e1a9a3e0112 +newDarkWizard 6/1 65f7216e46deeab0 +newDarkWizard 6/10 4c1c7ea9ccf68929 +newDarkWizard 6/11 aec7ae5f754c9b9c +newDarkWizard 6/12 5a4c6124f38d98e2 +newDarkWizard 6/13 c87c3cc5f276b9a4 +newDarkWizard 6/14 7a5fd05c31595b89 +newDarkWizard 6/15 5d3d6e8268def2f2 +newDarkWizard 6/16 8574d2d35b350133 +newDarkWizard 6/17 b3ffbb749def2a6e +newDarkWizard 6/18 1dad3e7e9360f174 +newDarkWizard 6/19 e40633d841e75d14 +newDarkWizard 6/2 f4b7db2d45025015 +newDarkWizard 6/20 a949c726e570bc6b +newDarkWizard 6/21 d799776a0921ef78 +newDarkWizard 6/3 7443df0a1e0e0759 +newDarkWizard 6/4 ee7da1ac0beb7dc2 +newDarkWizard 6/5 11c095ed7d6805cb +newDarkWizard 6/6 9349a45da3018db3 +newDarkWizard 6/7 67860768829553d0 +newDarkWizard 6/8 2710a59a28aaf532 +newDarkWizard 6/9 0141be80a2d0c8d2 +newDarkWizard 7/0 22ca1e5c71f94911 +newDarkWizard 7/1 0c8e60efa7dc5bca +newDarkWizard 7/10 8befbc4a31c15e55 +newDarkWizard 7/11 f537b775f4afae9e +newDarkWizard 7/12 99f5d270347fe8e3 +newDarkWizard 7/13 8b31a01b5b711ae1 +newDarkWizard 7/14 a0671cb61b8af123 +newDarkWizard 7/16 97b9cfaa02326631 +newDarkWizard 7/17 15e6355e080fa2d8 +newDarkWizard 7/18 48305438c1012ad2 +newDarkWizard 7/19 97c3098bf9411d1e +newDarkWizard 7/2 0c7bd16762a63d7c +newDarkWizard 7/21 8b0eed36e8888430 +newDarkWizard 7/22 3d3d29a43e89cd52 +newDarkWizard 7/24 fa74967d7c157b3c +newDarkWizard 7/25 dd386dbf53ef1fd2 +newDarkWizard 7/26 a191ef693c58aecf +newDarkWizard 7/27 73620347bb11d288 +newDarkWizard 7/28 52a5696e0d8a1ea9 newDarkWizard 7/29 cf4e87425c2df33f -newDarkWizard 7/3 e2335037f06ecd25 +newDarkWizard 7/3 485e38a59c1257b1 newDarkWizard 7/30 274d25e128d311a0 newDarkWizard 7/31 d92f4978bb0d2eca newDarkWizard 7/33 298d6e05800cba71 @@ -1652,62 +1652,62 @@ newDarkWizard 7/34 ea75f21516261332 newDarkWizard 7/35 dff5c7b1898cab27 newDarkWizard 7/36 1bd5d9091c873671 newDarkWizard 7/38 e7e222c629683cea -newDarkWizard 7/39 966632cc500cb22e -newDarkWizard 7/4 803b3f7e6f85fdd8 -newDarkWizard 7/40 241a57167bf3f993 -newDarkWizard 7/41 706af466b7a2892a +newDarkWizard 7/39 db25ed3813eb2ee2 +newDarkWizard 7/4 1114f65fff2f8ae2 +newDarkWizard 7/40 26966f2207cf61bf +newDarkWizard 7/41 b0486266d2d4589a newDarkWizard 7/42 81ed002b5927a30e newDarkWizard 7/43 37db8ecf80048d03 newDarkWizard 7/44 2e31e2d6b307c50e newDarkWizard 7/45 c2f1d281021d4569 newDarkWizard 7/46 fa86593600d64dc1 newDarkWizard 7/49 d8665a84e825aa27 -newDarkWizard 7/5 168cd38ae273c044 +newDarkWizard 7/5 2d3d53264ca0ec4e newDarkWizard 7/50 d54ded5a586c3d1a newDarkWizard 7/51 ac4a560d4b26da00 newDarkWizard 7/52 3def649034cbb1be -newDarkWizard 7/59 e0301c3aacb6db8f -newDarkWizard 7/6 4da99b741cc6df01 +newDarkWizard 7/59 2c823da755efba95 +newDarkWizard 7/6 bede65933466c623 newDarkWizard 7/60 641a4029b6ce2dcc newDarkWizard 7/61 f9dfc5655778f0f4 -newDarkWizard 7/62 c388010873fb3765 -newDarkWizard 7/63 d1995acb4dcae717 -newDarkWizard 7/64 f11113ec0491f0d0 -newDarkWizard 7/65 c8ca8193620a600a -newDarkWizard 7/66 0464c952147822a2 -newDarkWizard 7/67 76bcb036f58fc597 -newDarkWizard 7/68 ed9316992889b7ef -newDarkWizard 7/69 68788a6e6ba0d284 -newDarkWizard 7/7 acf7750dee59b3a4 -newDarkWizard 7/70 f530299ed2c0be49 -newDarkWizard 7/72 0b2449ef2a8d9664 +newDarkWizard 7/62 8a94d65e2b9d98cf +newDarkWizard 7/63 2735a334a2660c33 +newDarkWizard 7/64 195df277a922a6b6 +newDarkWizard 7/65 e3389abf5e0e7e48 +newDarkWizard 7/66 b67409a53ccee2a6 +newDarkWizard 7/67 ad3d28b9760c264f +newDarkWizard 7/68 3fb342c25cc5e057 +newDarkWizard 7/69 e7bf5c4fff9660aa +newDarkWizard 7/7 a3310d97b071251e +newDarkWizard 7/70 669b388ab3f204d7 +newDarkWizard 7/72 71eb24d4d51fc3cc newDarkWizard 7/73 581db1ab500e886c -newDarkWizard 7/8 3a125a7bd5083c64 -newDarkWizard 7/9 2c812669875bff56 -newDarkWizard 8/0 66eb6d2c41edc5bf -newDarkWizard 8/1 84c36cca1eb7343f -newDarkWizard 8/10 ceac25db748515ed -newDarkWizard 8/11 78b7d2d7d2eb009c -newDarkWizard 8/12 96e6f054c2daa13d -newDarkWizard 8/13 c23eaeb22ca37cff -newDarkWizard 8/14 d9ca447136aacd5e -newDarkWizard 8/15 a550a3ae072f71ef -newDarkWizard 8/16 c4c8c966d9779755 -newDarkWizard 8/17 8c61b15879e8aa2b -newDarkWizard 8/18 67785a47d45c7de4 -newDarkWizard 8/19 6dffd304f2ce4729 -newDarkWizard 8/2 f07ccd13567b7222 -newDarkWizard 8/20 d0ab98121e076676 -newDarkWizard 8/21 3ef04764d06f722c -newDarkWizard 8/22 86f216ea317881f6 -newDarkWizard 8/23 f03194eeb9ee0da6 -newDarkWizard 8/24 ce0bce6023dd07fa -newDarkWizard 8/25 f9c772a1fa403fbb -newDarkWizard 8/26 fcfd866e17e1d054 -newDarkWizard 8/27 ee02d00a1f3f3888 -newDarkWizard 8/28 5b7bb653729442d0 +newDarkWizard 7/8 8e853fa4791665c2 +newDarkWizard 7/9 b13aa7f794c4a120 +newDarkWizard 8/0 96d6c1be63ba44a3 +newDarkWizard 8/1 0b9b164d7e9d260f +newDarkWizard 8/10 c7674002a7b058db +newDarkWizard 8/11 04e9d9af4f388728 +newDarkWizard 8/12 bad0e1ad0f4852ef +newDarkWizard 8/13 46c2a8fc149b1b39 +newDarkWizard 8/14 b5abee5bb8a0579c +newDarkWizard 8/15 5976acfed6f63627 +newDarkWizard 8/16 be61aa22689c68a7 +newDarkWizard 8/17 ae99696539eca153 +newDarkWizard 8/18 aa8c5db6f73a9500 +newDarkWizard 8/19 ed35f50514e2c02d +newDarkWizard 8/2 2cc7debeda05333a +newDarkWizard 8/20 f2a726e5f345b28a +newDarkWizard 8/21 03c0dc8938fc136e +newDarkWizard 8/22 124b1c604fd170fa +newDarkWizard 8/23 c8b1649a027aa03c +newDarkWizard 8/24 31449ac6ef351bcc +newDarkWizard 8/25 6dbbb6c6a05c0ad7 +newDarkWizard 8/26 13fb88158886117c +newDarkWizard 8/27 ccd0ba1ecfe76e3e +newDarkWizard 8/28 159b11d728f51c10 newDarkWizard 8/29 74264655c1072037 -newDarkWizard 8/3 e5ec940ce932c5c3 +newDarkWizard 8/3 4bd6106f89e31a0b newDarkWizard 8/30 3682249b20d2a572 newDarkWizard 8/31 19ec050029e2424b newDarkWizard 8/32 41dfd76f6454dec4 @@ -1717,10 +1717,10 @@ newDarkWizard 8/35 cacc942650286a28 newDarkWizard 8/36 b727c697f4970f23 newDarkWizard 8/37 8fa96b056018edaa newDarkWizard 8/38 c074401e609f31fa -newDarkWizard 8/39 09f9edad9426d3c2 -newDarkWizard 8/4 dd9b7334f88408ad -newDarkWizard 8/40 aa03cfb375591591 -newDarkWizard 8/41 48e279946b98ce89 +newDarkWizard 8/39 a381cc790228ea56 +newDarkWizard 8/4 7f09ed44b2d27a5f +newDarkWizard 8/40 f72ec80ea2ea9ff9 +newDarkWizard 8/41 bdba5afd0d89eb4b newDarkWizard 8/42 3ee1f63c952e7cf8 newDarkWizard 8/43 c7b743f2c4d02c2c newDarkWizard 8/44 346de7fa1524b3ef @@ -1729,53 +1729,53 @@ newDarkWizard 8/46 79f472a49483bd60 newDarkWizard 8/47 ea97dac979cb4079 newDarkWizard 8/48 ca897bf0af4d3ff5 newDarkWizard 8/49 8139ca9582457495 -newDarkWizard 8/5 93dba74f903981fd +newDarkWizard 8/5 0093c674585e8815 newDarkWizard 8/50 2ce4f346fe5cf1ed newDarkWizard 8/51 f2b376a9b28bde88 newDarkWizard 8/52 8be567f6fe5e9cae -newDarkWizard 8/59 b532a3f518b62e0b -newDarkWizard 8/6 7c71f5d5b9cd0f05 +newDarkWizard 8/59 a951f3866031fa43 +newDarkWizard 8/6 3507b69131b81d35 newDarkWizard 8/60 014f6ce48b449a1c newDarkWizard 8/61 d12c91820ca52b87 -newDarkWizard 8/62 9627bd69888ded1a -newDarkWizard 8/63 159d7fbed56a8edb -newDarkWizard 8/64 b9a16feb4ba8e6f9 -newDarkWizard 8/65 7bb3d1cef31245a5 -newDarkWizard 8/66 3450a0f9e85d0218 -newDarkWizard 8/67 02aa21390c636d62 -newDarkWizard 8/68 4d1e3edf890e2ae3 -newDarkWizard 8/69 0a48e8d79eb2b70e -newDarkWizard 8/7 3b25850f93735a0b -newDarkWizard 8/70 0daa64b73cc3a1a7 -newDarkWizard 8/71 4391e9866d7e0496 -newDarkWizard 8/72 cf2448916aa6f444 +newDarkWizard 8/62 cf84eded934e64b8 +newDarkWizard 8/63 871bdee997bde8f1 +newDarkWizard 8/64 72eb87e44a71f577 +newDarkWizard 8/65 7c504189139a0b61 +newDarkWizard 8/66 42cb650b234a92f2 +newDarkWizard 8/67 aa21c83c6cb9d63c +newDarkWizard 8/68 649cbd5baa8654bf +newDarkWizard 8/69 f5cf2c9b46667aa4 +newDarkWizard 8/7 f4133858c4959e8f +newDarkWizard 8/70 d61a02a85d024623 +newDarkWizard 8/71 6882af1fe15d33ec +newDarkWizard 8/72 fca4d40b0c6f2a04 newDarkWizard 8/73 27b82d0a299bf2ea -newDarkWizard 8/8 2ef582a7cab75d5a -newDarkWizard 8/9 8257d4f8f343b7dc -newDarkWizard 9/0 63010208ce9c3808 -newDarkWizard 9/1 52acf0207fd79f37 -newDarkWizard 9/10 0058ce1f9ba438e1 -newDarkWizard 9/11 dbef93d07c4db055 -newDarkWizard 9/12 e29816baac8df57b -newDarkWizard 9/13 d7b0bf1907027265 -newDarkWizard 9/14 cb5850ae4ff2baab -newDarkWizard 9/15 83d3950e4d89a04e -newDarkWizard 9/16 f3b42e38b538fb53 -newDarkWizard 9/17 ec0dadd709cd4ce9 -newDarkWizard 9/18 d93731eefe2200f4 -newDarkWizard 9/19 c111b4589e7747f7 -newDarkWizard 9/2 4e6bf17d81e9400f -newDarkWizard 9/20 b3e65983c5fce370 -newDarkWizard 9/21 d8c402fa3489a4ee -newDarkWizard 9/22 e83987be9226cfb3 -newDarkWizard 9/23 83a9e9f54596a983 -newDarkWizard 9/24 62558053fd217f4d -newDarkWizard 9/25 f47b7303e9a5a93b -newDarkWizard 9/26 b78297594730c76b -newDarkWizard 9/27 329c768ccae757a9 -newDarkWizard 9/28 dc36cbd9c7f2d718 +newDarkWizard 8/8 35d66ed90c9b8062 +newDarkWizard 8/9 b327ef2f4e2a3638 +newDarkWizard 9/0 86a60bef3926df12 +newDarkWizard 9/1 86316444f09d7311 +newDarkWizard 9/10 72203be5f7d0ed99 +newDarkWizard 9/11 021fa8a6b728e897 +newDarkWizard 9/12 f3a7b61629e838f3 +newDarkWizard 9/13 9cd9f835629f447d +newDarkWizard 9/14 2e09b772de19054b +newDarkWizard 9/15 432ef607bbe3ffd2 +newDarkWizard 9/16 57c40abfac86a0d9 +newDarkWizard 9/17 9e5b099d11b0f9e3 +newDarkWizard 9/18 859b2e202a5cf2a6 +newDarkWizard 9/19 b659175554490739 +newDarkWizard 9/2 e3a19a1cfbf345c7 +newDarkWizard 9/20 9bd509868e4dc7ca +newDarkWizard 9/21 ae922c7296dcfab4 +newDarkWizard 9/22 1fd997cc7b2e0fab +newDarkWizard 9/23 3ad0095d3bbae1f3 +newDarkWizard 9/24 2f4d27f895a25343 +newDarkWizard 9/25 c443fd83d12f1a53 +newDarkWizard 9/26 c9047ce32d16440b +newDarkWizard 9/27 eb93dfcb618028d5 +newDarkWizard 9/28 3dc685c0a6d36fc4 newDarkWizard 9/29 6c1a1f418620e122 -newDarkWizard 9/3 4af91b0b775e707c +newDarkWizard 9/3 ca01b7b237f61204 newDarkWizard 9/30 d96827c29030a21d newDarkWizard 9/31 6a79d10cce66ff42 newDarkWizard 9/32 54beead2ae8d9dbb @@ -1785,10 +1785,10 @@ newDarkWizard 9/35 e83de520a5537c25 newDarkWizard 9/36 2a68714b7472dee1 newDarkWizard 9/37 a03f02a60d39b5dc newDarkWizard 9/38 629318b53c2f6c72 -newDarkWizard 9/39 abf962f88ed5385a -newDarkWizard 9/4 5a36ef2a91f4569d -newDarkWizard 9/40 fbec396b7a98b2be -newDarkWizard 9/41 67893b5326b0654a +newDarkWizard 9/39 b0104e504c726fb0 +newDarkWizard 9/4 9aa566d0c5f56b1d +newDarkWizard 9/40 4aaaed8fa7871156 +newDarkWizard 9/41 a314486432e65926 newDarkWizard 9/42 e8c9e9988a1fa238 newDarkWizard 9/43 24de9eae44e3e7a7 newDarkWizard 9/44 374d12ba5f804591 @@ -1797,26 +1797,26 @@ newDarkWizard 9/46 cd0e3db370f1194e newDarkWizard 9/47 0edb9fe59d725936 newDarkWizard 9/48 0e7f7c0c96323ed7 newDarkWizard 9/49 da60d51959bb9a25 -newDarkWizard 9/5 631c2d9a6fb90148 +newDarkWizard 9/5 93910bcb04435190 newDarkWizard 9/50 a9161171d931f6f7 newDarkWizard 9/51 c6c6c7c37e7e2bdd newDarkWizard 9/52 70896ec29e033c00 -newDarkWizard 9/59 39f7716a2f679881 -newDarkWizard 9/6 e45442eabe74f995 +newDarkWizard 9/59 eb5d902ea495bb99 +newDarkWizard 9/6 03ed69c2c98d7eff newDarkWizard 9/60 fafb26d9e213d13e newDarkWizard 9/61 be82f20f4e1a2e2c -newDarkWizard 9/62 413d69f6fbda0ce9 -newDarkWizard 9/63 913a47dadb641d26 -newDarkWizard 9/64 ff7ebd06ba062f40 -newDarkWizard 9/65 41ec739be0806291 -newDarkWizard 9/66 1a9e345e9b2b4138 -newDarkWizard 9/67 1462dffdd7878c97 -newDarkWizard 9/68 d93bb8c8c81c4bf6 -newDarkWizard 9/69 f8feed6eb33acd15 -newDarkWizard 9/7 7fe358faf23d350e -newDarkWizard 9/70 5c8dde488cb428f5 -newDarkWizard 9/71 94a4f338f7fa18f2 -newDarkWizard 9/72 124a62de6cd3c287 +newDarkWizard 9/62 cea57b86bf93603b +newDarkWizard 9/63 5b32392dd9669c4e +newDarkWizard 9/64 a58c36a2e4fccb1e +newDarkWizard 9/65 f9b3462b4bd8020b +newDarkWizard 9/66 60c02ae8dd5e0e90 +newDarkWizard 9/67 d2494034752d3e5b +newDarkWizard 9/68 486292bc78b9727a +newDarkWizard 9/69 8fa6bd278e1c870b +newDarkWizard 9/7 2cb745d264c4eb1c +newDarkWizard 9/70 4aa1dbea08f86ebb +newDarkWizard 9/71 c20ef2162bf78fc8 +newDarkWizard 9/72 36b7046a642e7967 newDarkWizard 9/73 4749bcbd09155197 -newDarkWizard 9/8 82eb2ab66a2430e2 -newDarkWizard 9/9 01e259c1cd35ae57 +newDarkWizard 9/8 e4e253d74adf3b40 +newDarkWizard 9/9 a3b8c2aca46c1cdd diff --git a/tests/data/test_item_option_slots.cpp b/tests/data/test_item_option_slots.cpp index 0fa6840b4b..35047a9059 100644 --- a/tests/data/test_item_option_slots.cpp +++ b/tests/data/test_item_option_slots.cpp @@ -1147,7 +1147,8 @@ std::array AddedStats(const ITEM& worn) } // namespace // The ancient bonus of an item of a set raises the stat of its attackType (1 strength, 2 agility, 3 energy, 4 -// vitality) by 5 at bonus level 1 and 10 at level 2, for every item that has one; a broken item adds nothing. +// vitality) by 5 at bonus level 1 and 10 at level 2 and above, for every item that has one; a broken item adds +// nothing. TEST_CASE("Every ancient item's bonus raises the stat of its attackType [data][items]") { ClientDataScope client(ClientDirectory); @@ -1172,10 +1173,10 @@ TEST_CASE("Every ancient item's bonus raises the stat of its attackType [data][i } ++itemsPerStat[static_cast(attackType - 1)]; someAncientItem = type; - for (int level = 1; level <= 2; ++level) + for (int level = 1; level <= 3; ++level) { std::array expected{}; - expected[static_cast(attackType - 1)] = 5 * level; + expected[static_cast(attackType - 1)] = 5 * std::min(level, 2); CAPTURE(type); CAPTURE(level); CHECK(AddedStats(MakeAncientItem(type, static_cast(level))) == expected); From 7490683054bed02e75c1f7bab9ad26b3c0309472 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 15:22:51 +0100 Subject: [PATCH 05/17] feat(items): the ancient bonus in data The ancient bonus (+5 / +10 of a stat on an item of an ancient set) moves from code into data, as OpenMU's "Ancient Bonus of Total Strength" and the others: Options/Ancient.json holds four definitions of the new type ancientBonus, each one option without a number, its value list [5, 10] taken at the ancient byte's bonus level (the last entry above it, as the code before counted a level above 2). - Until the item sets link a bonus to each item of a set (phase 10), the item's attackType picks the definition by its name (1 strength, 2 agility, 3 energy, 4 vitality), looked up when the options load; no item links them. - The definition's attribute decides the stat the bonus adds to (totalStrength ... totalVitality, through the effects table); its value list decides how much. - The tooltip line is the definition's text (increaseStrength ... increaseVitality, from the game's texts); the elemental rings and pendants keep their second line in code until the item sets. - The type ancientOption is known to the loader (numbered from 1) for the item sets; no definition has it yet. - Data Checks: no "no item links" warning for the ancient types, a warning for an item that links one, and a warning for an attackType name without an ancientBonus definition. - The tooltip snapshot and every ancient item's stats stay as they were; docs and tests for all of it. --- docs/item-data.md | 54 +++++-- src/bin/Data/Items/Options/Ancient.json | 89 +++++++++++ src/bin/Data/Items/Tooltips/OptionTexts.json | 52 +++++++ .../Data/GameData/ItemData/ItemEnumNames.cpp | 4 +- .../GameData/ItemData/ItemOptionDatabase.cpp | 8 + .../GameData/ItemData/ItemOptionDatabase.h | 16 ++ .../GameData/ItemData/ItemOptionDefinition.h | 7 + .../GameData/ItemData/ItemOptionEffects.cpp | 8 +- .../ItemData/ItemOptionValidation.cpp | 29 +++- .../GameData/ItemData/ItemOptionValidation.h | 8 +- .../GameData/ItemData/ItemOptionsJson.cpp | 7 +- src/source/Engine/Object/ZzzInventory.cpp | 12 +- src/source/Engine/Object/ZzzInventory.h | 4 + src/source/GameLogic/Items/CSItemOption.cpp | 143 +++++------------- src/source/GameLogic/Items/CSItemOption.h | 4 +- src/source/GameLogic/Items/ItemOptions.cpp | 35 ++++- src/source/GameLogic/Items/ItemOptions.h | 16 ++ tests/data/test_item_option_links.cpp | 80 +++++++++- tests/data/test_item_option_slots.cpp | 93 ++++++++++++ tests/data/test_item_options_json.cpp | 64 ++++++++ 20 files changed, 601 insertions(+), 132 deletions(-) create mode 100644 src/bin/Data/Items/Options/Ancient.json diff --git a/docs/item-data.md b/docs/item-data.md index 4c76cd5800..001dd3a6b1 100644 --- a/docs/item-data.md +++ b/docs/item-data.md @@ -180,7 +180,7 @@ variants or option words. An online keyword need not select the same items offli | `excellentBonus` | A fixed excellent bonus of damage and magic power instead of the [item stat file's](#item-stats-by-level) excellent term; left out = the term. The Chaos Dragon Axe has 15, the Chaos Nature Bow 30 and the Chaos Lightning Staff 25. The bmd import keeps it | | `excellentRaisesLevel` | `false`: excellent options do not raise the level requirement by the [item stat file's](#item-stats-by-level) `excellentLevelAdd`. Left out = they do. The shipped data has it on the Dragon Knight, Venom Mist, Sylphid Ray, Volcano, Sunlight and Storm Blitz armour, the Bone Blade, Explosion Blade, Soleil Scepter, Sylph Wind Bow, Grand Viper Staff and Storm Blitz Stick, the lucky items and the Horn of Fenrir. The bmd import keeps it | | `defense`, `magicDefense`, `blockRate` | Armor and shield values | -| `attackType` | Attack type used by the client | +| `attackType` | Which [ancient bonus](#item-options) an item of an ancient set has: 1 strength, 2 agility, 3 energy, 4 vitality, until the item sets link one | | `sellValue` | Value factor used by the price calculation of some items | | `buyPrice` | Fixed price; when set, it replaces the calculated price | | `requirements` | `level`, `strength`, `dexterity`, `energy`, `vitality`, `leadership`. The stat requirements of the orbs, crystals and scrolls (groups 12 and 15, without a slot) are the values the game asks for, as OpenMU stores them: their profiles keep them as they are. The original client's bmd files hold weights for them, which Import from bmd turns into the values and Export as bmd and Export as S6E3 turn back (the smallest weight that gives each value). Which ones convert follows the item's profile: a requirement it keeps as it is while the default grows it (an orb given the default profile holds weights like any item) | @@ -927,11 +927,12 @@ definitions: the files of `Data/Items/Options` hold the definitions, one file per option group, and each item names the ones it can have in its `options` list. Which of them an item has comes from the server: its item data turns them on (luck by the luck flag, the additional option by its -level, the excellent options by the excellent byte). Luck, the additional -option of the items that are no wings and the excellent options are in data +level, the excellent options by the excellent byte, the ancient bonus by +the ancient byte's bonus level). Luck, the additional option of the items +that are no wings, the excellent options and the ancient bonus are in data so far; the wings' and the Horn of Dinorant's options, the Wizard's rings', -the harmony, guardian, socket and pet options and the ancient bonus are -still code and move into data one group at a time. +the harmony, guardian, socket and pet options and the ancient set options +are still code and move into data one group at a time. ```json { @@ -959,9 +960,13 @@ still code and move into data one group at a time. low four bits, 1 to 15; Season 6 sends 1 to 4), its options numbered (`"number": 0`) by the option type the server sends in the byte's high four bits, their value by that level; `excellent` is the excellent byte, - its options numbered 1 to 6, each turned on by the byte's bit number - 1. - Each option group brings its type when it moves into data. An item links - at most one definition of a type. + its options numbered 1 to 6, each turned on by the byte's bit number - 1; + `ancientBonus` is the ancient byte's bonus level (its high four bits), + with one option without a number, its value by that level; + `ancientOption` is an ancient set's options, numbered from 1 (no + definition has it yet: the item sets bring them). Each option group + brings its type when it moves into data. An item links at most one + definition of a type. - `displayName`: the definition's name by language, English first. - `openMu` and `server`: OpenMU's labels of the same definition (its GUID and its English name, which the exchange with the server will match by) @@ -1058,6 +1063,26 @@ cent (what wear takes off the stats) reads it only for weapons, shields and armour, whose byte holds excellent options; wings pass no excellent flags to it. +`Options/Ancient.json` holds the ancient bonus, as OpenMU's "Ancient Bonus +of Total Strength" and the others: an item of an ancient set raises a stat +by its bonus level, +5 at level 1 and +10 at level 2. + +| Name | Attribute | Value | `attackType` | +|---|---|---|---| +| `ancientBonusStrength` | `totalStrength` | `[5, 10]` | 1 | +| `ancientBonusAgility` | `totalAgility` | `[5, 10]` | 2 | +| `ancientBonusEnergy` | `totalEnergy` | `[5, 10]` | 3 | +| `ancientBonusVitality` | `totalVitality` | `[5, 10]` | 4 | + +No item links them: until the item sets link a bonus to each item of a +set, the item's `attackType` picks the definition by these names (the last +column), as the code before them picked the stat. The attribute decides the +stat the bonus adds to (strength, agility, energy, vitality; another one +adds nothing), and the value list its value; a bonus level above the list +takes its last entry (servers send 1 and 2; the ancient byte holds up to +15). The elemental rings and pendants keep their second line, +"Increase Attribute Damage", in code until the item sets. + `Tooltips/OptionTexts.json` holds the lines' texts: ```json @@ -1189,8 +1214,9 @@ an option without `attribute` or with none or more than one of `add`, 0 to 65535 or that has `perLevel`, a term (`per`) without `attribute` or without exactly one of `times` and `divisor` (whole numbers from 1), a number used twice in a definition, an additional option's number above 15, -an excellent option's number outside 1 to 6, a luck definition with more -than one option or a numbered one, OpenMU +an excellent option's number outside 1 to 6, an ancient set option's +number below 1, a luck or ancient bonus definition with more than one +option or a numbered one, OpenMU labels or server values of the wrong kind, and a rule naming a definition that does not exist or a condition it does not have. Errors: an item linking a definition that does not exist (the link is left out) @@ -1204,8 +1230,12 @@ unknown fields, an attribute the client does not compute, a term on a hero attribute the client does not read, a text with `{divisor}` on an option without a term that has a divisor (the line shows 0 there) or with several (it shows the first one's), a definition no -item and no rule links, a text no option names and a text in a language -the game has no texts in. +item and no rule links (but the ancient bonus and set options, which the +item's `attackType` and the item sets give), an item linking an ancient +bonus or set options (the link does nothing), an ancient bonus name +`attackType` picks that no `ancientBonus` definition has (those items show +and add no bonus), a text no option names and a text in a language the +game has no texts in. --- diff --git a/src/bin/Data/Items/Options/Ancient.json b/src/bin/Data/Items/Options/Ancient.json new file mode 100644 index 0000000000..81b805696a --- /dev/null +++ b/src/bin/Data/Items/Options/Ancient.json @@ -0,0 +1,89 @@ +{ + "formatVersion": 1, + "definitions": [ + { + "name": "ancientBonusStrength", + "type": "ancientBonus", + "displayName": { + "en": "Ancient bonus: strength", + "de": "Antiker Bonus: Stärke", + "es": "Bonificación antigua: fuerza", + "id": "Bonus kuno: kekuatan", + "ja": "エンシェントボーナス:力", + "pl": "Starożytny bonus: siła", + "pt": "Bônus ancestral: força", + "ru": "Древний бонус: сила", + "tl": "Sinaunang bonus: lakas", + "uk": "Стародавній бонус: сила", + "zh-TW": "遠古加成:力量" + }, + "openMu": {"id": "00000083-0030-09a3-0000-000000000000", "name": "Ancient Bonus of Total Strength"}, + "options": [ + {"attribute": "totalStrength", "add": {"values": [5, 10]}, "text": "increaseStrength"} + ] + }, + { + "name": "ancientBonusAgility", + "type": "ancientBonus", + "displayName": { + "en": "Ancient bonus: agility", + "de": "Antiker Bonus: Beweglichkeit", + "es": "Bonificación antigua: agilidad", + "id": "Bonus kuno: kelincahan", + "ja": "エンシェントボーナス:敏捷", + "pl": "Starożytny bonus: zwinność", + "pt": "Bônus ancestral: agilidade", + "ru": "Древний бонус: ловкость", + "tl": "Sinaunang bonus: liksi", + "uk": "Стародавній бонус: спритність", + "zh-TW": "遠古加成:敏捷" + }, + "openMu": {"id": "00000083-0030-1207-0000-000000000000", "name": "Ancient Bonus of Total Agility"}, + "options": [ + {"attribute": "totalAgility", "add": {"values": [5, 10]}, "text": "increaseAgility"} + ] + }, + { + "name": "ancientBonusEnergy", + "type": "ancientBonus", + "displayName": { + "en": "Ancient bonus: energy", + "de": "Antiker Bonus: Energie", + "es": "Bonificación antigua: energía", + "id": "Bonus kuno: energi", + "ja": "エンシェントボーナス:エナジー", + "pl": "Starożytny bonus: energia", + "pt": "Bônus ancestral: energia", + "ru": "Древний бонус: энергия", + "tl": "Sinaunang bonus: enerhiya", + "uk": "Стародавній бонус: енергія", + "zh-TW": "遠古加成:能量" + }, + "openMu": {"id": "00000083-0030-6b45-0000-000000000000", "name": "Ancient Bonus of Total Energy"}, + "options": [ + {"attribute": "totalEnergy", "add": {"values": [5, 10]}, "text": "increaseEnergy"} + ] + }, + { + "name": "ancientBonusVitality", + "type": "ancientBonus", + "displayName": { + "en": "Ancient bonus: vitality", + "de": "Antiker Bonus: Vitalität", + "es": "Bonificación antigua: vitalidad", + "id": "Bonus kuno: vitalitas", + "ja": "エンシェントボーナス:体力", + "pl": "Starożytny bonus: witalność", + "pt": "Bônus ancestral: vitalidade", + "ru": "Древний бонус: выносливость", + "tl": "Sinaunang bonus: tibay", + "uk": "Стародавній бонус: витривалість", + "zh-TW": "遠古加成:體力" + }, + "openMu": {"id": "00000083-0030-76e4-0000-000000000000", "name": "Ancient Bonus of Total Vitality"}, + "options": [ + {"attribute": "totalVitality", "add": {"values": [5, 10]}, "text": "increaseVitality"} + ] + } + ] +} diff --git a/src/bin/Data/Items/Tooltips/OptionTexts.json b/src/bin/Data/Items/Tooltips/OptionTexts.json index b5c8ad659d..b55e9a0dd7 100644 --- a/src/bin/Data/Items/Tooltips/OptionTexts.json +++ b/src/bin/Data/Items/Tooltips/OptionTexts.json @@ -118,6 +118,19 @@ "uk": "Відмінний рівень шкоди +{value}%", "zh-TW": "優 破損率+{value}%" }, + "increaseAgility": { + "en": "Increase agility +{value}", + "de": "Beweglichkeit erhöhen +{value}", + "es": "Aumentar la agilidad +{value}", + "id": "Meningkatkan kelincahan +{value}", + "ja": "敏捷増加 +{value}", + "pl": "Zwiększa zwinność +{value}", + "pt": "Aumente a agilidade +{value}", + "ru": "Увеличение ловкости +{value}", + "tl": "Dagdagan ang liksi +{value}", + "uk": "Збільшення спритності +{value}", + "zh-TW": "增加敏捷性+{value}" + }, "increaseAttackSpeed": { "en": "Increase Attacking(Wizardry)speed +{value}", "de": "Erhöht Angriffsgeschwindigkeit (Zauberei) +{value}", @@ -157,6 +170,19 @@ "uk": "Збільшення шкоди +{value}%", "zh-TW": "增加傷害+{value}%" }, + "increaseEnergy": { + "en": "Increase energy +{value}", + "de": "Energie erhöhen +{value}", + "es": "Aumentar energía +{value}", + "id": "Meningkatkan energi +{value}", + "ja": "エナジー増加 +{value}", + "pl": "Zwiększa energię +{value}", + "pt": "Aumentar energia +{value}", + "ru": "Увеличение энергии +{value}", + "tl": "Dagdagan ang enerhiya +{value}", + "uk": "Збільшити енергію +{value}", + "zh-TW": "增加能量+{value}" + }, "increaseMaxHp": { "en": "Increase Max HP +{value}%", "de": "Erhöht max. HP +{value}%", @@ -183,6 +209,32 @@ "uk": "Збільшення максимальної мани +{value}%", "zh-TW": "增加最大法力 +{value}%" }, + "increaseStrength": { + "en": "Increase strength +{value}", + "de": "Stärke erhöhen +{value}", + "es": "Aumentar la fuerza +{value}", + "id": "Meningkatkan kekuatan +{value}", + "ja": "力増加 +{value}", + "pl": "Zwiększa siłę +{value}", + "pt": "Aumentar força +{value}", + "ru": "Увеличение силы +{value}", + "tl": "Dagdagan ang lakas +{value}", + "uk": "Збільшити силу +{value}", + "zh-TW": "增加強度+{value}" + }, + "increaseVitality": { + "en": "Increase stamina +{value}", + "de": "Vitalität erhöhen +{value}", + "es": "Aumentar la resistencia +{value}", + "id": "Meningkatkan stamina +{value}", + "ja": "体力増加 +{value}", + "pl": "Zwiększa wytrzymałość +{value}", + "pt": "Aumenta a resistência +{value}", + "ru": "Увеличение выносливости +{value}", + "tl": "Dagdagan ang tibay +{value}", + "uk": "Підвищення витривалості +{value}", + "zh-TW": "增加體力+{value}" + }, "increaseWizardryLevel20": { "en": "Increase Wizardry Dmg +level/{divisor}", "de": "Erhöht Zaubereischaden +Level/{divisor}", diff --git a/src/source/Data/GameData/ItemData/ItemEnumNames.cpp b/src/source/Data/GameData/ItemData/ItemEnumNames.cpp index d795214c2d..c3721089b4 100644 --- a/src/source/Data/GameData/ItemData/ItemEnumNames.cpp +++ b/src/source/Data/GameData/ItemData/ItemEnumNames.cpp @@ -90,10 +90,12 @@ constexpr std::array, ItemRequirementCount> ItemRequir {ItemRequirement::Leadership, "leadership"}, }}; -constexpr std::array, 3> ItemOptionTypeNames = {{ +constexpr std::array, 5> ItemOptionTypeNames = {{ {ItemOptionType::Luck, "luck"}, {ItemOptionType::Option, "option"}, {ItemOptionType::Excellent, "excellent"}, + {ItemOptionType::AncientOption, "ancientOption"}, + {ItemOptionType::AncientBonus, "ancientBonus"}, }}; constexpr std::array, ItemTextColorCount> ItemTextColorNames = {{ diff --git a/src/source/Data/GameData/ItemData/ItemOptionDatabase.cpp b/src/source/Data/GameData/ItemData/ItemOptionDatabase.cpp index 2b0b72f99c..c7ffb5999f 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionDatabase.cpp +++ b/src/source/Data/GameData/ItemData/ItemOptionDatabase.cpp @@ -46,6 +46,14 @@ ItemOptionDatabase::ItemOptionDatabase(std::vector definit { return definition.options[left].number > definition.options[right].number; }); } } + for (size_t attackType = 0; attackType < AncientBonusNames.size(); ++attackType) + { + const int index = Find(AncientBonusNames[attackType]); + if (index != NoDefinition && m_definitions[static_cast(index)].type == ItemOptionType::AncientBonus) + { + m_ancientBonuses[attackType] = index; + } + } } int ItemOptionDatabase::Find(std::string_view name) const diff --git a/src/source/Data/GameData/ItemData/ItemOptionDatabase.h b/src/source/Data/GameData/ItemData/ItemOptionDatabase.h index d663ac2cdd..860a607816 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionDatabase.h +++ b/src/source/Data/GameData/ItemData/ItemOptionDatabase.h @@ -4,6 +4,7 @@ #include "Data/GameData/ItemData/ItemOptionEffects.h" #include "Data/GameData/ItemData/OptionRule.h" +#include #include #include #include @@ -16,6 +17,10 @@ // options". namespace Data::Items { +// The ancient bonus definitions by the item's attackType 1 to 4, until the item sets link them (phase 10). +constexpr std::array AncientBonusNames = {"ancientBonusStrength", "ancientBonusAgility", + "ancientBonusEnergy", "ancientBonusVitality"}; + // A definition's index, as an item's resolved links hold it. using ItemOptionIndex = std::uint16_t; @@ -61,6 +66,16 @@ class ItemOptionDatabase return m_texts; } + // The ancient bonus definition an item of a set takes by its attackType (1 strength, 2 agility, 3 energy, + // 4 vitality: AncientBonusNames), or NoDefinition. Until the item sets link a bonus to each item of a set (phase + // 10), the item's attackType picks it, as the code before the definitions did; looked up when the options load. + int FindAncientBonus(int attackType) const + { + return attackType >= 1 && attackType <= static_cast(m_ancientBonuses.size()) + ? m_ancientBonuses[static_cast(attackType - 1)] + : NoDefinition; + } + // The option rules; empty in the game, which reads only the items' lists. std::span GetRules() const { @@ -80,6 +95,7 @@ class ItemOptionDatabase std::vector m_definitions; std::vector> m_effects; std::vector> m_optionOrders; + std::array m_ancientBonuses{NoDefinition, NoDefinition, NoDefinition, NoDefinition}; ItemOptionTexts m_texts; std::vector m_rules; }; diff --git a/src/source/Data/GameData/ItemData/ItemOptionDefinition.h b/src/source/Data/GameData/ItemData/ItemOptionDefinition.h index fd2d297e94..c7236e4e07 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionDefinition.h +++ b/src/source/Data/GameData/ItemData/ItemOptionDefinition.h @@ -26,6 +26,13 @@ enum class ItemOptionType : BYTE Option, // The excellent byte (ITEM::ExcellentFlags); its options numbered 1 to 6, each on with the byte's bit number - 1. Excellent, + // An ancient set's options, numbered 1 to n in the order the set gives them. Known to the loader for the item sets + // (phase 10); no definition has it yet. + AncientOption, + // The ancient bonus of an item of a set; one option, its level the ancient byte's bonus level + // (ITEM::AncientBonusOption). Until the item sets link it, the item's attackType picks the definition + // (ItemOptionDatabase::FindAncientBonus). + AncientBonus, }; // An excellent option's number - 1 is its bit of the excellent byte, whose bits 0 to 5 hold them. diff --git a/src/source/Data/GameData/ItemData/ItemOptionEffects.cpp b/src/source/Data/GameData/ItemData/ItemOptionEffects.cpp index 290af9f953..da4fca571c 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionEffects.cpp +++ b/src/source/Data/GameData/ItemData/ItemOptionEffects.cpp @@ -22,7 +22,7 @@ struct EffectRow // (GameLogic::Combat::GetHeroCriticalDamageRate). The additional options write theirs. A magic sword's option // (baseDamageBonus) is one slot, AT_IMPROVE_DAMAGE, as before, which the stat code adds to the wizardry damage too; // its definition shows two lines. -constexpr std::array EffectRows = {{ +constexpr std::array EffectRows = {{ {ItemOptionType::Luck, "criticalDamageChance", ItemOptionAdd::Percent, {AT_LUCK, true}}, {ItemOptionType::Option, "physicalBaseDmg", ItemOptionAdd::Add, {AT_IMPROVE_DAMAGE, true}}, {ItemOptionType::Option, "baseDamageBonus", ItemOptionAdd::Add, {AT_IMPROVE_DAMAGE, true, true}}, @@ -50,6 +50,12 @@ constexpr std::array EffectRows = {{ {ItemOptionType::Excellent, "attackSpeedAny", ItemOptionAdd::Add, {AT_IMPROVE_ATTACK_SPEED, true}}, {ItemOptionType::Excellent, "healthAfterMonsterKillMultiplier", ItemOptionAdd::Add, {AT_IMPROVE_GAIN_LIFE, false}}, {ItemOptionType::Excellent, "manaAfterMonsterKillMultiplier", ItemOptionAdd::Add, {AT_IMPROVE_GAIN_MANA, false}}, + // The ancient bonus raises a stat, as the set options do: the stat code adds its value at the item's bonus level + // (CSItemOption::getAllAddState). It takes no option slot. + {ItemOptionType::AncientBonus, "totalStrength", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_STRENGTH, true}}, + {ItemOptionType::AncientBonus, "totalAgility", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_DEXTERITY, true}}, + {ItemOptionType::AncientBonus, "totalEnergy", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_ENERGY, true}}, + {ItemOptionType::AncientBonus, "totalVitality", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_VITALITY, true}}, }}; } // namespace diff --git a/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp b/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp index ba262efe84..b27d4bad9d 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp +++ b/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp @@ -16,6 +16,12 @@ namespace { constexpr const char* OptionsField = "options"; +// The types the item sets give an item (phase 10), which no item links. +bool IsAncientType(ItemOptionType type) +{ + return type == ItemOptionType::AncientOption || type == ItemOptionType::AncientBonus; +} + // A definition's problems name its file in Data/Items/Options and its place there. std::string DefinitionField(std::span definitions, size_t index) { @@ -186,6 +192,15 @@ void ValidateItemOptionLinks(std::span items, const ItemOp "links excellent options, but its excellent byte holds its wing options or a horn's kind, " "or nothing: no horn is excellent"}); } + // Until the item sets link them (phase 10), the item's attackType picks its ancient bonus and set options. + const bool linksAncient = std::any_of(links.begin(), links.end(), [&options](ItemOptionIndex link) + { return IsAncientType(options.Get(link).type); }); + if (linksAncient) + { + issues.push_back({ItemDataIssueSeverity::Warning, "", item.group, item.number, OptionsField, + "links an ancient bonus or set options, which the item sets give: the link does " + "nothing, the item's attackType picks its ancient bonus"}); + } } } @@ -207,7 +222,8 @@ void ValidateOptionDefinitionUse(std::span items, const It const std::span definitions = options.GetDefinitions(); for (size_t index = 0; index < definitions.size(); ++index) { - if (!linked.contains(definitions[index].name)) + // The item's attackType links the ancient bonus definitions, the item sets will link both ancient types. + if (!linked.contains(definitions[index].name) && !IsAncientType(definitions[index].type)) { issues.push_back({ItemDataIssueSeverity::Warning, DefinitionSource(definitions[index]), ItemDataIssue::NoItem, ItemDataIssue::NoItem, @@ -215,5 +231,16 @@ void ValidateOptionDefinitionUse(std::span items, const It "no item and no option rule links \"" + definitions[index].name + "\""}); } } + for (size_t attackType = 0; attackType < AncientBonusNames.size(); ++attackType) + { + if (options.FindAncientBonus(static_cast(attackType) + 1) == ItemOptionDatabase::NoDefinition) + { + issues.push_back( + {ItemDataIssueSeverity::Warning, "Options", ItemDataIssue::NoItem, ItemDataIssue::NoItem, "definitions", + "no definition of type ancientBonus is named \"" + std::string(AncientBonusNames[attackType]) + + "\": the ancient items with attackType " + std::to_string(attackType + 1) + + " show and add no ancient bonus"}); + } + } } } // namespace Data::Items diff --git a/src/source/Data/GameData/ItemData/ItemOptionValidation.h b/src/source/Data/GameData/ItemData/ItemOptionValidation.h index 20eccc44d2..fde244c355 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionValidation.h +++ b/src/source/Data/GameData/ItemData/ItemOptionValidation.h @@ -23,13 +23,15 @@ void ValidateItemOptions(std::span definitions, cons void ValidateOptionRules(std::span rules, std::span definitions, const std::string& source, std::vector& issues); -// The items' links: a name of no definition (an error: the link is left out), and two definitions whose options the -// same part of the server's item data turns on (an error: the later one is left out). +// The items' links: a name of no definition (an error: the link is left out), two definitions whose options the +// same part of the server's item data turns on (an error: the later one is left out), excellent options on wings and +// horns (an error), and an ancient bonus or set options (a warning: the item sets give them, not the item's links). void ValidateItemOptionLinks(std::span items, const ItemOptionDatabase& options, std::vector& issues); // A definition neither an item nor a rule of `options` links (a warning; without the rules, as in the game, only the -// items count). +// items count), except the ancient types the item sets give; an ancient bonus name of AncientBonusNames with no +// definition of type ancientBonus (a warning: the items with that attackType show and add no bonus). void ValidateOptionDefinitionUse(std::span items, const ItemOptionDatabase& options, std::vector& issues); } // namespace Data::Items diff --git a/src/source/Data/GameData/ItemData/ItemOptionsJson.cpp b/src/source/Data/GameData/ItemData/ItemOptionsJson.cpp index dc305dbe09..46c6778012 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionsJson.cpp +++ b/src/source/Data/GameData/ItemData/ItemOptionsJson.cpp @@ -62,12 +62,12 @@ const KeySet TermKeys = {Keys::Attribute, Keys::Times, Keys::Divisor}; // option only. bool HasNumbers(ItemOptionType type) { - return type != ItemOptionType::Luck; + return type != ItemOptionType::Luck && type != ItemOptionType::AncientBonus; } bool HasOneOption(ItemOptionType type) { - return type == ItemOptionType::Luck; + return type == ItemOptionType::Luck || type == ItemOptionType::AncientBonus; } bool IsGuid(std::string_view text) @@ -402,7 +402,8 @@ void ItemOptionsReader::ReadNumber(const OrderedJson& json, const std::string& f AddFatal(field + "." + Keys::Number, "missing"); return; } - const int minimum = type == ItemOptionType::Excellent ? 1 : 0; + // Excellent options count from 1 (bit number - 1), an ancient set's options in the order the set gives them. + const int minimum = type == ItemOptionType::Excellent || type == ItemOptionType::AncientOption ? 1 : 0; const int maximum = type == ItemOptionType::Option ? MaxOptionTypeNumber : type == ItemOptionType::Excellent ? MaxExcellentOptionNumber : MaxNumber; diff --git a/src/source/Engine/Object/ZzzInventory.cpp b/src/source/Engine/Object/ZzzInventory.cpp index 49fb643bf0..d01438c0da 100644 --- a/src/source/Engine/Object/ZzzInventory.cpp +++ b/src/source/Engine/Object/ZzzInventory.cpp @@ -1092,9 +1092,15 @@ std::optional WriteDefinitionOptionLines(const ITEM& item, int slot, int te { return std::nullopt; } + return WriteOptionLines(*slotOption->option, GameLogic::Items::GetSlotOptionValue(item, *slotOption), textNum, + rowLimit); +} + +int WriteOptionLines(const Data::Items::ItemOption& option, int value, int textNum, int rowLimit) +{ Engine::Items::OptionLines::LineValues values; - values.value = GameLogic::Items::GetSlotOptionValue(item, *slotOption); - for (const Data::Items::ItemOptionTerm& term : slotOption->option->value.per) + values.value = value; + for (const Data::Items::ItemOptionTerm& term : option.value.per) { if (term.divisor > 0) { @@ -1104,7 +1110,7 @@ std::optional WriteDefinitionOptionLines(const ITEM& item, int slot, int te } const int lastRow = std::min(rowLimit, MaxTextListRows); int row = textNum; - for (const std::string& name : slotOption->option->texts) + for (const std::string& name : option.texts) { if (row < lastRow && Engine::Items::OptionLines::Write(name, values, TextList[row], std::size(TextList[row]))) { diff --git a/src/source/Engine/Object/ZzzInventory.h b/src/source/Engine/Object/ZzzInventory.h index 73de7d6443..b96555ae0c 100644 --- a/src/source/Engine/Object/ZzzInventory.h +++ b/src/source/Engine/Object/ZzzInventory.h @@ -106,6 +106,7 @@ void ClearTooltipRows(); namespace Data::Items { struct ItemDefinition; +struct ItemOption; } struct ItemTooltipValues; @@ -247,6 +248,9 @@ void GetSpecialOptionText(wchar_t* Text, WORD Option, WORD Value, int iMana); // its value, blue and not bold, from row `textNum` on and before row `rowLimit`. The rows written (a text the option // texts lack has none), or nothing for a slot the code wrote, whose line the caller writes (GetSpecialOptionText). std::optional WriteDefinitionOptionLines(const ITEM& item, int slot, int textNum, int rowLimit); +// The tooltip lines of `option` with `value`: its texts, blue and not bold, from row `textNum` on and before row +// `rowLimit`; the rows written. +int WriteOptionLines(const Data::Items::ItemOption& option, int value, int textNum, int rowLimit); // The item's information and repair tooltips, anchored in window pixels: their layout runs in the // screen's 640x480 stretch, the space the original computed it in, whichever window asks. void RenderItemInfoAtPx(float x, float y, const ITEM* ip, bool Sell, int Inventype = 0, diff --git a/src/source/GameLogic/Items/CSItemOption.cpp b/src/source/GameLogic/Items/CSItemOption.cpp index 6c8b3b05c0..65199e9520 100644 --- a/src/source/GameLogic/Items/CSItemOption.cpp +++ b/src/source/GameLogic/Items/CSItemOption.cpp @@ -17,6 +17,7 @@ #include "UI/Core/WindowSystem.h" #include "GameLogic/Skills/SkillManager.h" #include "GameLogic/Items/CSItemOption.h" +#include "GameLogic/Items/ItemOptions.h" #include "I18N/All.h" #include "Render/Text/CUIRenderText.h" @@ -28,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -535,68 +537,6 @@ int CSItemOption::GetMasteryBonus(const SET_SEARCH_RESULT_OPT& set, std::uint8_t return bonus; } -namespace -{ -// The ancient bonus has two levels, as on Season 6 and OpenMU (+5 and +10); a higher level the ancient byte holds counts -// as the second. -constexpr BYTE MaxAncientBonusLevel = 2; - -int GetAncientBonusLevel(const ITEM* ip) -{ - return std::min(ip->AncientBonusOption, MaxAncientBonusLevel); -} -} // namespace - -int CSItemOption::GetDefaultOptionValue(ITEM* ip, std::uint16_t* Value) -{ - if (ip->Type > MAX_ITEM) - { - return -1; - } - - *Value = static_cast(GetAncientBonusLevel(ip)); - - const ITEM_ATTRIBUTE* p = &ItemAttribute[ip->Type]; - - return p->AttType; -} - -bool CSItemOption::GetDefaultOptionText(const ITEM* ip, wchar_t* Text) -{ - if (ip->Type > MAX_ITEM) - { - return false; - } - - if (ip->AncientBonusOption <= 0) - { - return false; - } - - switch (ItemAttribute[ip->Type].AttType) - { - case SET_OPTION_STRENGTH: - mu_swprintf(Text, I18N::Game::IncreaseStrengthD, GetAncientBonusLevel(ip) * 5); - break; - - case SET_OPTION_DEXTERITY: - mu_swprintf(Text, I18N::Game::IncreaseAgilityD, GetAncientBonusLevel(ip) * 5); - break; - - case SET_OPTION_ENERGY: - mu_swprintf(Text, I18N::Game::IncreaseEnergyD, GetAncientBonusLevel(ip) * 5); - break; - - case SET_OPTION_VITALITY: - mu_swprintf(Text, I18N::Game::IncreaseStaminaD, GetAncientBonusLevel(ip) * 5); - break; - - default: - return false; - } - return true; -} - bool CSItemOption::IsNonWeaponSkillOrIsSkillEquipped(ActionSkillType skill) { bool checkForWeaponSkill; @@ -642,13 +582,46 @@ bool CSItemOption::IsNonWeaponSkillOrIsSkillEquipped(ActionSkillType skill) return false; } +namespace +{ +// Adds the item's ancient bonus to the stat its definition's attribute raises (its effect); an attribute the client +// doesn't add adds nothing. +void AddAncientBonus(const ITEM& item, std::uint16_t* strength, std::uint16_t* dexterity, std::uint16_t* energy, + std::uint16_t* vitality) +{ + const std::optional bonus = GameLogic::Items::FindAncientBonus(item); + if (!bonus) + { + return; + } + const auto value = static_cast(bonus->value); + switch (bonus->effect) + { + case AT_SET_OPTION_IMPROVE_STRENGTH: + *strength += value; + break; + case AT_SET_OPTION_IMPROVE_DEXTERITY: + *dexterity += value; + break; + case AT_SET_OPTION_IMPROVE_ENERGY: + *energy += value; + break; + case AT_SET_OPTION_IMPROVE_VITALITY: + *vitality += value; + break; + default: + break; + } +} +} // namespace + int CSItemOption::RenderDefaultOptionText(const ITEM* ip, int TextNum) { int TNum = TextNum; - if (GetDefaultOptionText(ip, TextList[TNum])) + const std::optional bonus = GameLogic::Items::FindAncientBonus(*ip); + if (bonus) { - TextListColor[TNum] = TEXT_COLOR_BLUE; - TNum++; + TNum += WriteOptionLines(*bonus->option, bonus->value, TNum, MaxTextListRows); if ((ip->Type >= ITEM_RING_OF_ICE && ip->Type <= ITEM_RING_OF_POISON) || (ip->Type >= ITEM_PENDANT_OF_LIGHTING && ip->Type <= ITEM_PENDANT_OF_FIRE) || (ip->Type >= ITEM_RING_OF_FIRE && ip->Type <= ITEM_PENDANT_OF_WATER)) { @@ -672,25 +645,7 @@ void CSItemOption::getAllAddState(std::uint16_t* Strength, std::uint16_t* Dexter continue; } - std::uint16_t Result = 0; - switch (GetDefaultOptionValue(item, &Result)) - { - case SET_OPTION_STRENGTH: - *Strength += Result * 5; - break; - - case SET_OPTION_DEXTERITY: - *Dexterity += Result * 5; - break; - - case SET_OPTION_ENERGY: - *Energy += Result * 5; - break; - - case SET_OPTION_VITALITY: - *Vitality += Result * 5; - break; - } + AddAncientBonus(*item, Strength, Dexterity, Energy, Vitality); } AddStatsBySetOptions(Strength, Dexterity, Energy, Vitality, Charisma); @@ -762,25 +717,7 @@ void CSItemOption::getAllAddOptionStatesbyCompare(std::uint16_t* Strength, std:: continue; } - std::uint16_t Result = 0; - switch (GetDefaultOptionValue(item, &Result)) - { - case SET_OPTION_STRENGTH: - *Strength += Result * 5; - break; - - case SET_OPTION_DEXTERITY: - *Dexterity += Result * 5; - break; - - case SET_OPTION_ENERGY: - *Energy += Result * 5; - break; - - case SET_OPTION_VITALITY: - *Vitality += Result * 5; - break; - } + AddAncientBonus(*item, Strength, Dexterity, Energy, Vitality); } AddStatsBySetOptions(Strength, Dexterity, Energy, Vitality, Charisma); diff --git a/src/source/GameLogic/Items/CSItemOption.h b/src/source/GameLogic/Items/CSItemOption.h index b49df59a88..c8ec680caf 100644 --- a/src/source/GameLogic/Items/CSItemOption.h +++ b/src/source/GameLogic/Items/CSItemOption.h @@ -163,8 +163,8 @@ class CSItemOption : public Singleton // `masteryType` (SKILL_ATTRIBUTE::MasteryType, the skill's element). static int GetMasteryBonus(const SET_SEARCH_RESULT_OPT& set, std::uint8_t masteryType); - static int GetDefaultOptionValue(ITEM* ip, std::uint16_t* Value); - static bool GetDefaultOptionText(const ITEM* ip, wchar_t* Text); + // Writes the item's ancient bonus lines from row TextNum on: the texts of its definition (GameLogic::Items:: + // FindAncientBonus) and, for the elemental rings and pendants, "Increase Attribute Damage"; the next free row. static int RenderDefaultOptionText(const ITEM* ip, int TextNum); // The format a set option's value is described with (`option` counts from diff --git a/src/source/GameLogic/Items/ItemOptions.cpp b/src/source/GameLogic/Items/ItemOptions.cpp index 6de0e7e03f..6ab8c2578f 100644 --- a/src/source/GameLogic/Items/ItemOptions.cpp +++ b/src/source/GameLogic/Items/ItemOptions.cpp @@ -66,6 +66,8 @@ bool IsOptionTurnedOn(const ITEM& item, ItemOptionType type, const ItemOption& o case ItemOptionType::Excellent: return IsExcellentBitSet(item.ExcellentFlags, option); case ItemOptionType::Luck: + case ItemOptionType::AncientOption: + case ItemOptionType::AncientBonus: break; } return true; @@ -109,10 +111,19 @@ std::optional FindValidSource(const ITEM& item, int slot) return source; } -// The level the option's value is taken at: the additional option's level, else the constant's. +// The level the option's value is taken at: the additional option's level, the ancient bonus level, else the +// constant's. int GetOptionLevel(const ITEM& item, ItemOptionType type) { - return type == ItemOptionType::Option ? item.OptionLevel : LevelOfTypesWithoutLevels; + switch (type) + { + case ItemOptionType::Option: + return item.OptionLevel; + case ItemOptionType::AncientBonus: + return item.AncientBonusOption; + default: + return LevelOfTypesWithoutLevels; + } } } // namespace @@ -311,6 +322,26 @@ int GetCurrentSlotValue(const ITEM& item, int slot) return item.SpecialValue[slot]; } +std::optional FindAncientBonus(const ITEM& item) +{ + if (item.AncientBonusOption == 0 || item.Type < 0 || item.Type >= MAX_ITEM) + { + return std::nullopt; + } + const Data::Items::ItemOptionDatabase& options = g_ItemDatabase.GetOptions(); + const int index = options.FindAncientBonus(ItemAttribute[item.Type].AttType); + if (index == Data::Items::ItemOptionDatabase::NoDefinition) + { + return std::nullopt; + } + const auto definitionIndex = static_cast(index); + const ItemOptionDefinition& definition = options.Get(definitionIndex); + // The loader gives an ancient bonus definition exactly one option. + const ItemOption& option = definition.options.front(); + return AncientBonus{&definition, &option, options.GetEffect(definitionIndex, 0).effect, + ComputeOptionValue(option.value, item.AncientBonusOption)}; +} + int GetItemOptionValue(const ITEM& item, int slot) { if (const std::optional slotOption = FindSlotOption(item, slot)) diff --git a/src/source/GameLogic/Items/ItemOptions.h b/src/source/GameLogic/Items/ItemOptions.h index b513cb835e..c36980ad3d 100644 --- a/src/source/GameLogic/Items/ItemOptions.h +++ b/src/source/GameLogic/Items/ItemOptions.h @@ -77,4 +77,20 @@ int GetCurrentSlotValue(const ITEM& item, int slot); // The same for the item's slot `slot`; a slot the code wrote gives its SpecialValue. int GetItemOptionValue(const ITEM& item, int slot); + +// An item's ancient bonus: its definition and option, the effect of its attribute (AT_SET_OPTION_IMPROVE_STRENGTH to +// AT_SET_OPTION_IMPROVE_VITALITY, or NoItemOptionEffect for an attribute the client doesn't add) and its value at the +// item's bonus level. +struct AncientBonus +{ + const Data::Items::ItemOptionDefinition* definition = nullptr; + const Data::Items::ItemOption* option = nullptr; + WORD effect = 0; + int value = 0; +}; + +// The item's ancient bonus when its ancient byte has a bonus level (ITEM::AncientBonusOption): of the definition its +// attackType picks until the item sets link one (Data::Items::ItemOptionDatabase::FindAncientBonus); nothing without +// a bonus level or such a definition. +std::optional FindAncientBonus(const ITEM& item); } // namespace GameLogic::Items diff --git a/tests/data/test_item_option_links.cpp b/tests/data/test_item_option_links.cpp index 18c608374b..6bf209f7eb 100644 --- a/tests/data/test_item_option_links.cpp +++ b/tests/data/test_item_option_links.cpp @@ -172,7 +172,7 @@ TEST_CASE("An item's links name definitions, one of each byte, and every definit issues.clear(); ValidateOptionDefinitionUse(std::vector{}, ItemOptionDatabase({MakeLuck("unused")}, MakeTexts(), {rule}), issues); - CHECK(issues.empty()); + CHECK_FALSE(HasIssue(issues, ItemDataIssueSeverity::Warning, "definitions[0].name")); } // The excellent byte of wings and the Horn of Fenrir means something else, and no horn is excellent, so they can't link @@ -315,3 +315,81 @@ TEST_CASE("A {divisor} text on an option without one divisor term loads with a w ValidateItemOptions(std::vector{luck}, texts, "OptionTexts.json", issues); CHECK(HasIssue(issues, ItemDataIssueSeverity::Warning, "definitions[0].options[0].text")); } + +namespace +{ +ItemOptionDefinition MakeAncientBonus(const std::string& name, const std::string& attribute) +{ + ItemOptionDefinition bonus; + bonus.name = name; + bonus.type = ItemOptionType::AncientBonus; + bonus.file = "Ancient.json"; + ItemOption option; + option.attribute = attribute; + option.value = {{5, 10}, true}; + option.texts = {"luckCriticalDamage"}; + bonus.options.push_back(option); + return bonus; +} +} // namespace + +// No item links the ancient bonus: until the item sets link one to each item of a set, the item's attackType picks it +// by its name. A link does nothing and warns; a missing name warns that the items of that attackType have no bonus. +TEST_CASE("The ancient bonus definitions are picked by attackType, not linked [data][items]") +{ + const ItemOptionDatabase all({MakeLuck("luck"), MakeAncientBonus("ancientBonusStrength", "totalStrength"), + MakeAncientBonus("ancientBonusAgility", "totalAgility"), + MakeAncientBonus("ancientBonusEnergy", "totalEnergy"), + MakeAncientBonus("ancientBonusVitality", "totalVitality")}, + MakeTexts()); + CHECK(all.FindAncientBonus(1) == 1); + CHECK(all.FindAncientBonus(4) == 4); + CHECK(all.FindAncientBonus(0) == ItemOptionDatabase::NoDefinition); + CHECK(all.FindAncientBonus(5) == ItemOptionDatabase::NoDefinition); + CHECK(all.GetEffect(1, 0).effect == AT_SET_OPTION_IMPROVE_STRENGTH); + CHECK(all.GetEffect(4, 0).effect == AT_SET_OPTION_IMPROVE_VITALITY); + + std::vector issues; + const std::vector items{MakeItem(0, 0, {"luck"}), MakeItem(0, 1, {"ancientBonusStrength"})}; + ValidateItemOptionLinks(items, all, issues); + ValidateOptionDefinitionUse(items, all, issues); + // Only the link warns: no "no item links" for the unlinked bonuses, no missing name. + REQUIRE(issues.size() == 1); + CHECK(issues[0].severity == ItemDataIssueSeverity::Warning); + CHECK(issues[0].number == 1); + CHECK(issues[0].field == "options"); + + // A name of another type, or none, leaves its attackType without a bonus. + ItemOptionDefinition notBonus = MakeLuck("ancientBonusEnergy"); + const ItemOptionDatabase missing({MakeLuck("luck"), MakeAncientBonus("ancientBonusStrength", "totalStrength"), + notBonus}, + MakeTexts()); + CHECK(missing.FindAncientBonus(3) == ItemOptionDatabase::NoDefinition); + issues.clear(); + ValidateOptionDefinitionUse(std::vector{MakeItem(0, 0, {"luck"})}, missing, issues); + const auto missingName = [&](const std::string& name) + { + return std::any_of(issues.begin(), issues.end(), + [&](const ItemDataIssue& issue) + { + return issue.severity == ItemDataIssueSeverity::Warning && + issue.field == "definitions" && + issue.message.find("\"" + name + "\"") != std::string::npos; + }); + }; + CHECK_FALSE(missingName("ancientBonusStrength")); + CHECK(missingName("ancientBonusAgility")); + CHECK(missingName("ancientBonusEnergy")); + CHECK(missingName("ancientBonusVitality")); +} + +// The ancient bonus raises the four stats; another attribute has no effect, so the Data Check warns about it. +TEST_CASE("The ancient bonus's effects are the four stats [data][items]") +{ + CHECK(FindItemOptionEffect(ItemOptionType::AncientBonus, "totalAgility", ItemOptionAdd::Add)->effect == + AT_SET_OPTION_IMPROVE_DEXTERITY); + CHECK(FindItemOptionEffect(ItemOptionType::AncientBonus, "totalEnergy", ItemOptionAdd::Add)->effect == + AT_SET_OPTION_IMPROVE_ENERGY); + CHECK_FALSE(FindItemOptionEffect(ItemOptionType::AncientBonus, "totalStrength", ItemOptionAdd::Percent)); + CHECK_FALSE(FindItemOptionEffect(ItemOptionType::AncientBonus, "maximumHealth", ItemOptionAdd::Add)); +} diff --git a/tests/data/test_item_option_slots.cpp b/tests/data/test_item_option_slots.cpp index 35047a9059..a852804f99 100644 --- a/tests/data/test_item_option_slots.cpp +++ b/tests/data/test_item_option_slots.cpp @@ -1190,3 +1190,96 @@ TEST_CASE("Every ancient item's bonus raises the stat of its attackType [data][i broken.Durability = 0; CHECK(AddedStats(broken) == std::array{}); } + +namespace +{ +// The first item whose attackType is `attackType`. +int FindItemOfAttackType(int attackType) +{ + for (int type = 0; type < MAX_ITEM; ++type) + { + if (ItemAttribute[type].AttType == attackType && g_ItemDatabase.Find(type) != nullptr) + { + return type; + } + } + return -1; +} +} // namespace + +// The ancient bonus comes from the definition of Options/Ancient.json the item's attackType picks: +5 at bonus level 1, +// +10 at level 2, the last entry above the list, nothing at level 0. Its line is the definition's text. +TEST_CASE("The ancient bonus comes from the definition the item's attackType picks [data][items]") +{ + ClientDataScope client(ClientDirectory); + I18N::SetLocale("en"); + std::string errorMessage; + REQUIRE(g_ItemDataHandler.Load(errorMessage)); + HeroScope hero; + + const int strengthItem = FindItemOfAttackType(1); + const int vitalityItem = FindItemOfAttackType(4); + REQUIRE(strengthItem >= 0); + REQUIRE(vitalityItem >= 0); + + CHECK_FALSE(GameLogic::Items::FindAncientBonus(MakeAncientItem(strengthItem, 0))); + const std::optional level1 = + GameLogic::Items::FindAncientBonus(MakeAncientItem(strengthItem, 1)); + REQUIRE(level1); + CHECK(level1->definition->name == "ancientBonusStrength"); + CHECK(level1->effect == AT_SET_OPTION_IMPROVE_STRENGTH); + CHECK(level1->value == 5); + CHECK(GameLogic::Items::FindAncientBonus(MakeAncientItem(strengthItem, 2))->value == 10); + CHECK(GameLogic::Items::FindAncientBonus(MakeAncientItem(strengthItem, 3))->value == 10); + const std::optional vitality = + GameLogic::Items::FindAncientBonus(MakeAncientItem(vitalityItem, 2)); + REQUIRE(vitality); + CHECK(vitality->definition->name == "ancientBonusVitality"); + CHECK(vitality->effect == AT_SET_OPTION_IMPROVE_VITALITY); + + ClearTooltipRows(); + const ITEM strength = MakeAncientItem(strengthItem, 2); + CHECK(g_csItemOption.RenderDefaultOptionText(&strength, 0) >= 1); + CHECK(std::wstring(TextList[0]) == L"Increase strength +10"); + CHECK(TextListColor[0] == TEXT_COLOR_BLUE); + const ITEM stamina = MakeAncientItem(vitalityItem, 1); + CHECK(g_csItemOption.RenderDefaultOptionText(&stamina, 0) >= 1); + CHECK(std::wstring(TextList[0]) == L"Increase stamina +5"); + ClearTooltipRows(); + const ITEM withoutBonus = MakeAncientItem(strengthItem, 0); + CHECK(g_csItemOption.RenderDefaultOptionText(&withoutBonus, 0) == 0); +} + +// The stat code adds the ancient bonus of the worn items with the definitions' values, to the stat the definition's +// attribute names: an edited value list is added as written, another attribute changes the stat, and one the client +// doesn't add adds nothing. +TEST_CASE("The stats add the ancient bonus with its definition's value and attribute [data][items]") +{ + ClientDataScope client(ClientDirectory); + I18N::SetLocale("en"); + std::string errorMessage; + REQUIRE(g_ItemDataHandler.Load(errorMessage)); + HeroScope hero; + const int strengthItem = FindItemOfAttackType(1); + REQUIRE(strengthItem >= 0); + + ItemOptionsScope restoreOptions; + const Data::Items::ItemOptionDatabase& shipped = restoreOptions.Saved(); + const int found = shipped.Find("ancientBonusStrength"); + REQUIRE(found != Data::Items::ItemOptionDatabase::NoDefinition); + const auto edit = [&](const char* attribute, std::vector values) + { + std::vector definitions(shipped.GetDefinitions().begin(), + shipped.GetDefinitions().end()); + Data::Items::ItemOption& option = definitions[static_cast(found)].options.front(); + option.attribute = attribute; + option.value = {std::move(values), true}; + g_ItemDatabase.SetOptions(Data::Items::ItemOptionDatabase(std::move(definitions), shipped.GetTexts())); + }; + edit("totalStrength", {7, 9}); + CHECK(AddedStats(MakeAncientItem(strengthItem, 2)) == std::array{9, 0, 0, 0}); + edit("totalEnergy", {7, 9}); + CHECK(AddedStats(MakeAncientItem(strengthItem, 1)) == std::array{0, 0, 7, 0}); + edit("maximumHealth", {7, 9}); + CHECK(AddedStats(MakeAncientItem(strengthItem, 1)) == std::array{0, 0, 0, 0}); +} diff --git a/tests/data/test_item_options_json.cpp b/tests/data/test_item_options_json.cpp index a254002371..f578ab011d 100644 --- a/tests/data/test_item_options_json.cpp +++ b/tests/data/test_item_options_json.cpp @@ -438,3 +438,67 @@ TEST_CASE("Option definitions of type excellent read their numbered options and CHECK(HasIssue(term(R"([{"attribute": "level", "divisor": 20, "round": "up"}])"), ItemDataIssueSeverity::Warning, "definitions[0].options[0].add.per[0].round")); } + +TEST_CASE("Option definitions of type ancientBonus and ancientOption read and write back [data][items]") +{ + constexpr const char* AncientFile = R"({ + "formatVersion": 1, + "definitions": [ + { + "name": "ancientBonusStrength", + "type": "ancientBonus", + "displayName": { + "en": "Ancient bonus: strength" + }, + "openMu": {"id": "00000083-0030-09a3-0000-000000000000", "name": "Ancient Bonus of Total Strength"}, + "options": [ + {"attribute": "totalStrength", "add": {"values": [5, 10]}, "text": "increaseStrength"} + ] + }, + { + "name": "warriorSet", + "type": "ancientOption", + "displayName": { + "en": "Warrior set" + }, + "options": [ + {"number": 1, "attribute": "totalStrength", "add": {"values": 10}, "text": "increaseStrength"} + ] + } + ] +} +)"; + std::vector definitions; + std::vector issues; + ReadItemOptionsJson(AncientFile, "Options/Ancient.json", "Ancient.json", definitions, issues); + CHECK(issues.empty()); + REQUIRE(definitions.size() == 2); + CHECK(definitions[0].type == ItemOptionType::AncientBonus); + REQUIRE(definitions[0].options.size() == 1); + CHECK(definitions[0].options[0].number == 0); + CHECK(definitions[0].options[0].value.At(1) == 5); + CHECK(definitions[0].options[0].value.At(2) == 10); + CHECK(definitions[0].options[0].value.At(3) == 10); + CHECK(definitions[1].type == ItemOptionType::AncientOption); + CHECK(WriteItemOptionsJson(definitions) == AncientFile); + + const auto bonus = [](const std::string& options) + { + return R"({"name": "b", "type": "ancientBonus", "displayName": {"en": "B"}, "options": [)" + options + "]}"; + }; + // The ancient bonus has one option without a number. + CHECK(HasIssue(ReadDefinition(bonus(R"({"number": 1, "attribute": "a", "add": {"values": [5]}, "text": "t"})")), + ItemDataIssueSeverity::Fatal, "definitions[0].options[0].number")); + CHECK(HasIssue(ReadDefinition(bonus(R"({"attribute": "a", "add": {"values": [5]}, "text": "t"}, + {"attribute": "b", "add": {"values": [5]}, "text": "t"})")), + ItemDataIssueSeverity::Fatal, "definitions[0].options")); + // An ancient set's options count from 1. + const auto setOption = [](const std::string& options) + { + return R"({"name": "s", "type": "ancientOption", "displayName": {"en": "S"}, "options": [)" + options + "]}"; + }; + CHECK(HasIssue(ReadDefinition(setOption(R"({"number": 0, "attribute": "a", "add": {"values": 1}, "text": "t"})")), + ItemDataIssueSeverity::Fatal, "definitions[0].options[0].number")); + CHECK_FALSE(HasFatal( + ReadDefinition(setOption(R"({"number": 12, "attribute": "a", "add": {"values": 1}, "text": "t"})")))); +} From 66dcb1686c137ae80297513b0d1c0e85dc72def6 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 16:43:46 +0100 Subject: [PATCH 06/17] fix(items): only the ancient bonus definitions attackType picks skip the unlinked warning Every ancientBonus and ancientOption definition skipped the "no item and no option rule links" warning, so an extra one (an ancientBonusCharisma, or any set options before the item sets) loaded unused without a word. Now only the four definitions the items' attackType picks by name skip it. --- docs/item-data.md | 4 ++-- .../GameData/ItemData/ItemOptionValidation.cpp | 17 +++++++++++++++-- .../GameData/ItemData/ItemOptionValidation.h | 3 ++- tests/data/test_item_option_links.cpp | 15 +++++++++++++++ 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/docs/item-data.md b/docs/item-data.md index 001dd3a6b1..1767e31ebd 100644 --- a/docs/item-data.md +++ b/docs/item-data.md @@ -1230,8 +1230,8 @@ unknown fields, an attribute the client does not compute, a term on a hero attribute the client does not read, a text with `{divisor}` on an option without a term that has a divisor (the line shows 0 there) or with several (it shows the first one's), a definition no -item and no rule links (but the ancient bonus and set options, which the -item's `attackType` and the item sets give), an item linking an ancient +item and no rule links (but the four ancient bonus definitions the item's +`attackType` picks), an item linking an ancient bonus or set options (the link does nothing), an ancient bonus name `attackType` picks that no `ancientBonus` definition has (those items show and add no bonus), a text no option names and a text in a language the diff --git a/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp b/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp index b27d4bad9d..49c5b4b4fc 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp +++ b/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp @@ -22,6 +22,19 @@ bool IsAncientType(ItemOptionType type) return type == ItemOptionType::AncientOption || type == ItemOptionType::AncientBonus; } +// Whether an item's attackType picks the definition at `index` (ItemOptionDatabase::FindAncientBonus). +bool IsPickedByAttackType(const ItemOptionDatabase& options, size_t index) +{ + for (int attackType = 1; attackType <= static_cast(AncientBonusNames.size()); ++attackType) + { + if (options.FindAncientBonus(attackType) == static_cast(index)) + { + return true; + } + } + return false; +} + // A definition's problems name its file in Data/Items/Options and its place there. std::string DefinitionField(std::span definitions, size_t index) { @@ -222,8 +235,8 @@ void ValidateOptionDefinitionUse(std::span items, const It const std::span definitions = options.GetDefinitions(); for (size_t index = 0; index < definitions.size(); ++index) { - // The item's attackType links the ancient bonus definitions, the item sets will link both ancient types. - if (!linked.contains(definitions[index].name) && !IsAncientType(definitions[index].type)) + // The item's attackType links the four ancient bonus definitions of AncientBonusNames. + if (!linked.contains(definitions[index].name) && !IsPickedByAttackType(options, index)) { issues.push_back({ItemDataIssueSeverity::Warning, DefinitionSource(definitions[index]), ItemDataIssue::NoItem, ItemDataIssue::NoItem, diff --git a/src/source/Data/GameData/ItemData/ItemOptionValidation.h b/src/source/Data/GameData/ItemData/ItemOptionValidation.h index fde244c355..e6f4db518e 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionValidation.h +++ b/src/source/Data/GameData/ItemData/ItemOptionValidation.h @@ -30,7 +30,8 @@ void ValidateItemOptionLinks(std::span items, const ItemOp std::vector& issues); // A definition neither an item nor a rule of `options` links (a warning; without the rules, as in the game, only the -// items count), except the ancient types the item sets give; an ancient bonus name of AncientBonusNames with no +// items count), except the ancient bonus definitions the items' attackType picks; an ancient bonus name of +// AncientBonusNames with no // definition of type ancientBonus (a warning: the items with that attackType show and add no bonus). void ValidateOptionDefinitionUse(std::span items, const ItemOptionDatabase& options, std::vector& issues); diff --git a/tests/data/test_item_option_links.cpp b/tests/data/test_item_option_links.cpp index 6bf209f7eb..707259eb4a 100644 --- a/tests/data/test_item_option_links.cpp +++ b/tests/data/test_item_option_links.cpp @@ -359,6 +359,21 @@ TEST_CASE("The ancient bonus definitions are picked by attackType, not linked [d CHECK(issues[0].number == 1); CHECK(issues[0].field == "options"); + // Another ancient bonus or an ancient set's options, which nothing picks yet, are unlinked definitions. + ItemOptionDefinition setOptions = MakeAncientBonus("warriorSet", "totalStrength"); + setOptions.type = ItemOptionType::AncientOption; + const ItemOptionDatabase extra({MakeLuck("luck"), MakeAncientBonus("ancientBonusStrength", "totalStrength"), + MakeAncientBonus("ancientBonusAgility", "totalAgility"), + MakeAncientBonus("ancientBonusEnergy", "totalEnergy"), + MakeAncientBonus("ancientBonusVitality", "totalVitality"), + MakeAncientBonus("ancientBonusCharisma", "totalLeadership"), setOptions}, + MakeTexts()); + issues.clear(); + ValidateOptionDefinitionUse(std::vector{MakeItem(0, 0, {"luck"})}, extra, issues); + REQUIRE(issues.size() == 2); + CHECK(HasIssue(issues, ItemDataIssueSeverity::Warning, "definitions[4].name")); + CHECK(HasIssue(issues, ItemDataIssueSeverity::Warning, "definitions[5].name")); + // A name of another type, or none, leaves its attackType without a bonus. ItemOptionDefinition notBonus = MakeLuck("ancientBonusEnergy"); const ItemOptionDatabase missing({MakeLuck("luck"), MakeAncientBonus("ancientBonusStrength", "totalStrength"), From e9ea6cb281bea556d191ad38bf3b2af4d0523c77 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 16:44:28 +0100 Subject: [PATCH 07/17] fix(items): the elemental rings' second bonus line only follows a bonus line When the ancient bonus wrote no line (its text missing from the option texts), the elemental rings and pendants still showed "Increase Attribute Damage" alone. It now belongs to the bonus line, and is written only below the last tooltip row. --- src/source/GameLogic/Items/CSItemOption.cpp | 11 +++++--- tests/data/test_item_option_slots.cpp | 28 +++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/source/GameLogic/Items/CSItemOption.cpp b/src/source/GameLogic/Items/CSItemOption.cpp index 65199e9520..7eb6cc57bd 100644 --- a/src/source/GameLogic/Items/CSItemOption.cpp +++ b/src/source/GameLogic/Items/CSItemOption.cpp @@ -619,11 +619,16 @@ int CSItemOption::RenderDefaultOptionText(const ITEM* ip, int TextNum) { int TNum = TextNum; const std::optional bonus = GameLogic::Items::FindAncientBonus(*ip); - if (bonus) + // The elemental rings' and pendants' second line belongs to the bonus line: none without it. + const int bonusRows = bonus ? WriteOptionLines(*bonus->option, bonus->value, TNum, MaxTextListRows) : 0; + if (bonusRows > 0) { - TNum += WriteOptionLines(*bonus->option, bonus->value, TNum, MaxTextListRows); + TNum += bonusRows; - if ((ip->Type >= ITEM_RING_OF_ICE && ip->Type <= ITEM_RING_OF_POISON) || (ip->Type >= ITEM_PENDANT_OF_LIGHTING && ip->Type <= ITEM_PENDANT_OF_FIRE) || (ip->Type >= ITEM_RING_OF_FIRE && ip->Type <= ITEM_PENDANT_OF_WATER)) + const bool elemental = (ip->Type >= ITEM_RING_OF_ICE && ip->Type <= ITEM_RING_OF_POISON) || + (ip->Type >= ITEM_PENDANT_OF_LIGHTING && ip->Type <= ITEM_PENDANT_OF_FIRE) || + (ip->Type >= ITEM_RING_OF_FIRE && ip->Type <= ITEM_PENDANT_OF_WATER); + if (elemental && TNum < MaxTextListRows) { mu_swprintf(TextList[TNum], I18N::Game::IncreaseAttributeDamage); // "Increase Attribute Damage" TextListColor[TNum] = TEXT_COLOR_BLUE; diff --git a/tests/data/test_item_option_slots.cpp b/tests/data/test_item_option_slots.cpp index a852804f99..5b382fb711 100644 --- a/tests/data/test_item_option_slots.cpp +++ b/tests/data/test_item_option_slots.cpp @@ -1283,3 +1283,31 @@ TEST_CASE("The stats add the ancient bonus with its definition's value and attri edit("maximumHealth", {7, 9}); CHECK(AddedStats(MakeAncientItem(strengthItem, 1)) == std::array{0, 0, 0, 0}); } + +// An elemental ring's or pendant's "Increase Attribute Damage" follows its bonus line: without the line (a text the +// option texts lack) it shows neither. +TEST_CASE("The elemental rings' second ancient bonus line follows the bonus line [data][items]") +{ + ClientDataScope client(ClientDirectory); + I18N::SetLocale("en"); + std::string errorMessage; + REQUIRE(g_ItemDataHandler.Load(errorMessage)); + HeroScope hero; + + ClearTooltipRows(); + const ITEM ring = MakeAncientItem(ITEM_RING_OF_ICE, 1); + CHECK(g_csItemOption.RenderDefaultOptionText(&ring, 0) == 2); + CHECK(std::wstring(TextList[0]) == L"Increase agility +5"); + CHECK(std::wstring(TextList[1]) == L"Increase attribute damage"); + + ItemOptionsScope restoreOptions; + const Data::Items::ItemOptionDatabase& shipped = restoreOptions.Saved(); + std::vector definitions(shipped.GetDefinitions().begin(), + shipped.GetDefinitions().end()); + const int found = shipped.Find("ancientBonusAgility"); + REQUIRE(found != Data::Items::ItemOptionDatabase::NoDefinition); + definitions[static_cast(found)].options.front().texts = {"noSuchText"}; + g_ItemDatabase.SetOptions(Data::Items::ItemOptionDatabase(std::move(definitions), shipped.GetTexts())); + ClearTooltipRows(); + CHECK(g_csItemOption.RenderDefaultOptionText(&ring, 0) == 0); +} From bdc08b2d1b95ef06451ad1481faa4fd36790c3ba Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 16:44:54 +0100 Subject: [PATCH 08/17] feat(items): a Data Check for an attackType that picks no ancient bonus attackType is now only what picks an item's ancient bonus definition (1 to 4), so a value above 4 gives an ancient item no bonus. The Data Check warns about it. Item Basics still shows the field as its byte; the editor's option windows come with 9a5. --- docs/item-data.md | 3 ++- .../Data/GameData/ItemData/ItemDataValidation.cpp | 15 +++++++++++++++ tests/data/test_item_json.cpp | 15 +++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/docs/item-data.md b/docs/item-data.md index 1767e31ebd..791ecec10f 100644 --- a/docs/item-data.md +++ b/docs/item-data.md @@ -1232,7 +1232,8 @@ without a term that has a divisor (the line shows 0 there) or with several (it shows the first one's), a definition no item and no rule links (but the four ancient bonus definitions the item's `attackType` picks), an item linking an ancient -bonus or set options (the link does nothing), an ancient bonus name +bonus or set options (the link does nothing), an `attackType` above 4 (it +picks no ancient bonus), an ancient bonus name `attackType` picks that no `ancientBonus` definition has (those items show and add no bonus), a text no option names and a text in a language the game has no texts in. diff --git a/src/source/Data/GameData/ItemData/ItemDataValidation.cpp b/src/source/Data/GameData/ItemData/ItemDataValidation.cpp index 8c229c4666..f048befec9 100644 --- a/src/source/Data/GameData/ItemData/ItemDataValidation.cpp +++ b/src/source/Data/GameData/ItemData/ItemDataValidation.cpp @@ -5,6 +5,7 @@ #include "ItemDescriptionPlaceholders.h" #include "ItemEnumNames.h" #include "ItemJsonFormat.h" +#include "ItemOptionDatabase.h" #include "ItemModelJsonFormat.h" #include "ItemTooltipLines.h" #include "ItemType.h" @@ -225,6 +226,19 @@ void ValidateExcellentBonus(const ItemDefinition& definition, std::vector& issues) +{ + if (definition.attackType > AncientBonusNames.size()) + { + AddIssue( + issues, ItemDataIssueSeverity::Warning, definition, + std::to_string(definition.attackType) + + " picks no ancient bonus (0: none, 1 strength, 2 agility, 3 energy, 4 vitality): the item has none", + "attackType"); + } +} + // Item files saved before the stat profiles have none; the item then has the // default until an edit or a bmd import gives it the profile its data gives. void ValidateStatProfileGiven(const ItemDefinition& definition, const ItemStatProfiles& profiles, @@ -366,6 +380,7 @@ void ValidateItems(std::span items, std::vector issues; + ValidateItems(std::vector{vitality}, issues); + CHECK_FALSE(HasIssue(issues, ItemDataIssueSeverity::Warning, "attackType")); + ValidateItems(std::vector{unknown}, issues); + CHECK(HasIssue(issues, ItemDataIssueSeverity::Warning, "attackType")); + CHECK_FALSE(HasFatal(issues)); +} + TEST_CASE("Item validation warns about an excellent bonus the stat profile has no term for [data][items]") { // Without an excellent damage term the Chaos Dragon Axe's fixed bonus would not count. From 8def17a0b5aa1b476f5213520723ee0fa69eeed3 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 16:45:06 +0100 Subject: [PATCH 09/17] fix(items): the ancient types sort before option names of no definition The ancient types weren't in the order the item's option links are sorted in, so a link to one was sorted with the names of no definition, by name, and an unknown name could come before it, against "names of no definition go last". They now follow the excellent options. --- .../Data/GameData/ItemData/ItemOptionDatabase.cpp | 11 +++++++---- tests/data/test_item_option_links.cpp | 10 ++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/source/Data/GameData/ItemData/ItemOptionDatabase.cpp b/src/source/Data/GameData/ItemData/ItemOptionDatabase.cpp index c7ffb5999f..e2554f7224 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionDatabase.cpp +++ b/src/source/Data/GameData/ItemData/ItemOptionDatabase.cpp @@ -9,10 +9,13 @@ namespace Data::Items { namespace { -// The order the game takes an item's definitions in, by type (the tooltip shows their lines in it): wing options, -// the skill (no definition), luck, the additional option, the Dark Horse, excellent options, fixed options. -constexpr std::array TakeOrder = {ItemOptionType::Luck, ItemOptionType::Option, - ItemOptionType::Excellent}; +// The order the game takes an item's definitions in, by type (the tooltip shows the option slots' lines in it): wing +// options, the skill (no definition), luck, the additional option, the Dark Horse, excellent options, fixed options. +// The ancient types follow them only for the order of a saved list (names of no definition last): they take no slot, +// and the tooltip shows the ancient bonus above the slots' lines. +constexpr std::array TakeOrder = {ItemOptionType::Luck, ItemOptionType::Option, + ItemOptionType::Excellent, ItemOptionType::AncientOption, + ItemOptionType::AncientBonus}; size_t GetTakeOrder(ItemOptionType type) { diff --git a/tests/data/test_item_option_links.cpp b/tests/data/test_item_option_links.cpp index 707259eb4a..262d7906d6 100644 --- a/tests/data/test_item_option_links.cpp +++ b/tests/data/test_item_option_links.cpp @@ -408,3 +408,13 @@ TEST_CASE("The ancient bonus's effects are the four stats [data][items]") CHECK_FALSE(FindItemOptionEffect(ItemOptionType::AncientBonus, "totalStrength", ItemOptionAdd::Percent)); CHECK_FALSE(FindItemOptionEffect(ItemOptionType::AncientBonus, "maximumHealth", ItemOptionAdd::Add)); } + +// A saved option list keeps the names of no definition last, after the ancient types too. +TEST_CASE("Option links order the ancient types before names of no definition [data][items]") +{ + const ItemOptionDatabase options({MakeLuck("luck"), MakeAncientBonus("ancientBonusStrength", "totalStrength")}, + MakeTexts()); + std::vector names{"nothing", "ancientBonusStrength", "luck"}; + options.OrderLinks(names); + CHECK(names == std::vector{"luck", "ancientBonusStrength", "nothing"}); +} From 7183ede6668254cc13a0fe0bdc24b0065363546f Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 16:45:21 +0100 Subject: [PATCH 10/17] fix(items): the option file messages say "an ancientBonus" The reader wrote "a" before every type name, so the ancient bonus read "a ancientBonus option has no number" and "a ancientBonus definition has one option". The article now follows the name. --- src/source/Data/GameData/ItemData/ItemOptionsJson.cpp | 11 +++++++++-- tests/data/test_item_options_json.cpp | 7 +++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/source/Data/GameData/ItemData/ItemOptionsJson.cpp b/src/source/Data/GameData/ItemData/ItemOptionsJson.cpp index 46c6778012..a470145225 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionsJson.cpp +++ b/src/source/Data/GameData/ItemData/ItemOptionsJson.cpp @@ -70,6 +70,13 @@ bool HasOneOption(ItemOptionType type) return type == ItemOptionType::Luck || type == ItemOptionType::AncientBonus; } +// "a luck", "an ancientBonus": a type name with its article, for the messages. +std::string WithArticle(std::string_view name) +{ + const bool vowel = !name.empty() && std::string_view("aeiou").find(name.front()) != std::string_view::npos; + return (vowel ? "an " : "a ") + std::string(name); +} + bool IsGuid(std::string_view text) { size_t position = 0; @@ -393,7 +400,7 @@ void ItemOptionsReader::ReadNumber(const OrderedJson& json, const std::string& f if (number != json.end()) { AddFatal(field + "." + Keys::Number, - std::string("a ") + FindEnumName(type) + " option has no number; leave it out"); + WithArticle(FindEnumName(type)) + " option has no number; leave it out"); } return; } @@ -470,7 +477,7 @@ void ItemOptionsReader::ReadOptions(const OrderedJson& json, const std::string& } if (HasOneOption(definition.type) && options->size() > 1) { - AddFatal(optionsField, std::string("a ") + FindEnumName(definition.type) + " definition has one option"); + AddFatal(optionsField, WithArticle(FindEnumName(definition.type)) + " definition has one option"); } std::set numbers; for (size_t index = 0; index < options->size(); ++index) diff --git a/tests/data/test_item_options_json.cpp b/tests/data/test_item_options_json.cpp index f578ab011d..066e36801e 100644 --- a/tests/data/test_item_options_json.cpp +++ b/tests/data/test_item_options_json.cpp @@ -487,8 +487,11 @@ TEST_CASE("Option definitions of type ancientBonus and ancientOption read and wr return R"({"name": "b", "type": "ancientBonus", "displayName": {"en": "B"}, "options": [)" + options + "]}"; }; // The ancient bonus has one option without a number. - CHECK(HasIssue(ReadDefinition(bonus(R"({"number": 1, "attribute": "a", "add": {"values": [5]}, "text": "t"})")), - ItemDataIssueSeverity::Fatal, "definitions[0].options[0].number")); + const std::vector numbered = + ReadDefinition(bonus(R"({"number": 1, "attribute": "a", "add": {"values": [5]}, "text": "t"})")); + CHECK(HasIssue(numbered, ItemDataIssueSeverity::Fatal, "definitions[0].options[0].number")); + CHECK(std::any_of(numbered.begin(), numbered.end(), [](const ItemDataIssue& issue) + { return issue.message == "an ancientBonus option has no number; leave it out"; })); CHECK(HasIssue(ReadDefinition(bonus(R"({"attribute": "a", "add": {"values": [5]}, "text": "t"}, {"attribute": "b", "add": {"values": [5]}, "text": "t"})")), ItemDataIssueSeverity::Fatal, "definitions[0].options")); From 9089fb0c7216f4959503c63d5090c74e0869e617 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 16:45:55 +0100 Subject: [PATCH 11/17] refactor(items): the ancient bonus name check is a check of its own The warning for an ancient bonus name without a definition ran inside ValidateOptionDefinitionUse, so the test of the unlinked definitions, whose options have no ancient bonus, had to stop checking that it found nothing else. It is now ValidateAncientBonusNames, run next to it in the game and in the editor's Data Checks, and that test checks for no issues again. --- src/MuEditor/UI/DataChecks/FileCheckArea.cpp | 1 + src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp | 1 + .../Data/GameData/ItemData/ItemOptionValidation.cpp | 4 ++++ src/source/Data/GameData/ItemData/ItemOptionValidation.h | 8 +++++--- tests/data/test_item_option_links.cpp | 4 ++-- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/MuEditor/UI/DataChecks/FileCheckArea.cpp b/src/MuEditor/UI/DataChecks/FileCheckArea.cpp index ef8318f896..b950a96513 100644 --- a/src/MuEditor/UI/DataChecks/FileCheckArea.cpp +++ b/src/MuEditor/UI/DataChecks/FileCheckArea.cpp @@ -144,6 +144,7 @@ std::unique_ptr CreateItemOptionCheckArea() if (!Data::Items::HasFatal(issues)) { Data::Items::ValidateOptionDefinitionUse(g_ItemDatabase.GetAllSlots(), options, issues); + Data::Items::ValidateAncientBonusNames(options, issues); } return issues; }, diff --git a/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp b/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp index 9342ea001e..d8fc09171b 100644 --- a/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp +++ b/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp @@ -79,6 +79,7 @@ ItemOptionDatabase LoadItemOptions(std::vector& items, std::vect } ValidateItemOptionLinks(items, options, issues); ValidateOptionDefinitionUse(items, options, issues); + ValidateAncientBonusNames(options, issues); for (ItemDefinition& item : items) { options.OrderLinks(item.options); diff --git a/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp b/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp index 49c5b4b4fc..d1cee88436 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp +++ b/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp @@ -244,6 +244,10 @@ void ValidateOptionDefinitionUse(std::span items, const It "no item and no option rule links \"" + definitions[index].name + "\""}); } } +} + +void ValidateAncientBonusNames(const ItemOptionDatabase& options, std::vector& issues) +{ for (size_t attackType = 0; attackType < AncientBonusNames.size(); ++attackType) { if (options.FindAncientBonus(static_cast(attackType) + 1) == ItemOptionDatabase::NoDefinition) diff --git a/src/source/Data/GameData/ItemData/ItemOptionValidation.h b/src/source/Data/GameData/ItemData/ItemOptionValidation.h index e6f4db518e..419f115068 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionValidation.h +++ b/src/source/Data/GameData/ItemData/ItemOptionValidation.h @@ -30,9 +30,11 @@ void ValidateItemOptionLinks(std::span items, const ItemOp std::vector& issues); // A definition neither an item nor a rule of `options` links (a warning; without the rules, as in the game, only the -// items count), except the ancient bonus definitions the items' attackType picks; an ancient bonus name of -// AncientBonusNames with no -// definition of type ancientBonus (a warning: the items with that attackType show and add no bonus). +// items count), except the ancient bonus definitions the items' attackType picks. void ValidateOptionDefinitionUse(std::span items, const ItemOptionDatabase& options, std::vector& issues); + +// An ancient bonus name of AncientBonusNames with no definition of type ancientBonus (a warning: the items with that +// attackType show and add no bonus). +void ValidateAncientBonusNames(const ItemOptionDatabase& options, std::vector& issues); } // namespace Data::Items diff --git a/tests/data/test_item_option_links.cpp b/tests/data/test_item_option_links.cpp index 262d7906d6..048e16b95b 100644 --- a/tests/data/test_item_option_links.cpp +++ b/tests/data/test_item_option_links.cpp @@ -172,7 +172,7 @@ TEST_CASE("An item's links name definitions, one of each byte, and every definit issues.clear(); ValidateOptionDefinitionUse(std::vector{}, ItemOptionDatabase({MakeLuck("unused")}, MakeTexts(), {rule}), issues); - CHECK_FALSE(HasIssue(issues, ItemDataIssueSeverity::Warning, "definitions[0].name")); + CHECK(issues.empty()); } // The excellent byte of wings and the Horn of Fenrir means something else, and no horn is excellent, so they can't link @@ -381,7 +381,7 @@ TEST_CASE("The ancient bonus definitions are picked by attackType, not linked [d MakeTexts()); CHECK(missing.FindAncientBonus(3) == ItemOptionDatabase::NoDefinition); issues.clear(); - ValidateOptionDefinitionUse(std::vector{MakeItem(0, 0, {"luck"})}, missing, issues); + ValidateAncientBonusNames(missing, issues); const auto missingName = [&](const std::string& name) { return std::any_of(issues.begin(), issues.end(), From b8c4983d4ed825dc7502e4cd9eb798f1ef04d519 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 16:46:07 +0100 Subject: [PATCH 12/17] fix(items): the ancient bonus name check names the file Its warning named "Options" where every other option problem names "Options/". It now names the file of a definition of that name of another type, or Options/Ancient.json, where the four definitions belong. --- .../Data/GameData/ItemData/ItemOptionValidation.cpp | 7 ++++++- tests/data/test_item_option_links.cpp | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp b/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp index d1cee88436..b0a0e48dc7 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp +++ b/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp @@ -252,8 +252,13 @@ void ValidateAncientBonusNames(const ItemOptionDatabase& options, std::vector(attackType) + 1) == ItemOptionDatabase::NoDefinition) { + // The file of a definition of that name of another type, else the file the four belong in. + const int named = options.Find(AncientBonusNames[attackType]); + const std::string source = named != ItemOptionDatabase::NoDefinition + ? DefinitionSource(options.Get(static_cast(named))) + : std::string("Options/Ancient.json"); issues.push_back( - {ItemDataIssueSeverity::Warning, "Options", ItemDataIssue::NoItem, ItemDataIssue::NoItem, "definitions", + {ItemDataIssueSeverity::Warning, source, ItemDataIssue::NoItem, ItemDataIssue::NoItem, "definitions", "no definition of type ancientBonus is named \"" + std::string(AncientBonusNames[attackType]) + "\": the ancient items with attackType " + std::to_string(attackType + 1) + " show and add no ancient bonus"}); diff --git a/tests/data/test_item_option_links.cpp b/tests/data/test_item_option_links.cpp index 048e16b95b..1544be2a8b 100644 --- a/tests/data/test_item_option_links.cpp +++ b/tests/data/test_item_option_links.cpp @@ -393,6 +393,15 @@ TEST_CASE("The ancient bonus definitions are picked by attackType, not linked [d }); }; CHECK_FALSE(missingName("ancientBonusStrength")); + // The issue names the file of the definition of that name, else the file the four belong in. + const auto sourceOf = [&](const std::string& name) + { + const auto found = std::find_if(issues.begin(), issues.end(), [&](const ItemDataIssue& issue) + { return issue.message.find("\"" + name + "\"") != std::string::npos; }); + return found != issues.end() ? found->source : std::string(); + }; + CHECK(sourceOf("ancientBonusEnergy") == "Options/Luck.json"); + CHECK(sourceOf("ancientBonusAgility") == "Options/Ancient.json"); CHECK(missingName("ancientBonusAgility")); CHECK(missingName("ancientBonusEnergy")); CHECK(missingName("ancientBonusVitality")); From 8ab0555a8ccb38e7089ab60adde0073583490039 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 16:46:14 +0100 Subject: [PATCH 13/17] docs(items): the set options come from the set, not from attackType A comment of the link check said the item's attackType picks its ancient bonus and set options; the set options come from the item's set (the ancient byte's set number). --- src/source/Data/GameData/ItemData/ItemOptionValidation.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp b/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp index b0a0e48dc7..42250df6e5 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp +++ b/src/source/Data/GameData/ItemData/ItemOptionValidation.cpp @@ -205,7 +205,8 @@ void ValidateItemOptionLinks(std::span items, const ItemOp "links excellent options, but its excellent byte holds its wing options or a horn's kind, " "or nothing: no horn is excellent"}); } - // Until the item sets link them (phase 10), the item's attackType picks its ancient bonus and set options. + // Until the item sets link them (phase 10), the item's attackType picks its ancient bonus; its set options come + // from its set (the ancient byte's set number). const bool linksAncient = std::any_of(links.begin(), links.end(), [&options](ItemOptionIndex link) { return IsAncientType(options.Get(link).type); }); if (linksAncient) From a60bfcef80fb4f9614a8836ad5b2bd57be15dab1 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 16:46:28 +0100 Subject: [PATCH 14/17] refactor(items): the ancient bonus takes no option slot The ancient types take no option slots (IsTurnedOn gives them none), so GetOptionLevel's ancient bonus case never ran; FindAncientBonus takes the value at the bonus level itself, and the case is gone. IsOptionTurnedOn lists the ancient types as turning nothing on, and a type it doesn't list turns nothing on either. The ancient bonus effect rows write no slot value, as the comment next to them says. --- .../GameData/ItemData/ItemOptionEffects.cpp | 10 +++++----- src/source/GameLogic/Items/ItemOptions.cpp | 18 ++++++------------ 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/source/Data/GameData/ItemData/ItemOptionEffects.cpp b/src/source/Data/GameData/ItemData/ItemOptionEffects.cpp index da4fca571c..9fad3ff401 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionEffects.cpp +++ b/src/source/Data/GameData/ItemData/ItemOptionEffects.cpp @@ -51,11 +51,11 @@ constexpr std::array EffectRows = {{ {ItemOptionType::Excellent, "healthAfterMonsterKillMultiplier", ItemOptionAdd::Add, {AT_IMPROVE_GAIN_LIFE, false}}, {ItemOptionType::Excellent, "manaAfterMonsterKillMultiplier", ItemOptionAdd::Add, {AT_IMPROVE_GAIN_MANA, false}}, // The ancient bonus raises a stat, as the set options do: the stat code adds its value at the item's bonus level - // (CSItemOption::getAllAddState). It takes no option slot. - {ItemOptionType::AncientBonus, "totalStrength", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_STRENGTH, true}}, - {ItemOptionType::AncientBonus, "totalAgility", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_DEXTERITY, true}}, - {ItemOptionType::AncientBonus, "totalEnergy", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_ENERGY, true}}, - {ItemOptionType::AncientBonus, "totalVitality", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_VITALITY, true}}, + // (CSItemOption::getAllAddState). It takes no option slot, so it writes no slot value. + {ItemOptionType::AncientBonus, "totalStrength", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_STRENGTH, false}}, + {ItemOptionType::AncientBonus, "totalAgility", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_DEXTERITY, false}}, + {ItemOptionType::AncientBonus, "totalEnergy", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_ENERGY, false}}, + {ItemOptionType::AncientBonus, "totalVitality", ItemOptionAdd::Add, {AT_SET_OPTION_IMPROVE_VITALITY, false}}, }}; } // namespace diff --git a/src/source/GameLogic/Items/ItemOptions.cpp b/src/source/GameLogic/Items/ItemOptions.cpp index 6ab8c2578f..b82ceb7006 100644 --- a/src/source/GameLogic/Items/ItemOptions.cpp +++ b/src/source/GameLogic/Items/ItemOptions.cpp @@ -66,11 +66,13 @@ bool IsOptionTurnedOn(const ITEM& item, ItemOptionType type, const ItemOption& o case ItemOptionType::Excellent: return IsExcellentBitSet(item.ExcellentFlags, option); case ItemOptionType::Luck: + return true; + // The ancient types take no option slots (IsTurnedOn gives them none). case ItemOptionType::AncientOption: case ItemOptionType::AncientBonus: break; } - return true; + return false; } // The value of a hero attribute a term reads; 0 for one the client doesn't read. @@ -111,19 +113,11 @@ std::optional FindValidSource(const ITEM& item, int slot) return source; } -// The level the option's value is taken at: the additional option's level, the ancient bonus level, else the -// constant's. +// The level the option's value is taken at: the additional option's level, else the constant's. The ancient bonus +// takes no option slot; FindAncientBonus takes its value at the bonus level. int GetOptionLevel(const ITEM& item, ItemOptionType type) { - switch (type) - { - case ItemOptionType::Option: - return item.OptionLevel; - case ItemOptionType::AncientBonus: - return item.AncientBonusOption; - default: - return LevelOfTypesWithoutLevels; - } + return type == ItemOptionType::Option ? item.OptionLevel : LevelOfTypesWithoutLevels; } } // namespace From 00d1890075e30ecb70ea5184c4423f8602296a10 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 16:47:12 +0100 Subject: [PATCH 15/17] refactor(items): one helper adds a set option's or ancient bonus's stat AddAncientBonus repeated the switch of AddStatsBySetOptions over the stat ids. Both now call AddToStat, which adds a value to the stat an effect raises. --- src/source/GameLogic/Items/CSItemOption.cpp | 69 ++++++++------------- 1 file changed, 27 insertions(+), 42 deletions(-) diff --git a/src/source/GameLogic/Items/CSItemOption.cpp b/src/source/GameLogic/Items/CSItemOption.cpp index 7eb6cc57bd..1a33fa634d 100644 --- a/src/source/GameLogic/Items/CSItemOption.cpp +++ b/src/source/GameLogic/Items/CSItemOption.cpp @@ -584,35 +584,44 @@ bool CSItemOption::IsNonWeaponSkillOrIsSkillEquipped(ActionSkillType skill) namespace { -// Adds the item's ancient bonus to the stat its definition's attribute raises (its effect); an attribute the client -// doesn't add adds nothing. -void AddAncientBonus(const ITEM& item, std::uint16_t* strength, std::uint16_t* dexterity, std::uint16_t* energy, - std::uint16_t* vitality) +// Adds `value` to the stat `effect` raises (AT_SET_OPTION_IMPROVE_STRENGTH to AT_SET_OPTION_IMPROVE_CHARISMA), as the +// set options and the ancient bonus do; another effect adds nothing. +void AddToStat(int effect, int value, std::uint16_t* strength, std::uint16_t* dexterity, std::uint16_t* energy, + std::uint16_t* vitality, std::uint16_t* charisma) { - const std::optional bonus = GameLogic::Items::FindAncientBonus(item); - if (!bonus) - { - return; - } - const auto value = static_cast(bonus->value); - switch (bonus->effect) + const auto added = static_cast(value); + switch (effect) { case AT_SET_OPTION_IMPROVE_STRENGTH: - *strength += value; + *strength += added; break; case AT_SET_OPTION_IMPROVE_DEXTERITY: - *dexterity += value; + *dexterity += added; break; case AT_SET_OPTION_IMPROVE_ENERGY: - *energy += value; + *energy += added; break; case AT_SET_OPTION_IMPROVE_VITALITY: - *vitality += value; + *vitality += added; + break; + case AT_SET_OPTION_IMPROVE_CHARISMA: + *charisma += added; break; default: break; } } + +// Adds the item's ancient bonus to the stat its definition's attribute raises (its effect); an attribute the client +// doesn't add adds nothing. +void AddAncientBonus(const ITEM& item, std::uint16_t* strength, std::uint16_t* dexterity, std::uint16_t* energy, + std::uint16_t* vitality, std::uint16_t* charisma) +{ + if (const std::optional bonus = GameLogic::Items::FindAncientBonus(item)) + { + AddToStat(bonus->effect, bonus->value, strength, dexterity, energy, vitality, charisma); + } +} } // namespace int CSItemOption::RenderDefaultOptionText(const ITEM* ip, int TextNum) @@ -650,7 +659,7 @@ void CSItemOption::getAllAddState(std::uint16_t* Strength, std::uint16_t* Dexter continue; } - AddAncientBonus(*item, Strength, Dexterity, Energy, Vitality); + AddAncientBonus(*item, Strength, Dexterity, Energy, Vitality, Charisma); } AddStatsBySetOptions(Strength, Dexterity, Energy, Vitality, Charisma); @@ -669,31 +678,7 @@ void CSItemOption::AddStatsBySetOptions(std::uint16_t* Strength, std::uint16_ continue; } - switch (option.OptionNumber) - { - case AT_SET_OPTION_IMPROVE_STRENGTH: - *Strength += option.Value; - break; - - case AT_SET_OPTION_IMPROVE_DEXTERITY: - *Dexterity += option.Value; - break; - - case AT_SET_OPTION_IMPROVE_ENERGY: - *Energy += option.Value; - break; - - case AT_SET_OPTION_IMPROVE_VITALITY: - *Vitality += option.Value; - break; - - case AT_SET_OPTION_IMPROVE_CHARISMA: - *Charisma += option.Value; - break; - default: - // other options are not handled here. - break; - } + AddToStat(option.OptionNumber, option.Value, Strength, Dexterity, Energy, Vitality, Charisma); } } } @@ -722,7 +707,7 @@ void CSItemOption::getAllAddOptionStatesbyCompare(std::uint16_t* Strength, std:: continue; } - AddAncientBonus(*item, Strength, Dexterity, Energy, Vitality); + AddAncientBonus(*item, Strength, Dexterity, Energy, Vitality, Charisma); } AddStatsBySetOptions(Strength, Dexterity, Energy, Vitality, Charisma); From 6de90970223b451479d471e50a4a760493680e4e Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 16:47:34 +0100 Subject: [PATCH 16/17] refactor(items): the ancient bonus lookup's size follows its names The option database kept the four ancient bonus indexes in an array of a written-out 4 with four written-out NoDefinition; its size now is AncientBonusNames' and an empty database fills it with NoDefinition. --- .../Data/GameData/ItemData/ItemOptionDatabase.h | 12 +++++++++++- tests/data/test_item_option_links.cpp | 10 ++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/source/Data/GameData/ItemData/ItemOptionDatabase.h b/src/source/Data/GameData/ItemData/ItemOptionDatabase.h index 860a607816..92516ff889 100644 --- a/src/source/Data/GameData/ItemData/ItemOptionDatabase.h +++ b/src/source/Data/GameData/ItemData/ItemOptionDatabase.h @@ -95,7 +95,17 @@ class ItemOptionDatabase std::vector m_definitions; std::vector> m_effects; std::vector> m_optionOrders; - std::array m_ancientBonuses{NoDefinition, NoDefinition, NoDefinition, NoDefinition}; + using AncientBonuses = std::array; + + // No ancient bonus for any attackType, what an empty database has. + static constexpr AncientBonuses NoAncientBonuses() + { + AncientBonuses none{}; + none.fill(NoDefinition); + return none; + } + + AncientBonuses m_ancientBonuses = NoAncientBonuses(); ItemOptionTexts m_texts; std::vector m_rules; }; diff --git a/tests/data/test_item_option_links.cpp b/tests/data/test_item_option_links.cpp index 1544be2a8b..e28d8c16bc 100644 --- a/tests/data/test_item_option_links.cpp +++ b/tests/data/test_item_option_links.cpp @@ -427,3 +427,13 @@ TEST_CASE("Option links order the ancient types before names of no definition [d options.OrderLinks(names); CHECK(names == std::vector{"luck", "ancientBonusStrength", "nothing"}); } + +// An empty option database has no ancient bonus for any attackType. +TEST_CASE("An empty option database picks no ancient bonus [data][items]") +{ + const ItemOptionDatabase empty; + for (int attackType = 0; attackType <= 5; ++attackType) + { + CHECK(empty.FindAncientBonus(attackType) == ItemOptionDatabase::NoDefinition); + } +} From 2ad2fa552c38b8290aa7464518088afcde043722 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 13 Nov 2026 17:02:54 +0100 Subject: [PATCH 17/17] refactor(tests): the worn items scope uses the shared character machine scope WornItemsScope kept its own copy of a test's character machine; it now holds a CharacterMachineScope, as the ancient bonus stat tests do. The critical damage tests' EquipmentScope does more (a hero of its own, the set and socket bonuses added up again) and keeps its own. --- tests/data/test_item_database_files.cpp | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/tests/data/test_item_database_files.cpp b/tests/data/test_item_database_files.cpp index 516001298a..850167a81c 100644 --- a/tests/data/test_item_database_files.cpp +++ b/tests/data/test_item_database_files.cpp @@ -2,6 +2,7 @@ #include "doctest.h" +#include "CharacterMachineScope.h" #include "ClientDataScope.h" #include "ItemModelDatabaseScope.h" #include "ItemOptionsScope.h" @@ -1599,33 +1600,18 @@ template void EditItem(int itemType, TChange&& change) class WornItemsScope { public: + // Every other place holds nothing (type -1; type 0 is the Kris). explicit WornItemsScope(std::initializer_list itemTypes) - : m_previous(CharacterMachine), m_machine(std::make_unique()) { - // Type 0 is the Kris: every other place holds nothing. - for (ITEM& equipped : m_machine->Equipment) - { - equipped.Type = -1; - } size_t index = 0; for (const int itemType : itemTypes) { - m_machine->Equipment[index++].Type = static_cast(itemType); + m_machine.Machine().Equipment[index++].Type = static_cast(itemType); } - CharacterMachine = m_machine.get(); - } - - ~WornItemsScope() - { - CharacterMachine = m_previous; } - WornItemsScope(const WornItemsScope&) = delete; - WornItemsScope& operator=(const WornItemsScope&) = delete; - private: - CHARACTER_MACHINE* m_previous; - std::unique_ptr m_machine; + CharacterMachineScope m_machine; }; // The game's characters for the scope, with the editor's hook that drops what