Определенной константы BS_ с 127 нет в скриптах, возможно огрызок от старых версии, возможно что-то другое, в общем интересно.
Ну в движке есть просто состояния (
BS) и они лежат тупо перечислением в пределах от 0 до 30. А есть модификаторы (
BS_MOD), они уже идут как побитовые маски начиная со 128, 256 и тд.
И помимо всего этого есть еще некий
BS_ONLY_STATE со значением
127 (специально на 1 меньше, чем младший модификатор), который играет роль фильтра, чтобы отделять BS от BS_MOD в поле bodyState, так как и перечисление, и побитовые маски запихиваются в одну кучу.
К примеру
bodyState = BS_WALK(1) | BS_MOD_DRUNK(256) будет равен 257. Чтобы из этой помойки получить чистое состояние, можем использовать выражение
bodyState & BS_ONLY_STATE, тогда все что больше 127 будет удалено из результата и мы получим чистый
BS_WALK(1) без модификатора. А если наоборот надо проверить наличие модификатора drunk, то используем выражение
bodyState & BS_MOD_DRUNK(256) == BS_MOD_DRUNK.
Очень интересно было бы узнать, какое состояние хочет движок назначить C_NPC при ударах
Скорее всего никакое. Валидное значение BS, как следует из портянки выше, находится в пределах от 0 до 30, то есть от BS_STAND до BS_CONTROLLING соответсвенно. Варнинг срабатывает тогда, когда происходит выход за пределы этого диапазона, как бы отменяя попытку изменить состояние персонажа. Единственный на мой взгляд выход за диапазон может происходит в том случае, когда вызывается проигрывание какой-либо анимации, а одновременно с этим там еще переназначается состояние персонажа. Очевидно, что переназначать что-либо каждый раз нет необходимости, поэтому значение по умолчанию равно -1, то есть такому значению, которое лежит вне диапазона перечисления и отменяет эту операцию с дебильным варнингом.
ЗЫ так почему же ругается на 127, а не -1? Потому что -1 в бинарнике будет равен тридцати двум единицам. А при использовании фильтра BS_ONLY_STATE побитовым сложением произойдет то самое усечение значения до семи единиц, что и соответствует константе 127 в десятичной системе.