<<Предыдущая
статья | Следующая
статья>>
Для cоздания мода потребуется
сделать три идентичных изменения в коде. Это касается плазмы, базуки и BFG. Но чтоб не писать много раз одно и то же, я поясню лишь на
примере базуки)).
1.
Добавление нового флага
Откройте g_local.h в строке 32 и добавьте желтые строки:
#define
FL_GODMODE
0x00000010
#define
FL_NOTARGET
0x00000020
#define
FL_TEAMSLAVE
0x00000400 //
not the first on the team
#define FL_NO_KNOCKBACK 0x00000800
#define
FL_DROPPED_ITEM
0x00001000
#define
FL_NO_BOTS
0x00002000 //
spawn point not for bot use
#define
FL_NO_HUMANS
0x00004000 //
spawn point just for bots
#define
FL_ROCKETBOUNCE 0x00008000 //boncemod
#define FL_FORCE_GESTURE
0x00010000 //
force gesture on client
#define
FL_PLASMABOUNCE 0x00020000 //boncemod
#define
FL_BFGBOUNCE
0x00040000
//boncemod
2. Внедрение команды "rbounce"
Теперь откройте g_cmds.c и добавьте код в районе строки 1548:
/*
= = = = = = = = = = = = = = = = =
Cmd_RBounce_f
= = = = = = = = = = = = = = = = =
*/
void Cmd_RBounce_f( gentity_t *ent ) {
char *msg; //
message to player
ent->flags ^= FL_ROCKETBOUNCE;
if (!(ent->flags & FL_ROCKETBOUNCE))
msg = "Rocket Bounce OFF\n";
else
msg = "Rocket Bounce ON\n";
trap_SendServerCommand( ent-g_entities, va("print
\"%s\"", msg));
}
Теперь идите к
строке 1727
и добавьте:
else if (Q_stricmp (cmd, "setviewpos") ==
0)
Cmd_SetViewpos_f( ent );
else if (Q_stricmp (cmd,
"rbounce") ==
0)
Cmd_RBounce_f( ent );
Это позволяет
игроку включать и выключать отскок рокет в игре с
помощью консольной команды "\rbounce".
Команды для плазмы и BFG вводятся аналогично.
3. Изменяем физику рокет
Переходим к функции
fire_rocket:
bolt = G_Spawn();
bolt->classname = "rocket";
if
(self->flags & FL_ROCKETBOUNCE)
bolt->nextthink = level.time + 2500;
else
bolt->nextthink = level.time + 10000;
bolt->think = G_ExplodeMissile;
bolt->s.eType = ET_MISSILE;
bolt->r.svFlags = SVF_USE_CURRENT_ORIGIN;
bolt->s.weapon = WP_ROCKET_LAUNCHER;
if
(self->flags & FL_ROCKETBOUNCE)
bolt->s.eFlags = EF_BOUNCE;
bolt->r.ownerNum = self->s.number;
Условие if
(self->flags & FL_ROCKETBOUNCE) включил ли клиент FL_ROCKETBOUNCE. Если да, то рокета взорвется через 2.5 сек
(вместо десяти, как обычно). Наиболее важная часть - добавление флага
эффектов EF_BOUNCE к рокете.
К счастью, эта функция была написана в ID Software и нам без усилий осталось лишь
использовать ее)). Исследуйте bg_public.h в
строке 221
для полного списка всех EF_ флагов.
Вот собственно и
все. Если вы поняли как действуют команды, то без
труда сможете добавить к списку плазму и т.д. Компилируйте ваш .qvm и наслаждайтесь!
<<Предыдущая
статья | Следующая
статья>>
|