In status.c, at line 8682, the third assignment causes a side effect of making val2 negative if HP is odd; the fourth assignment will use this negative value instead of the original positive value as intended.
case SC_ZANGETSU: val2 = iStatus->get_lv(bl) / 3 + 20 * val1; val3 = iStatus->get_lv(bl) / 2 + 30 * val1; val2 = (!(status_get_hp(bl)%2) ? val2 : -val3); val3 = (!(status_get_sp(bl)%2) ? val2 : -val3);