Skip to content

EHP calculation for mitigated hits with life gain on block is incorrect #9446

Open

Description

@cscullen

Check version

  • I'm running the latest version of Path of Building and I've verified this by checking the changelog

Check for duplicates

  • I've checked for duplicate open and closed issues by using the search function of the issue tracker

Check for support

  • I've checked that the calculation is supposed to be supported. If it isn't please open a feature request instead (Red text is a feature request).

What platform are you running Path of Building on?

Windows

What is the value from the calculation in-game?

In pob, allocating certain life nodes causes EHP to decrease, despite increasing every ehp metric. I have narrowed this down to an interaction with how life gain on block is being calculated in the process.

If I remove life from my character, as expected the "hits before death" value lowers. However, at certain breakpoints, the "Mitigated hits" number increases. For reasons unknown to me. Despite every other value in the ehp calculation staying the same or decreasing.

What is the value from the calculation in Path of Building?

At 3323 life, 1609 es I see hits before death at 2.49, unmitigated% at 22% and mitigated hits at 11.96.
At 3102 life, 1609 es I see hits before death at 2.37, unmitigated% at 22% and mitigated hits at 12.65.

How to reproduce the issue

Load the pob pastebin below
Toggle discipline and training on/off - you should see odd ehp behaviour

In config toggle "Disable EHP gain when hit"
Again, Toggle discipline and training on/off - no odd ehp behaviour appears

This works with other life nodes, but NOT all. Certain life breakpoints seem to trigger the issue, while others do not.

PoB for PoE1 build code

