@@ -378,6 +378,53 @@ describe("TestDefence", function()
378378 assert .are .equals (15 , build .calcsTab .calcsOutput .LightningResistOverCap )
379379 end )
380380
381+ it (" ward chance to not break increases effective hit pool" , function ()
382+ build .configTab .input .enemyIsBoss = " None"
383+ build .configTab .input .customMods = " \z
384+ +940 to maximum life\n\z
385+ +200 to Ward\n\z
386+ "
387+ build .configTab :BuildModList ()
388+ runCallback (" OnFrame" )
389+ assert .are .equals (987 , build .calcsTab .calcsOutput .TotalEHP )
390+ assert .are .equals (1200 , build .calcsTab .calcsOutput .PhysicalMaximumHitTaken )
391+
392+ build .configTab .input .customMods = " \z
393+ +940 to maximum life\n\z
394+ +200 to Ward\n\z
395+ Ward has a 50% chance to not Break\n\z
396+ "
397+ build .configTab :BuildModList ()
398+ runCallback (" OnFrame" )
399+ assert .are .equals (994 , build .calcsTab .calcsOutput .TotalEHP )
400+ assert .are .equals (1200 , build .calcsTab .calcsOutput .PhysicalMaximumHitTaken )
401+ end )
402+
403+ it (" small hits bypass unbroken ward" , function ()
404+ build .configTab .input .enemyIsBoss = " None"
405+ build .configTab .input .customMods = " \z
406+ +940 to maximum life\n\z
407+ +200 to Ward\n\z
408+ Damage taken bypasses Unbroken Ward if the Hit deals less Damage than 15% of Ward\n\z
409+ "
410+ build .configTab :BuildModList ()
411+ runCallback (" OnFrame" )
412+ assert .are .equals (350 , build .calcsTab .calcsOutput .TotalEHP )
413+ assert .are .equals (1200 , build .calcsTab .calcsOutput .PhysicalMaximumHitTaken )
414+
415+ local poolsRemaining = poolsRemainingAfterTypeMaxHit (" Physical" )
416+ assert .are .equals (0 , poolsRemaining .Ward )
417+ assert .are .equals (0 , poolsRemaining .Life )
418+
419+ poolsRemaining = build .calcsTab .calcs .reducePoolsByDamage (nil , { Physical = 29 }, build .calcsTab .calcsEnv .player )
420+ assert .are .equals (200 , poolsRemaining .Ward )
421+ assert .are .equals (971 , poolsRemaining .Life )
422+
423+ poolsRemaining = build .calcsTab .calcs .reducePoolsByDamage (nil , { Physical = 30 }, build .calcsTab .calcsEnv .player )
424+ assert .are .equals (0 , poolsRemaining .Ward )
425+ assert .are .equals (1000 , poolsRemaining .Life )
426+ end )
427+
381428 -- fun part
382429 it (" armoured max hits" , function ()
383430 build .configTab .input .enemyIsBoss = " None"
@@ -945,8 +992,19 @@ describe("TestDefence", function()
945992
946993 -- Get the base + Shabby Jerkin to make this test more adaptable to changes
947994 local ironReflexesArmour = build .calcsTab .mainOutput .Armour - baseArmour - baseEvasion
995+ assert .are .equals (ironReflexesArmour + baseArmour + baseEvasion , build .calcsTab .mainOutput .Armour )
996+
997+ build .configTab .input .customMods = [[
998+ Converts all Evasion Rating to Armour. Dexterity provides no bonus to Evasion Rating
999+ you have no dexterity
1000+ Gain no armour from equipped body armour
1001+ ]]
1002+ build .configTab :BuildModList ()
1003+ runCallback (" OnFrame" )
1004+ -- Iron Reflexes and Prospero's Protection
1005+ assert .are .equals (baseArmour + baseEvasion , build .calcsTab .mainOutput .Armour )
9481006
949- print (" build.calcsTab.mainOutput.Armour:" .. build .calcsTab .mainOutput .Armour )
1007+ -- print("build.calcsTab.mainOutput.Armour:" .. build.calcsTab.mainOutput.Armour)
9501008
9511009 build .configTab .input .customMods = [[
9521010 Armour from Equipped Body Armour is doubled
@@ -955,7 +1013,6 @@ describe("TestDefence", function()
9551013 ]]
9561014 build .configTab :BuildModList ()
9571015 runCallback (" OnFrame" )
958-
9591016 -- Evasion from Body Armour is converted to Armour before being doubled
9601017 assert .are .equals (2 * ironReflexesArmour + baseArmour + baseEvasion , build .calcsTab .mainOutput .Armour )
9611018
@@ -967,25 +1024,21 @@ describe("TestDefence", function()
9671024 ]]
9681025 build .configTab :BuildModList ()
9691026 runCallback (" OnFrame" )
970-
9711027 -- Only the base armour from the chest is affected.
9721028 -- Armour converted with Iron Reflexes still applies
973- assert .are .equals (2 * ironReflexesArmour + baseArmour + baseEvasion , build .calcsTab .mainOutput .Armour )
1029+ assert .are .equals (baseArmour + baseEvasion , build .calcsTab .mainOutput .Armour )
1030+
9741031 build .configTab .input .customMods = [[
9751032 Armour from Equipped Body Armour is doubled
9761033 Converts all Evasion Rating to Armour. Dexterity provides no bonus to Evasion Rating
977- Gain no armour from equipped body armour
9781034 defences from equipped body armour are doubled if it has no socketed gems
9791035 you have no dexterity
9801036 ]]
9811037 build .configTab :BuildModList ()
9821038 runCallback (" OnFrame" )
983-
984- -- Oath Of Maji double defences stack with Unbreakable
9851039 assert .are .equals (2 * 2 * ironReflexesArmour + baseArmour + baseEvasion , build .calcsTab .mainOutput .Armour )
9861040
9871041 build .configTab .input .customMods = [[
988- Armour from Equipped Body Armour is doubled
9891042 Armour from Equipped Body Armour is doubled
9901043 Converts all Evasion Rating to Armour. Dexterity provides no bonus to Evasion Rating
9911044 Gain no armour from equipped body armour
@@ -994,7 +1047,17 @@ describe("TestDefence", function()
9941047 ]]
9951048 build .configTab :BuildModList ()
9961049 runCallback (" OnFrame" )
1050+ assert .are .equals (baseArmour + baseEvasion , build .calcsTab .mainOutput .Armour )
9971051
1052+ build .configTab .input .customMods = [[
1053+ Armour from Equipped Body Armour is doubled
1054+ Armour from Equipped Body Armour is doubled
1055+ Converts all Evasion Rating to Armour. Dexterity provides no bonus to Evasion Rating
1056+ defences from equipped body armour are doubled if it has no socketed gems
1057+ you have no dexterity
1058+ ]]
1059+ build .configTab :BuildModList ()
1060+ runCallback (" OnFrame" )
9981061 -- Mod form unbreakable should apply only once
9991062 assert .are .equals (2 * 2 * ironReflexesArmour + baseArmour + baseEvasion , build .calcsTab .mainOutput .Armour )
10001063
@@ -1004,14 +1067,37 @@ describe("TestDefence", function()
10041067 Converts all Evasion Rating to Armour. Dexterity provides no bonus to Evasion Rating
10051068 Gain no armour from equipped body armour
10061069 defences from equipped body armour are doubled if it has no socketed gems
1007- defences from equipped body armour are doubled if it has no socketed gems
10081070 you have no dexterity
10091071 ]]
10101072 build .configTab :BuildModList ()
10111073 runCallback (" OnFrame" )
1074+ assert .are .equals (baseArmour + baseEvasion , build .calcsTab .mainOutput .Armour )
10121075
1076+ build .configTab .input .customMods = [[
1077+ Armour from Equipped Body Armour is doubled
1078+ Armour from Equipped Body Armour is doubled
1079+ Converts all Evasion Rating to Armour. Dexterity provides no bonus to Evasion Rating
1080+ defences from equipped body armour are doubled if it has no socketed gems
1081+ defences from equipped body armour are doubled if it has no socketed gems
1082+ you have no dexterity
1083+ ]]
1084+ build .configTab :BuildModList ()
1085+ runCallback (" OnFrame" )
10131086 -- Oath Of Maji should apply only once
10141087 assert .are .equals (2 * 2 * ironReflexesArmour + baseArmour + baseEvasion , build .calcsTab .mainOutput .Armour )
1088+
1089+ build .configTab .input .customMods = [[
1090+ Armour from Equipped Body Armour is doubled
1091+ Armour from Equipped Body Armour is doubled
1092+ Converts all Evasion Rating to Armour. Dexterity provides no bonus to Evasion Rating
1093+ Gain no armour from equipped body armour
1094+ defences from equipped body armour are doubled if it has no socketed gems
1095+ defences from equipped body armour are doubled if it has no socketed gems
1096+ you have no dexterity
1097+ ]]
1098+ build .configTab :BuildModList ()
1099+ runCallback (" OnFrame" )
1100+ assert .are .equals (baseArmour + baseEvasion , build .calcsTab .mainOutput .Armour )
10151101 end )
10161102
10171103 it (" MoM + EB" , function ()
0 commit comments