В общем, в итоге получается, что проблему можно решить несколькими способами:
Подвинуть ненужные серверу клавиши, вроде IN_SCORE, за пределы 16 бит (/common/in_buttons.h). Можно использовать переменную int impact_index и структуру vec3 impact_position, в которой вообще ещё три переменные (imact_position.x, impact_position.y, impact_position.z). Но, если нет необходимости проверять состояние клавиши, лучше сэкономить место для других клавиш, и обработать её как консольную команду в функции ClientCommand в файле client.cpp. Команда, поступившая от конкретного игрока, будет обрабатываться кодом, относящимся к этому конкретному игроку - проблем никаких.
XaeroX, Дядя Миша, спасибо, проблема решена.
Да, и, Дядя Миша, к вопросу об unhandled exception и segmentation fault - здесь, скорее, второе. Unhandled exception возникает, когда какой-то объект вызвал exception, но он не был нигде обработан. А ошибка сегментации памяти - когда программа пытается записать или считать значение из сегмента памяти, ей не принадлежащего. Когда мы увеличиваем размер структуры, какая-то её часть выходит за пределы выделенного сегмента памяти - происходит ошибка сегментации.
На линуксе, когда я подобное вытворяю, у меня всегда выходит segmentation fault. Ради интереса написал консольную программку, вызывающую segmentation fault. Исходники одни и те же запускаю на разных платформах - на линуксе segmentation fault, на Windows - сообщение с отчётом (Отправить / Не отправлять). Windows просто не показывает, что конкретно произошло, да и в отладчике тоже почти всегда неясно - здесь, спасибо Microsoft, об этом можно только догадываться.
0xf35 писал: Windows просто не показывает, что конкретно произошло, да и в отладчике тоже почти всегда неясно - здесь, спасибо Microsoft, об этом можно только догадываться.
0xf35 ну можно по возвращемому адресу сделать некоторые выводы.
Например Acess Violation 0x00005 - это вызов указателя на функцию, который не проинициализирован.