<<Предыдущая
статья | Следующая
статья>>
Теперь, учитывая
то, что мы умеем компилировать проекты и создавать QVM, можно приступить к
созданию модов, для начала самых
простых. С этой целью в этой статье мы рассмотрим создание пробного
мода SlowRockets.
Т.е будем изменять скорость ракет.
1. Сделайте копию исходного кода!
Очень удобно
держать под боком нетронутую копию исходного кода. Представьте, что вы
создавали мод, и запороли один из файлов исходного кода (сохранили, например,
нежелательные изменения). Тогда вам понадобится BACKUP, верно? Конечно, можно заново установить Q3AGameSource, но это быстро надоедает. Поэтому, мы не будем
создавать моды в папке С:\Quake3\source, а сохраним ее как копию. Мы будем делать моды в своих
отдельных директориях. Например, создайте папку С:\Quake3\mymod.
Теперь просто
скопируйте содержимое С:\Quake3\source в С:\Quake3\mymod. Все изменения относительно этого мода теперь делайте
в этой папке. Вы можете иметь сколько угодно поддиректорий. Я часто
разрабатываю несколько модов одновременно: quake3\mega-rail, quake3\bouncemod, и т.д.. Ограничение – лишь
объем вашего винчестера.
2. Найдем
что-нибудь интересное
Давайте откроем quake3\mymod\сode\quake3sdk.dsw. Разверните на весь экран, т.к. вам понадобится как
можно больше места. Убедитесь, что у вас активирован проект ‘game’. Нажмите “File View” на панели слева,
и найдите файл 'g_missile.c'. (двойной клик и он откроется в окне Редактора справа).
Перейдите к строке 621 (Tips: нажмите CRTL + G для быстрого перехода) и найдите функцию fire_rocket:
/* ================= fire_rocket ================= */ gentity_t *fire_rocket (gentity_t *self, vec3_t start, vec3_t dir) { gentity_t *bolt; VectorNormalize (dir); bolt = G_Spawn(); bolt->classname = "rocket"; 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; bolt->r.ownerNum = self->s.number; bolt->parent = self; bolt->damage = 100; bolt->splashDamage = 100; bolt->splashRadius = 120; bolt->methodOfDeath = MOD_ROCKET; bolt->splashMethodOfDeath = MOD_ROCKET_SPLASH; bolt->clipmask = MASK_SHOT; bolt->s.pos.trType = TR_LINEAR; bolt->s.pos.trTime = level.time - MISSILE_PRESTEP_TIME; // move a bit on the very first frame VectorCopy( start, bolt->s.pos.trBase ); VectorScale( dir, 900, bolt->s.pos.trDelta ); SnapVector( bolt->s.pos.trDelta ); // save net bandwidth VectorCopy (start, bolt->r.currentOrigin); return bolt;
}
Видно, что ракета наносит 100 вреда (от прямого
попадания или от ближнего), и что радиус ближнего повреждения 120 юнитов. Строка 649
показывает, что ракета летит со скоростью 900 юнитов/сек.
Также присутствует целая уйма констант используемых в данной функции (контсанты обычно написаны ПРОПИСНЫМИ буквами).
Константы в основном имеют мнемоничные имена,
поэтому легко угадать их назначение.
3. Наше первое изменение кода
Изменим значение строки 649 примерно так:
VectorScale( dir, 300, bolt->s.pos.trDelta );
Теперь сохраните код и создайте QVM. Затем вырежьте появившийся файл quake3\baseq3\vm\game.qvm и вставьте его в quake3\mymod\vm. Для
того, чтоб Q3 увидел
ваш новый QVM, нужно поместить папку VM в *.PK3, что на самом деле
является обычным ZIP-архивом, только с новым
расширением PK3.
Теперь запускайте игру с параметром:
C:\Quake3\quake3.exe +set fs_game
mymod
И вы увидите –
ваши ракеты стали намного медленнее.
Все!
<<Предыдущая
статья | Следующая
статья>>
|