C/C++: Сделай свою моду для Кваки
Дубовцев Алексей
Xakep, номер #057, стр. 057-088-2
Для компиляции всех этих сорсов тебе потребуется компилятор. Это должен быть Microsoft Visual Studio, начиная с шестого и заканчивая последней, 2003 версией. Заходи в каталог \code\game\ и открывай файл game.vcproj (game.dsp - VC6). Это файл проекта. В нем объединены все исходные коды, а также настройки для их построения. (Далее я буду вести повествование, предполагая, что у тебя Visual Studio версии .NET и выше, с младшими версиями придется разбираться самому, благо там все очень просто.)
Если во время загрузки проекта он начнет ругаться сообщением, вроде Visual Source Safe или что-то в этом роде, не пугайся. Это он волнуется по поводу распределенной многопользовательской разработки моды (они ее пишут целой командой). Тебе на это наплевать, поэтому не стесняйся и отменяй. Далее, скорее всего, возникнет еще один трабл. По умолчанию исходные коды содержат ошибку, не позволяющую тебе их скомпилировать. Уж не знаю, сделано это намерено или случайно, но факт остается фактом. Ошибка в исходниках есть (хотя и не во всех их версиях), и исправлять ее будешь ты :). Вот что для этого надо. Для начала сними атрибут read-only с файлов, которые ты будешь править. Затем отправляйся в файл q_shared.h. Его удобно открывать из окна Solution Explorer, развернув ветку game. В этом файле отыщи строку с номером 103. Она должна выглядеть следующим образом: #ifdef WIN32. Из-за нее и не будет компилироваться весь проект. Тебе же необходимо перед словом WIN32 просто поставить символ подчеркивания. В итоге получится так: #ifdef _WIN32.
Вот и все, теперь проект готов к компиляции. Выбирай пункт меню Build->Build Solution или нажми комбинацию Ctrl+Shift+B. Если появится строка "Build: 1 succeeded, 0 failed, 0 skipped", значит, все прошло успешно. Результатом компиляции является файл qagamex86.dll, расположившийся в каталоге code\debug. Весит он примерно 450 килобайт. Этот файл следует скопировать в каталог baseq3 твоей кваки. Теперь твоя мода готова. Правда пока запускать Quake3 не имеет смысла, т.к. мы не внесли в моду никаких изменений. Вот этими самыми изменениями мы сейчас и займемся.
Вот оно - счастье!
Итак, давай что-нибудь исправим. Для начала откроем файл с именем code\game\g_weapon.c. В нем расположены функции, отвечающие за игровую логику оружия. Найди в этом файле строку с номером 851 (нажми Ctrl+G и введи необходимый номер строки). Здесь расположилась функция FireWeapon. Она отвечает за выстрел из текущего оружия. В этой функции нас будет интересовать конструкция switch (ent->s.weapon), отвечающая за выбор типа патрона, которым стреляет оружие. Найди там строку case WP_MACHINEGUN:. За ней скрывается функция Bullet_Fire. Собственно она и инициирует выстрел из машингана. А теперь поменяй ее на что-нибудь другое. Я от нечего делать поместил туда Weapon_RocketLauncher_Fire( ent ). В результате чего машинган стал стрелять ракетами. Причем с той же скоростью, что и обычными патронами. Результат посмотри на скриншоте.