QUAKE III MODIFICATION WORLD

                                Как создавался BOUNCEMOD

ГЛАВНАЯ

НОВОСТИ

 СТАТЬИ

МОДЫ

 ФАЙЛЫ

ДЕМКИ

ФОРУМ

ГОСТЕВАЯ

ССЫЛКИ

МЫЛО

<<Предыдущая статья | Следующая статья>>

Для 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 и наслаждайтесь!

<<Предыдущая статья | Следующая статья>>

 Copyright (c)2003 MasTer

Хостинг от uCoz