C/C++: Сделай свою моду для Кваки

Дубовцев Алексей

Xakep, номер #057, стр. 057-088-3


Конечно, такие мелкие изменения быстро надоели. Захотелось чего-то большего. Покопаемся в файле g_missle.c. В нем скрываются все настройки оружия кваки: мощность, выбор патронов, скорострельность, схемы траекторий, гравитационная зависимость и еще Бог знает что. Немного подправив этот файлик, я сотворил довольно забавную штуку: заставил ракеты и плазма-патроны отражаться от стен. Выглядит убойно. И что самое приятное, от собственных ракет и плазма-патронов ты взорваться не можешь. К тому же летают они довольно долго, следовательно, можно наполнить комнату такими летающими штуками и ждать, пока кто-нибудь из недоброжелателей, пробегая мимо, не заденет одну из них. Вот так вот. Реализуется это добавлением следующей строки:

bolt->s.eFlags = EF_BOUNCE_HALF;

Ее необходимо расположить в функции fire_rocket и fire_plasma в файле g_missle.c.

Расширяем возможности консоли

После создания своей моды ты, естественно, захочешь сыграть в нее с друзьями по сети. Но тут возникает проблема. В том виде, в котором она сейчас находится, есть один серьезный недостаток. Твои друзья, точно так же как и ты, смогут пользоваться всеми возможностями, которые ты внес в моду. Это надо исправить. Для этого мы добавим собственную команду. Она и будет открывать секретные возможности. Первым делом отправляйся в самый конец файла g_cmd.c. Там находится функция ClientCommand. В конец ее добавляй следующий код:

else if (Q_stricmp (cmd, "xakep") == 0)

Cmd_Xakep( ent );

Таким образом мы определили будущую команду "xakep". Теперь необходимо добавить функцию Cmd_Xakep( ent ). Ее вызов приведет к включению хакерского режима игры. Вот код функции Cmd_Xakep:

void Cmd_Xakep(gentity_t *ent)

{

char *msg;

ent->flags ^= FL_XAKEPMODE;

if (!(ent->flags & FL_XAKEPMODE))

msg = "Xakep mode off\n";

else

msg = "Xakep mode on\n";

trap_SendServerCommand(ent-g_entities, va("print \"%s\"", msg));

}

Как видишь, здесь все очень просто, за исключением одного - мы используем флаг FL_XAKEPMODE, который еще не определен. Чтобы его определить, полезай в файл g_local.h и найди там список флагов с комментарием "// gentity->flags". В самом конце этого блока определений вставь строку, задающую наш флаг:

#define FL_XAKEPMODE 0x00010000 // Xakep mode

Вот, собственно, и все. Теперь осталось только вставить проверку режима хакерских возможностей. Отправляйся обратно в файл g_weapon.c. Перейди к 837 строке. Там ты увидишь следующую конструкцию: case WP_MACHINEGUN:. Она, как я уже говорил, вызывается, когда ты стреляешь из машингана. Раньше мы просто меняли вызов на Weapon_RocketLauncher_Fire( ent ), теперь же добавим следующую условную конструкцию:

case WP_MACHINEGUN:

if (ent->flags & FL_XAKEPMODE)

{

Weapon_RocketLauncher_Fire( ent );

break;

}

Отныне ты будешь стрелять ракетами только после выполнения команды "xakep" в консоли твоей кваки!

Ну вот, мы сделали свою моду. Конечно же, большинство игроков она вряд ли сможет чем-то заинтересовать. Но если ты добавишь в нее полезные вещи, например, фишки для проведения турниров, ведения различной статистики по игре, то тогда твоя мода может оказаться весьма интересной. А пока ты этого не сделал, изучай структуру ку3, набирайся опыта в Си. Экспериментируй, создавай свои шедевры.

Назад на стр. 057-088-2  Содержание  Вперед на стр. 057-088-4