eNrtfVlz20iS8PPwVyAUMftiWkZdOPzZs6Fb8liWLMl2t186CkBBRAsEaADU0R3z37-sKgAEeAKUenZ7p-0IBQlmZmVl5VkX3v334zg27kWWR2nyfgftmjuGSPw0iJLb9ztfbo5fOzv__Y_Bu0tejC7C_WkUy1_-MfjbO_XZ8Ec8434hso_iXsR70yI9TwPxfifkcS52jPtIPOgHZ-eXF1c3O0Ys4d7vOPaO4fEkiIr3O3txlPEdY8yj5Dr170RxkqXTyfsdtmP4Mc_zT3wMBL5FhT_aMQqe3Yria8Uw-QUY5rkvkuBgBnsqMh4HO8aEJ8VIpMk5_zXNTtLg_c6nNBGN51HSfA7d-tu7y5g_iey64IVxz-MpUMPUMU2ya9mE7Bg5_AAsg8T4rTiNip03vbH2p1leHPIxfFyJTXZtatX_7IrC9USIoC8ScLkez9mlFexlJo7CUPhFdC8Osqg4GPHEF10wO0CjJuz5NC6iSRyJbDW8aTb6sIG4i13k2Lumy1yrZuomLXh8eHm9EstsQ6ZFP_qglKP9GGS7rg1kMerau45tug5muMI9u02iQqxFNF1qOXTXtSz4wJqNbkZeye9lGuVpsgXDlYjWoroE2e6ubZomdYlbD_g0jsFvdBqJK5GL7J4X0QYmsWM7Ft0FTXehj3VL6diLkvUDwnZrTdzLBL8Itcpf8SCa5ueiyES-Epfu1vLYz8CB7RUF90djkQB6cisU9moDRS3cm8i_W90SqUftnCf8IM2LzbKTkJciA3dYrEVA2N4lzoKnKNGvhZ-CP-3bYjdMVKN-jELRrREJ2aVbxN5d5gBL9D7darTYE_Pouitcb8LbMXQFcaYb5HU6jddCYlzr5HWxxm8zNjPmH2shsVNBHorH1WAINQiug8TMqv1rsqYjCDcIroM0Z_zdp9InrWHSdk1n1yWU2A5pOc2j08s19kBmYe5y9JRHPo_P-WM0no4h6t3wO7G6TWw3XN_H6HZUJOBmt8I-jjKxFeJBGgddEREy7dosIaCneVdMQjBpGucaebJGtuS_lcBnid-Z8JckUwFoXZ41h3IF1ihTOy8WXXKZdiulUa-O49buXGO3IilbfFqJZcnI2ET7KIQ_OoEU-4oXq7m0bdJ07KsjaEvEEnSdiF3cJNpBwAjtuiayHGQzl9jucuxNgrOs3Va73QTXCmzdhIYss2bxKBHZ7dP1KBJx0BuhYu6AT1bnH6gl-ib6uiEwl7fXSyJN1G6SqVG_8SzoFqm68YStWgxH9zxf55bNtrw0dCdRnQvI7AEhEBtKj5n7ztJfZe0Ud0KzHerM8tBxOl0dJx2r1QsNva4TtjUfUnTBeSWCqb82jNk1T3UhuB9DWb6pM_YCGrAax11wa_mpZPruMA1uO4tcNdIFgy3n73o6mYBHkUqxqYesGSqhSonWZEoULwJfgEqvM-1ZAzKkbmoALQJ3b6BOFTa0Yq3C2NiU2YryG5pZBrypBbSL8cKQnoPbkLWYmu84Tzv4nGOoTDuVpQpwffE78wPpAzA_klNVa-q7ZdCQDnVgJRPJb0-d6bfA1zVAZ54-mGbSGDa1sRJj1sxNNAY_mueHvOBGUCbRX3kW8aRAak5o7iHWE0WCZ_7oIyjC-53mt2Mexx44CXgq6b97o-Yh5aez8STNCiPmeXEleDwGwR7sqK97vp9Ok-KU5yPwAw5k55aNAjNgSFgmc0wzDBAKPeFyZlooQH5gs1CjHlTzmxrZ8SwAtF3hIOIjk9tWEJqOE1jYwjhk2CGOTwQH_sWj5OaSZ8VTNRuq-L3JhDB45X982VclJvnFGEOLEPa0Oufvd36XOZA5JMAV_tfwd2ZjawgVjoPgC6XYdYYUWmTwDUE1j4fYNSUcsS2Kho7FCHzBCFEyJNixbfmT42I0pMw0JQmTEncIFbMtsTA1h4yY1JJgUOmhIXEoo5I4lEtsSCimEs6i1LSgYRub_2rNvZ4FEJh3jCQNRC7lzBiAIYcONQsWMG4OkQsFz5BRSu2hZVIbD23G2BDbiNhDbFomHrrQlyEFTDKkUC5Al4Ezi2KQhAX9wEDUtodaNBaxMZAmkpxmmjHkmkNsUQc6AJDQW0xk84iYDjTpOq4k7srugSIMdeeoixkdMtfGztBBIFhQE4sMETVBXBi5DEStpMUcjBwgj1xAdV0ET2BU6NA2XTxkpoMl63JkAJXZwA0UC5IABkBqwRMYIwtJQQMZhi3oOzIdhoaIICDDmOtCsxhkhImJbZAzqNoQY9Ay-GzCIDNmQ3egfQJsU4ZldzCITcoXJIZtCzQGBmloYRApwwTQXcLgJyTFjSCrpkMCuuoMXQrMWZQAE8yBrg6JzSxX_ghIVI0dwVQOj4VtSZVRgHctIOu6ICmtaDCgUsgAgEENgR2TWNZQa5orqVqW7ALYHJZsIwAmLgwgSBsU03KpO1ST5cCgHDpoXfaAIhAWAuUEzQO25F_QYRhqE0YBRAODpgShyNqgM8ANBeYRAzaHWkkRSADkjqEdyLlBURwpemlFUFmAcLXVgJ6CkiHqSm1AIEv4axNTCp0Cq9Bb-B1GGCjDCBNilusSUt_ByRZg0Y31CGz_wmOw4kQmxuC45EQNz5722nZiKqv_27svVx_Vh7-NimKSv33z5uHhYXfCi1EaikfII3f9dPxmAkjgL17nd1Ecv5btvdmDf_u35wfi9bVzdDy6js0foX14G9zidP_LaXr348fTT4l5u-dcZtfub2efv3w5-fH64p4gQh4R-574P3-1J9_C-_CCutmH1z8VB27wcOJNvhzsnbCfc_z49aeTJAx_5ePvX278X8J8f2o-pj-Kg1-9CT64-voj-Lbv__zT5UmO7_85Pv_N-_SD7X_89B2spvh6F9n3xfiXm48XhcOffkwebi8u90fB8enx0w9-tnd1b33ABzc_v8aXd2eTj_sRP8nHp_bp94l1cT_KiTWKbg4-fz49-ie7-fU7no737u6mIwgPx6Pz8eNRcTn-9vnrt8Pb9IJ_uD_7Wlx8GR9ienbq_urio6vv9ye_3oZ7kw_B5d5Pdvzrvnf84e7wp6vv4urUxx-K2LmIb_PkgFwffHi4Onyc5Ce_nB6Nb8_27vYObg7P9osvk_Dy0-3hQ8Cu9n9MfsZheHL8ELlBER8Erm3uZ5_T0W_fzz8cfb_--cBjn1-z73dfgP4B-hl_uH3_Xg3sm2pk3-k1rVwPc_nNiAoxlnqAtL-UH5Xj0kFzEQ6bM0DlfErAd2-a5N_JpCmLwP_q2PtGRhUVJWXYkR-upQrlVQCSX65FoQMuhKsTMc73nyDFeb9TZFOpvqP0YS8uPk95HBVP8ud6aS8QIZ_GEuWjXtJL0mxcz1w1fy-xdQLTbOVYVpLtKXvVoszJNdzN00TGkr2PH8soWXJsREEVOcuHEK09yYVeR9yb9e-Axz6QSKJYrmzKOZqg6t0cZAmUx6lccBLxWBQ7RpT48RTknpSJogYqBwk4hExIZS1yYPSy40V4M5omgcjATci0oyR7qwfyXBQ8gFTozRmMbP5GyuKNah0-LeCXi6XYXGBduYKlbf7Q0pa_HeohAM3h4zLb0OBGGho1gqZ8Eqcej3FLUPoZqtr8MRvHN8sFcB3dRvFFqBLa3r1vI3foehthfb8VrOx2Cf2Cnb4RY1DSopzz6dvrOewO3Z7DWN_vEtiooF-w33sZmI5fTlz07XYbuUOv2wjrO61hjQp4-z6_0_z-gW7mm-CTNDFQP0dznKV5sQ9us7fcG5il0N3VMm8Arxe4AjQ05HM1TLV-HiWQTjUFCxJqOprpeJwm9ZzESRqL8c4CqsLq64WWUi5lxVptVGyIYB58pcdaSnyD51I4Ro1ktNp4Gbet4-0BVJ_fRiLRM4V6Oaaz-OqQLalctGmU0iPrBLOag_XikSjGA-AYGskosf43G_1-mhZ5T4uPoceHPB_1t_gZZgc324DeYPIS0NCQL6-KamoWhtbngdhCB9voZbeRu1H_2ngb7FLCGjXwC8rgKFZzmDyG4HCXiDzvPeZLKHQY-yVY60VQIxgzjH-L-6-S3stpBiRexvHP02wIrOXz9x6j_Ag4F9dpHEQiq_CUg96cp1fku6bpFfyfIInB_VyaTkn1fHH_MN1C7lIstBA2mLaCNSrgl3dvx2qeV6925Vv4tyZ-H_821-4GD6-AjRq6vxjwJjmcp9J_yNmC3iK4SPKYT5XJde__rL31XZ_BPaPT_e0ObbY6NMshgqe6wuljdpfQROILvXkxLn7qbXpNAp1Mb7FF9ZNcG1ELBuvHosQ2FLr0iIdRnkcTtT-0x_jUTc5k3V1PT58maTES2TjiW6iqTkz3bmEs5YIS8CGCPlrban1D3GiC_gEGC5U1T8T1tJfLrgXRwu7is5c0urHyB1CjhH15x32W5JMoK3Wvd__V5gsRqJ1VPca_1ej6_rdA_4DxrzO-yyyNo1BsLYpVhLprxSoKXVPWObQ_KsjL-hSq9q2DvMTvH-LrVjuF-Br63xrt-maZwMK9yLebkT_zxdYFgcLtMROv4Lum9wp4C7GTTY4K4m1UbOOkm7tFLpLrmD-Bahxn6W8iOUrE-KmPjdZcbPBaMrwruD_CY_uZ4LkI5EmPtDzpsYVYWnQuajqVYTodvPhSApv8eYlkSCypMBXe_1lT3dtijquF28FXtuC7muredlNdHcR-kRj_lF_P00T546PHSZyqTa09xiOHSsAXEOEkcrBygDYOSVP0lSjXzBlJl1A32cjrUVOIneSmnq2bvSg_XotCLWnrpWy180tqRLmmLT9XS9rTXOiDMnqCQj3WWioXmQteHEZgTeDvfLnIrHqm2pE09AqzqyVzxeUkzFvjau_qaLAfy5keY1_wIB_sjT1ZI4-nsSgGCk-thr81sDNQn67Ej7cGcgdn40kc-VGRw7fBK4yMIjWuC2j7thjBd_mVgwpAtZ1F3rQQ-eAVcuXTQ_EIOgHND_aCIDeIfGYb1a7eatYbHpaF-uCVxeTXsV6IN-TmfyXI8zRQR9SMTP4FCe-ynXIdvRT1Sgi8EYJshKAbIVi5Y1BZ-GwgSh_xfscpmcHtQfny6ezzl6PBzUjoRRJpq-eCy7WSwWUW5WMuFwM_iAcRD8othm-1VOpvemd7uUg6eywT9dk3XWw3kPRWcuOKy-SpATcbwvqZVnJDnns19Dbj2W9zQ9nksVrymf9FbvldeCg3Gi9Cyg21K57qfbaKmWsRQ1SBMFODOAN9HBLYkJnA4GM0jiRAkUoFbmizOfi9HKG36F-XeqeSUW4ziaR0JBXQ7Tw1bmHEC-OVUs_zpnrWFHAnCuTv0o2VgbE9djUlsgUvarxrCrQTBbvJS6kiNQnWn8ScVtWkrG79WeZIahp2Jxrs78Ys7WgortJRcFnRnah0uKbsdKJsNTs6r_Y1Lbc_rQVLmamk2Z9a07pmhFB_Qk2LnBHCW3DUtOIZpY46Tv8ulWLB5v9MMWENhLURwt4I4WyEcDdCIHMzyGapos1iRWR5nNSDspivfIUcQ5RTqOnD4JhHxSicxobe4TbQPuutwZhVft4HnSsP10WxAA-_65omGbQcLQQIa9A8ELYMybIHX5Lox1QYZ4dvIT8LsYtN7vjcpqZFTY-4vhvygCBEqXAoDxjmSAgzsGlIAkswajqM-YRz5tEQghR0C2z86FEeBjBkpwdHXCbMEPG_pVkM6ZF62MzDHDwo9x9CTmYOyt2Sb4391_L_SSNJs0kzrOEBWKBcf5tLtMIsHRunAGIUcqOBwfOWv3BaZiv3JqijKIPfQ3mMYJqJ4F-viLncIF-5ynuXQQQtiSyGnAJvB7xXiLkL6Z46RCentoRhkV2kHhoTEJTejjxwm6Svi2miCKujWkZ19m7wu5_xsJAMI6IZlv2UgPOc54Pjqnd6AP5yLf1dyzJzJkvM-VAGFShoYIwGFxO59g5D0rQzsB0uAkw83zeRG2DP9ZhvMUu4yKM2IZhRX1guCjjnyHJdQn1CA9N0XAszi9st87Gs1eZz1TAeC7crHFWrYFuqDbWaFqLqHrl1IleqVBUtLmuppNpbUZoUxmtDvWrJkWQRcRd-njU3wHSFbVLUykvqM5yV6VZ2II-7ymQNvMJCM-AGjh6LjLdD9X-aHSzTYbpMh0U-0e7pRiRBmgzO07gAZ_pTOhndSmk39dn2Obc9T_gOc5AZOtzDhJvcdJkVQiDhLnc86ns29pknAogdxBEhodRERMizJO1wwGb6jHDb4SO0JJf_kotcz4MYxISYyTNVYKrtT1r3kNJyTFrpXpmQTSUl78koRlFunMieGSOwXIO0dTEF-0gfktr3yux_HQ2liZQqVWy0-j-shctGny2bQMnSNDBuIGTcDQ6yac4DiExqT1ydjGDkrklG0HwuQtnaXAQ11YmFgQku0RSWE7o8cIXleYzbATNd33ECxh3kMM8hfkBYCNmH46HAc3HAXYzhB2-7NMRG69KQlielba3UY700F6mHe8EpHmbpJDeu_RQ4lFVclk7B2T6MpFcbp_cAOVTHGyUKLrOCfEBIx5QDOQspxyvMZklCM6nBlno-Y7H546pUSD6fcVKd6i0dMqJd0pe_cpCXyUGspbNtx-k09tIsMfZFJu7-i0_S_P-pEZxE4LluHtLX10WaCONKTmI0rM_xbIdx1w4Dj2I_wG6I5QlHz7OYw5nt4TB0ECQuWNiW8LDlMxtTcP0Ot0OCQtZ25qhhN2BV7TlWpBVP-UepH8s0MC8TFSohCW050-WJCrbXZiOviNU0DTWjJHc0G0_pVE_yczAjaf3KqsZPQ6AWAtcFtGKIH9PonsdK1SWQkcIzDk4mAZ8DIUBhDH4fTwsuExJ9CZwmFEGYqtsoJ-SHRiC4vHdNzumA_yhGIsp0MQCuo9lX8AzQis-TJC0MTfbPYUDWasW1lyYeci_90diLwT9fpnGUj1S6GcnxKN1bOQMHOgQVYfllMQo5df1bRyGysSKm4NybxsAc6iI_9FHosBBSbyfwXTvAoUmoPN3MfDNkOECE0cCiUA17UOwhCF3EAyjKB9cjLqu6xaKXLY82V69PWiUvnV-XAD3x1dSe0v7yaox2Om7ZczNTJbRyvwMEyfrcszY6wstmO5cEGZn2L4knVhffX34o1V4p_ENlhJrPRnHL2m5isbj9K5LMR5Jl5uYsMbeT-GkyMuTlP4NLHvMgSqpIccqnnsju6oQP2Wumn2zbWZh-ApvYYG22C_bbTPx8yOGIoFiEdmD52EfMC-3QpR4UE0wwBtWwcEzXE54wA7BLGgiLBCY2BXIo5lvOP60ooE9k2qeSv_3mHJQzV5KYXSehFiJRe_6onMefn3QnrFvGRxuxtJW_2cuTProm6euWvtUGatNOLP5lpF2MdG49-3zv5OxgcC6CyK8M8_NUXkoaxdJ9QpGb35WJA1hsJlrTucIzTcyYx1wHhyykZii46VjMMv2QEajUkYt9xxShRUIrDFDgcGRavm-FOHR93rISt2UkjWKoHZ9qpfgidUG59PK-GSNTeVI4jWNVx8-imNx2C0mX7ouGngUDmR_Bj3PLW-1Z3Hb1YQRT7QTUPpwXUpllQ4XMZWOl7tlR7asrJmKVYbYHag88YJE-RklztEIEWYVvOo7rBcjDKLR9myIPvhMPhQE1Gcfg7lxqU8FoKO_FAccYQJ5h45Ai2vZppDFczRzcYu2VYQvcQKY3vRp7Y7mxpDJwKOO0BI0oN2TSmUFmdl8N6uySP92_SGarctt0hRSkQqN9noqpGJzIhS5wvuPxFFLXJzns-pZjI0wzw6kKXCMK9WyKLoQ1iPg3-I51w4yWxM1LqbPQqXxSxU1Db6mq4yVZEy4dky3kpjbaEC0h3XSbCuPZlu_5NnEh0IbypiNukzAQdoCs0ILM2OICNMpBoRUIhLlHAmYFTmi6jLkcBeSloyXES6M5TeLMTZOYu3j5zKy6qRDGXMXIEMJPK8f9kiRSz-oSSuoLrfUFFAiibHvxZsVq6itC2rt1sNsttC7ZrfMKm0vDajt33hg5MV6aPBykCcDpvRyttau_FnH-kAkUtGxR9lsqt7wmweBU8PsnY1_ErTlvgj0H0wCFLgtNSwgPXLBl-zwwuefwADsWGJvlWTzwuWsG3GeOB_lryE0uAh7aq6dJGJ3fima1t6IR3PyuFGym1K_0ZHelrfNZIlqRJTqrs8FZIcb-3NvWtpukQGRplPfkffky5ziM7qNE6BK2jvLXelantUjCkYucgAtuO45t-i6yw9BGtsm5SR3qsCBA3LTl9XYmcnwM3pr5lJnEs03XRKS96NeYrG5lY2Y7vDNzTXhH7dqiXtqQyz4KEzpSP-QT-SYIcDyJVIsifloW0tWLFqT6rAvqFdAyAgdplk0n0vOBy0yDtXS4SjT0yssc3p96N6VikfZUuqamQbz3MBcmCQJs2ZDfSz8UgkqFPmQMAoUepI2hXLNDFFIG3watE8S3bHm_oifC1bsz8DpVQ3-cqv1Pro8htrQi43nqj8BFVlXZ9ZKCDFIKyAzjOG0HDsogSWMuQUwgED6HhJ9YtmVDEAl87GHqeK5jCfg5cEMUuJZv-gSKAc9yQ8tfmY21_IC9TVmmFrJw_Utdg0FdKbMsaWg8Kae4mbUkefq3VV7Wyg3GN3zc3lY8v75huyL0MXIYtwRjtmNhaoO_DUNsUwKFlgWOmtiYY0pFaErXjIVnUweDbQSej9t-mDSEThbWN3SSKDd7zk61NectX2G6AUKSmOXCx5kQv4lhufQgA3-5EkBbozEjVS0eRJAnqNkotVASxfJnlUoP1OgXTxOhjq7UiCWMzK_1eP_v8ahLFWLZUsKn6diTi9iTwZ64hQL1ZhovbF1w5WWcNqOCYmbahPkBlFlBYDoWDWgQuiHH2DJDguEnALUt4khtESaXl5Ja4cpJfdYufl6xDQPd3sVwqatraUzXUP_F8uaOQTURvmLH7-x1TaA1rTpkpkAhJLRy_8x9JCf1Jflv6di7jcIi37ghorXgq0_HlLX-4VSf0RwsY3sZwdne19x4hWvJ1EnrUgk9UwOfp1_OSodTTfPAKExvb2MxuEieHqvzJs2ozK3AdaBACIntOjYWPmR71PI87tvcA-WjiItQWEQEhISmoL5874jNEOLccXx7y3K9NfmD2kpZeodLkYhCRuJc7mJYWgO0d3itmKp-RfHcmZm54zGv9CruWVIIyGNuxeJcc0n5EAShxnxOx_N6KfYczOw2kZunz3mg1CySFybCcMxJBHQuSCEkAOhAr7yW8wjFiJeaLc0K8sxY3juoUyo9q1CRnBN8k-J_QPmzbNGIQ_p9EkfjMfgaOTcNNnsQT9XJOH2Kp7mEiu0Q0hvbpxA_iR14jvB8F1Igz2EoNG3sW9hlUDJ7QmC5odgjluP5duDKa5Qpam_SsVZmoGSW5KgdA9Rob72f_YwMAJD7CJu_y2HlmntDT2q16EmXN5Y-am4_v3JiEOxbznG2ZD9XpnBDH1YcrKE4841goq0cS-1v0Cug9dbIdY2s7Kf-PXtaDXEt4vD18TQOI_VWOBkyJiPhP_0HKDw2tz-81kwsXAsqL4HNQBDKOAwVDj1GfeLI268JQraN_JBwxzUJh9jgYg8JyPm55wSmb7vziUXns17PPubTZYjnBCfv-115lLN1EXCc6huTL70vVx_lsdNEvQ5U7S009rynPOeV_anbqsrLleuTG6sIVLd0ztOwetBoXNgzT4b2ZwUb1w98Mk8IvQw_7KX4wS_Dj_VS_JAehPSCy3MkrKv1hgwQ7YbSYBOx7fjEvflsKCHqbBAzHLIJReesjUacTRj1FdzVHehdx36GYndWl2fIr77toOoZ2qzr-gLQEmHjGMtZhqawrU4ITc3rhkG2MbRnOLPluvsSXLAXoGE9uye0txU2BhmR7Rrt03VdMDcapdu12UdU2qyfF7qWxHP0bBbwtmHm2S2T3kPWtG17u0bpcyVOn91v9lwW2LNZsJ7LgrVNHvns5E3ExR-U_OFnsoFfSh7PZYQ8E58-E589E3-pYqmfzgJAniPTeolMSVXPNzTfK9O7wiEvo1Rkm77o99y0-tJ69U3fvtAXqPj6DmrDTeNe1tA7c2hw5j5jpNALCAm_VL32EiOGXsofvVgVyl6Koxer018shtGXIvQSNcCWvmuG5Wzb8rOT2UXW9ZyYvvtMvkWSB-JavRTzm5DzhuX7v9S7Octb5eQFb4Z-p1brTafGg8KQC3ryLapm3cBSorpd9Um9zFKuDj_sBfdy4eYmTePmC8HkeVK1VAfVfhzvyK0WIglar79UF9jpmb1kMi2MZCovUFNvVtHiUFfI_aIfl4xpSA8aEzypbqAroYEZfTF_CzYv5JLK-52j4-Ojg5uzr0cV_DjK_V-8aRiey_vqNMq1UC9ENvw0jvkkFzXDRj71cv3j-52vkXhQk56HouBRnOuZx_JCOnl5Vi9qCu80KvSkqKY1-9qH0tGjyOQx3m8wbFkkSr7qb72Z0izIrTLyxa2a2mHar3d6LUEuI6i3g2tJyfWEXlTk6lzZHfmxF-7ZeMLjsuXyc29JyG0L-UT4URj50q6aQy7fS6ef9ZKL708z7j_V491643Q3Gmp_myagP_ZB1jveNXb5uZdU1XaQUqr6cx_0Q-Hzsu_6Yx_k-oXzaQKC01TqZ70ofUr1-4XAaKq9KprcUSzqB30IXsgb18t39mpK5-Bmqgc9Dae8tE3TaXzvJasoLEdJfeqDqu8mV32Qn3p5osb5glKgzSd9SMkTg7Uj64eqtxWU8mu9drzjEFQ5QFB_7iUEfaC17H_5pZeR6JcF3KdRoHyDNpe5h_0cRipfEvJcModpcPsC3KizwNXB4lpQz6Goqp9yvMvPK9HLy2sb2F-KSO6oeh4RaWXPoyCN7XkUbqJEHd7YmsBVnYhcrc1BFjGrl8TrUN16Y3wn_Prd8VtT0HeWb41evhO0E_Yq_19tKpoFgPpJL21OIZuDhKN8K8GzaMkDQtXmuT6kFgWkejjnk55HS8fZFxJa63WBM3-iH_QmBHnBaZ15bktJR__oXpwKHhejSyhenkewvKMWOOvbzyWmLvx0OuFJUFG7aKf720oPClkguj-N4uBQ3kCYP4tLtTN4HZ13b6pq8t1BmoTRbXkFuP5SXgKu2quftLaLtCtQeYW_LhLlNpNI8qA2QpcX7r9p4iytRWs0xfj-NJObeNp4VV1qdN4rqHbJl7vjn-R0XbndrG50mhfpGKrZvN1S1StcV771_l3If8uzD9XrDgtQCCGPQmygoV7BlKvqbiSCm1S_D2JpD_fiKOMVnselZPqIEHq8_yTPJuoxX85f3dbHj3VLUNrLwY6nj32aKy_SUf1Z3laHES-PkgZ9EMurgLZuuHybVF_8aS7qoNuKeD1GR57yWzc6HUjUm4HX0am0sF4J0O800LrYe5Cq129txpOq1HzzVN-WyqGt8C5j7osRaDRYdj3pVa_UCIkhJdqsWJYjoQpHNXCtX863rpFWG3ImpTnr0Imxepw2c4cxRQudak5rLUcj5gKXm5Ec2uZS7mZcKzkTUdJCaRVoG8SdN942D1JvmMwyNAu5jttqq1lMrhDCguAuRdJjmKS_3DxCZAFnQytkuS5swEJsMfJ8i2TuJwKltAfyEJ_cCbx2iGcLgJpdeex-s2YsaOEslKxDs822QBtzlh3bmfNo6xtrYZYuEBIitTW2k0X7Oq2ZQH6S8fgmuhWZkmovlqsNups5pjXHk_qO3MPyDEc3j6Xuo9zsshq6I2LRqY15ByL1pDX786bOAXXmqL7JjzeZEHJy3_gtTcc_g8qZeJfIm9oIMYkp3_iuVkSui0yu2Uign8C8XWfXpg5xHOxgjNe9UUahfNQv0tELSu8-pYVQiyCSk_LLuzeXvBhdhCp7BgX6x-D_A4snBH0=

