Здесь сравниваются значения двух старших и пяти младших битов. Значения остальных битов игнорируются. Так?
Здесь сначала идут вычисления логические побитовые
(Npc_GetBodyState(slf) & (BS_MAX | BS_FLAG_INTERRUPTABLE | BS_FLAG_FREEHANDS))
и
(bodystate & (BS_MAX | BS_FLAG_INTERRUPTABLE | BS_FLAG_FREEHANDS)
Рассмотрим первый вариант
const int BS_MAX = 31; //11111
const int BS_FLAG_INTERRUPTABLE = 32768; //1000000000000000 (1<<15)
const int BS_FLAG_FREEHANDS = 65536; //10000000000000000 (1<<16)
Итак, после этого вычисления
BS_MAX | BS_FLAG_INTERRUPTABLE | BS_FLAG_FREEHANDS
получим это
11000000000011111
Затем по операции & сравниваем флаги с Npc_GetBodyState(slf). После этого ни один флаг не испорчен. Проверяются только флаги установленный в маске в 1.
Смысл проверки в этом выражении
(Npc_GetBodyState(slf) & (BS_MAX | BS_FLAG_INTERRUPTABLE | BS_FLAG_FREEHANDS))
такой: если в состоянии нпс включен (установлен в 1) хотя бы один из битов 0,1,2,3,4,15,16, то результат будет TRUE. Далее по аналогии.
Ты сказал, о двух старших битах, но в инте 32 бита от 0 до 31, а 15-ый и 16-ый биты находятся в середине.