Screenshots

Image Image

Activity

  1. cscullen commented on Feb 2, 2026

    @cscullen
    Author
    Image

    this is the odd behaviour. ehp decreasing when adding a life node that should be strictly an upside

  2. MichaelB113098 commented on Feb 22, 2026

    @MichaelB113098

    I did some local debugging, the issue seems to be with how the numberOfHitsToDie function is handling life gain on hit when accelerating its calculation.

    I commented out the speedup block to force the function to individually apply each hit and the outcome was more expected, note when I toggle "Disable EHP gain when hit" the EHP between the accelerated calculation and forcing each hit to run individually is the same, so it is something caused by GainOnHit.

    I suspect it is something to do with the formulas in this code block, which would only be hit when running recursively for speed up

    if (DamageIn.GainWhenHit or DamageIn.MissingLifeBeforeEnemyHit or DamageIn.MissingManaBeforeEnemyHit) and (iterationMultiplier > 1 or DamageIn["cycles"] > 1) then
    local gainMult = iterationMultiplier * DamageIn["cycles"]
    if DamageIn.MissingLifeBeforeEnemyHit then
    poolTable.Life = m_min(poolTable.Life + DamageIn.MissingLifeBeforeEnemyHit * ((output.LifeUnreserved or 0) - poolTable.Life) * (gainMult - 1) / 100, gainMult * output.LifeRecoverable or 0)
    end
    if DamageIn.MissingManaBeforeEnemyHit then
    poolTable.Mana = m_min(poolTable.Mana + DamageIn.MissingManaBeforeEnemyHit * ((output.ManaUnreserved or 0) - poolTable.Mana) * (gainMult - 1) / 100, gainMult * (output.ManaUnreserved or 0))
    end
    if DamageIn.GainWhenHit then
    poolTable.Life = m_min(poolTable.Life + DamageIn.LifeWhenHit * (gainMult - 1), gainMult * (output.LifeRecoverable or 0))
    poolTable.Mana = m_min(poolTable.Mana + DamageIn.ManaWhenHit * (gainMult - 1), gainMult * (output.ManaUnreserved or 0))
    poolTable.EnergyShield = m_min(poolTable.EnergyShield + DamageIn.EnergyShieldWhenHit * (gainMult - 1), gainMult * output.EnergyShieldRecoveryCap)
    end

    And this is the block I comment out to force each hit to be calculated individually

    -- to speed it up, run recursively but accelerated
    local speedUp = data.misc.ehpCalcSpeedUp
    DamageIn["cyclesRan"] = DamageIn["cyclesRan"] or false
    if not DamageIn["cyclesRan"] and poolTable.Life > 0 and DamageIn["iterations"] < maxIterations then
    Damage = { }
    for _, damageType in ipairs(dmgTypeList) do
    Damage[damageType] = DamageIn[damageType] * speedUp
    end
    if DamageIn.GainWhenHit then
    Damage.GainWhenHit = true
    Damage.LifeWhenHit = DamageIn.LifeWhenHit
    Damage.ManaWhenHit = DamageIn.ManaWhenHit
    Damage.EnergyShieldWhenHit = DamageIn.EnergyShieldWhenHit
    end
    Damage["cycles"] = DamageIn["cycles"] * speedUp
    Damage["iterations"] = DamageIn["iterations"]
    iterationMultiplier = m_max((numberOfHitsToDie(Damage) - 1) * speedUp - 1, 1)
    if iterationMultiplier == m_huge then -- avoid unnecessary calculations if we know we survive infinite hits.
    return m_huge
    end
    DamageIn["iterations"] = Damage["iterations"]
    DamageIn["cyclesRan"] = true
    end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions