Текущее время: 25 апр 2024 15:17

Часовой пояс: UTC + 3 часа


Правила форума


Внимание! Все права на материалы опубликованные в этом форуме принадлежат их авторам! Перепечатка туториалов и статей разрешена только со ссылкой на этот сайт! В противном случае факт перепечатки считается нарушением авторских прав!



Новая тема Ответить
Страница 1 из 20
[ Сообщений: 287 ]
На страницу 1, 2, 3, 4, 5 ... 20  След.
Автор
Сообщение
Заголовок сообщения: Wolf_Source ака SDK
СообщениеДобавлено: 16 июл 2007 17:00
Бесспорно, SDK очень необходимая вещь при создании мода. Но тут есть один подводный камень, скорее даже целая скала. Это умение программировать. Поэтому я считаю создание данной темы крайне необходимым. Дабы поделиться с вами своим скромным опытом в данной сфере, я написал маленький тутор. Надеюсь он поможет многим сделать СВОЙ ВЕЛИКИЙ ( и могущественный :smile2: ) МОД.

Скачать SDK можно здесь http://www.playground.ru/files/743/ весит бадяга 6,6 mb.


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Итак, начнем! Предпологается, что wolf_source уже скачан и установлен. Также, как воздух, крайне необходимо наличие Microsoft Visual C++. У меня, к примеру, вообще стоит 5-ая версия (ужасно древняя), но и этого достаточно.
В wolf_source находятся две папки: SP и MP. Это соответственно исходники для Singleplayer и Multiplayer. Рассматривать будем мод под Singleplayer. Далее заходим в папку src, а оттуда в game. Там лежит жуткое количество файлов с расширениями .c и .h. Но нам нужен game.dsw. Это файл-проект для qagamex86.dll.
В Microsoft Visual C++ выбираем пункт меню Build->Set Active Configuration, там указываем game - Win32 Release. Теперь всё готово для создания мода.
Слева в браузере жмем FileView и в папке game files -> Source Files находим и открываем файл g_weapon.c. Теперь перейдем к сточке 543, нажав сочерание Ctrl+G и введя номер строки. Тут у нас находится конструкция switch:
------------------------------------------------------------------
Код:
int G_GetWeaponDamage( int weapon ) {
   if( g_gametype.integer == GT_SINGLE_PLAYER ) {
      switch (weapon) {
         case WP_LUGER:
         case WP_SILENCER: return 0;
         case WP_COLT: return 200;
         case WP_AKIMBO: return 8;   //----(SA)   added
         case WP_VENOM: return 12;   // 15  ----(SA)   slight modify for DM
         case WP_MP40: return 6;
         case WP_THOMPSON: return 8;
         case WP_STEN: return 10;
         case WP_FG42SCOPE:
         case WP_FG42: return 15;
         case WP_MAUSER: return 20;
         case WP_GARAND: return 25;
         case WP_SNIPERRIFLE: return 55;
         case WP_SNOOPERSCOPE: return 25;
         case WP_NONE: return 0;
         case WP_KNIFE: return 300;
         case WP_GRENADE_LAUNCHER: return 100;
         case WP_GRENADE_PINEAPPLE: return 80;
         case WP_DYNAMITE: return 400;
         case WP_PANZERFAUST: return 200;   // (SA) was 100   
         case WP_MORTAR: return 100;
         case WP_FLAMETHROWER: // FIXME -- not used in single player yet
         case WP_TESLA:
         case WP_GAUNTLET:
         case WP_SNIPER:
         default:   return 1;
      }
   }

и т.д.
-----------------------------------------------------------------------------------------------------------

Давайте разберем этот код. Здесь каждому выбраному оружию WP_оружие присваивается ( более грамотно - возвращается) значение наносимого им урона с помощью оператора return. К примеру, у кольта я поставил значение 200 ( как у панзерфауста), результат - убивает с одного выстрела, а у люгера поставил 0 и тот теперь не наносит вреда. Аналогично в блоке (методе класса weapon)
float G_GetWeaponSpread( int weapon ) (строка 613) можно изменить скорострельность.
Теперь жмем Build->Build qagamex86.dll или просто F7. После успешной (я надеюсь) компиляции в Wolf_Source\SP\SP_source\src\Release дожна появиться qagamex86.dll, которой заменяем оригинальную. И кстати, не забывайте делать резервные копии.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Ну, вот и всё! Кстати советую почитат статью из журнала Xakep, номер #057, стр. 057-088-2. Найти оную можно на http://megalib.com/books/82/088/1.htm
Заголовок сообщения: Wolf_Source ака SDK
СообщениеДобавлено: 16 июл 2007 18:37
Picasso Без Microsoft Visual C+ никак не обойтись да? Блокнот случайно не подойдет?:)
_________________
Короче не стреляйте я Кесслер :)
Заголовок сообщения: Wolf_Source ака SDK
СообщениеДобавлено: 16 июл 2007 21:20
Да вроде бы ни как:no: Хотя по моему в некоторых версиях есть батники для компиляции. Но лучше Microsoft Visual C++, та хотябы на ошибки компиляции указывает прямо номером строки.
Заголовок сообщения: Wolf_Source ака SDK
СообщениеДобавлено: 17 июл 2007 13:10
Сегодня я расскажу как сделать мод на гранаты и панзерфауст. Править код мы будем на этот раз в файле g_missile.c. Здесь также как и в g_weapon.c скрыта информация о характеристиках оружия. Описание гранат находится в процедуре fire_grenade. Чтобы от искать эту процедуру, щелкнем в браузере слева по закладке ClassView и развернем папку Globals. Там находятся все процедуры проекта game, обозначенные розовыми кубиками. Найдем там fire_grenade (gentity_t *self, vec3_t start, vec3_t dir, int grenadeWPID). Здесь описываются как гранаты (двух видов) так и динамит. Теперь идем к уже знакомой нам структуре switch:


-------------------------------------------------------------------------------------------
switch(grenadeWPID) {
case WP_GRENADE_LAUNCHER:
bolt->classname = "grenade";
// bolt->damage = 100;
// bolt->splashDamage = 100;
if(self->aiCharacter)
bolt->splashRadius = 150;
else
bolt->splashRadius = 150;
bolt->methodOfDeath = MOD_GRENADE;
bolt->splashMethodOfDeath = MOD_GRENADE_SPLASH;
// bolt->s.eFlags = EF_BOUNCE_HALF; // фиксим здесь
break;
case WP_GRENADE_PINEAPPLE:
bolt->classname = "grenade";
// bolt->damage = 80;
// bolt->splashDamage = 80;
bolt->splashRadius = 300;
bolt->methodOfDeath = MOD_GRENADE;
bolt->splashMethodOfDeath = MOD_GRENADE_SPLASH;
// bolt->s.eFlags = EF_BOUNCE_HALF; // фиксим здесь
break;
--------------------------------------------------------------------------------------------------


Сейчас для нас интересной является строчка
bolt->s.eFlags = EF_BOUNCE_HALF;
так как она отвечает за то, чтобы граната прыгала, а потом взрывалась. Сделав эту строчку невидимой для компилятора, поставив \\, мы получаем гранату, которая взрывается при контакте с поверхностью.

Теперь перейдем к процедуре fire_rocket (gentity_t *self, vec3_t start, vec3_t dir). Тут описывается поведение ракет.

--------------------------------------------------------------------------
entity_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 + 20000; // время полёта
bolt->think = G_ExplodeMissile;
bolt->s.eType = ET_MISSILE;
bolt->r.svFlags = SVF_USE_CURRENT_ORIGIN | SVF_BROADCAST;
bolt->s.eFlags = EF_BOUNCE_HALF; // добавляем здесь
-------------------------------------------------------------------------------------

Сейчас мы наоборот добавили строчку.
bolt->s.eFlags = EF_BOUNCE_HALF;
После таких вот издевательств над кодом мы получили ракеты, которые прыгают от стен в течении 20 секунд.
Заголовок сообщения: Wolf_Source ака SDK
СообщениеДобавлено: 17 июл 2007 13:13
Изображение
Заголовок сообщения: Wolf_Source ака SDK
СообщениеДобавлено: 22 июл 2007 22:32
На этот раз мы не будем использовать Visual C++, так что... Встречайте! WordPad и его младший братик Блокнот! Да-да, Вы не ослышались, мы пока оставим компилятор в покое. Сейчас мы приступим к изготовлению собственного меню.
Все описания игрового меню находятся в папке ui в файлах с расширением .MENU, которые легко редактируются WordPad-ом или Блокнотиком. Каждый раздел меню описывается отдельным блоком. Блок заключается в фигурные скобки. При том, блоки itemDef могут быть вложенными только в блоки menuDef.
Давайте попробуем что-нибудь поменять в главном меню. Для этого откроем файл "main.menu". Сначало заменем стандартный фон на видео-ролик, который можем наблюдать в разделе "Авторы". Найдите и закоментируйте ( //--- ) itemDef-ы со следующими названиями:
- backimage2
- testmodel_bj // хотя Блажковича можно оставить :)
- video_over1
- backimage4
- testmodel_aflag1 // или заменить модель, уж очень мазолит глаза америкоский флаг :))

Теперь после itemDef-а backimage2 пропишите следующий:

itemDef {
name back_cin // название произвольное
style WINDOW_STYLE_CINEMATIC
cinematic "menu.roq" // видео-ролик
rect 0 80 640 400
backcolor 1 1 1 .25
border 1
bordersize 1
bordercolor .1 .1 .1 1
decoration
visible 1
}

Хочу заметить, порядок следования itemDef-ов имеет значение, т.к. каждый последующий будет накладываться на предыдущий. Слои, понимаете ли.
А после itemDef-а gold_line добавьте:


itemDef {
name document
style WINDOW_STYLE_SHADER
rect 0 60 200 370
background "gfx/clipboard/document1.tga"
visible 1
decoration
} // это будет у нас фон под пункты меню.


А сейчас приступим к самим пунктам меню. Выстроим их в столбик. После комментария

////////// GAMETYPE ////////////////////////////////////////////////////////

// SINGLEPLAYER //

находятся itemDef-ы, отвечающие за пункты меню. В каждом из них есть ключ rect, имеющий четыре параметра. Первые два параметра - это координаты пункта. Другие два - размеры рабочей зоны. Менять мы будем только координаты, т.к. названия пунктов мы пока менять не будем. К сведению, это делается в ключе text. Приведу значения rect для соответствующих itemDef-ов:

- play: rect 16 120 40 14
- loadgame: rect 16 170 72 14
- options: rect 16 220 56 14
- playselection: rect 16 270 84 14
- credits: rect 16 320 52 14
- quit: rect 16 370 32 14

Как не сложно заметить, меняется только вторая координата, то есть раположение по вертикали.

Немного о цвете надписей. За это ответственен ключ forecolor, имеющий четыре параметра. Первые три задают цвет в RBG, последний - прозрачность. Кстати, при наведении мышки на пункт, тот меняет цвет. Изменить значение цвета можно с помощью ключа focusColor. Этот ключ общий для всех пунктов в файле.
Заголовок сообщения: Wolf_Source ака SDK
СообщениеДобавлено: 25 июл 2007 13:54
Не нужен флаг - фиксим его! Зафикси его!:smile2:
Заголовок сообщения: Wolf_Source ака SDK
СообщениеДобавлено: 10 авг 2007 04:01
Picasso, есть к тебе очень важное дело. Суть вот в чём... Вольфу уже скоро 7 лет, компы в то время были слабенькие, соответственно игра имеет очень много ограничений: по количеству брашей, количеству солдат на мапе, вершин и т.д... Например модели подходят только низкополигональные, если не ошибаюсь, не больше 1000 полигонов... Сейчас железо совсем другое, а ограничения, зашитые в движок очень мешают строить большие, красивые карты. Не мог-бы ты поковыряться в исходниках на тему увеличения например количества полигонов на моделях, максимального количество вертексов, солдат на уровне (64 максимум) и т.д? Это позволило-бы нам избавиться от целого ряда багов, вызванных вот такими ограничениями, на данный момент приходится постоянно балансировать на грани багов... Да и моделей есть огромное количество прекрасных, но Саня вынужден их кастрировать, снижая количество полигонов ...
Если докопаешся до сути, то все без исключения ограничения можно поднимать смело в двое, ато и в трое!
Заголовок сообщения: Wolf_Source ака SDK
СообщениеДобавлено: 11 авг 2007 03:38
Сегодня я расскажу о отом как менять кол-во патронов в обойме, макс. носимое кол-во потронов и т.п. Итак, начнем пожалуй.:)
Все изменения ведутся в проекте 'ui.dsw'. Интересующие в данный момент характеристики оружия описываются в файле 'bg_misc' с его первых строк:

#define MAX_AMMO_45 300
#define MAX_AMMO_9MM 300
#define MAX_AMMO_VENOM 1000
#define MAX_AMMO_MAUSER 200
#define MAX_AMMO_GARAND 10
#define MAX_AMMO_FG42 MAX_AMMO_MAUSER
#define MAX_AMMO_BAR 200

Здесь у нас ничто иное как директива #define, определяющая подстановку в тексте программы. Она сипользуется для определения:
- символических констант:
#define имя текст_подстановки
(все вхождения имени заменяются на текст подстановки);
- макросов, которые выглядят как функции, но реализуются подстановкой их текста в
текст программы:
#define имя( параметры) текст_подстановки
- символов, управляющих условной компиляцией. (без комментариев, сам не знаю).

В нашем случае определяются символические константы, которые в дальнейшем используется в таблице (вообще-то это массив). Если честно то, эта директива здесь не приносит особой пользы. Просто немного облегчает жизнь. К примеру,

#define MAX_AMMO_45 300

означает, что патронов 45-го калибра максимум можно нести 300 штук. Этот калибр использует кольт и томпсон. И для того и другого это значение должно быть одинаковым, хотя в таблице можно просто указать одинаковые значение, а не использовать общую подстановку. Но это я так, к слову.:)

Идем дальше. А дальше у нас самое вкусное. Это массив ammotable_t ammoTable[] записанный в виде таблицы. По вертикали параметры, по горизонтали вид "приспособления для нанесения вреда". Из доступных параметров:

maxammo - максимум носимых патронов
uses - какой-то непонятный
maxclip - максимум патронов в магазине
reloadTime - время перезарядки
fireDelayTime - время от нажатия на курок до выстрела
nextShotTime - вроде как скорострельность
maxHeat - время, через которое наступает перегрев
coolRate - время охлаждения
mod - тип повреждения

Что касается времени, оно здесь указано не в секундах и не в милисекундах, а вообще в непонятных единицах. Так что это придется подбирать методом проб и ошибок.

Компилируйте и наслаждайтесь. Да прибудет с вами энергия С++.
Заголовок сообщения: Wolf_Source ака SDK
СообщениеДобавлено: 11 авг 2007 04:07
Я сейчас как раз работаю над эффектами. Полностью переделываю систему частиц. Есть уже определённые результаты. Теперь взрывы сопровождаются целым ураганом искр (типа шрапнель)! Ещё немного и F.E.A.R. отдыхает!
А как на склад заливать?:cry: Научите пожалуйста. Я тут доделал систему частиц. Сейчас собираюсь производительностью заняться, ну типа полтгоны там.
Заголовок сообщения: Wolf_Source ака SDK
СообщениеДобавлено: 11 авг 2007 07:50
Астрол тоже жаловался что на скалд залить не может! Может это у всех рядовых так?
_________________
Короче не стреляйте я Кесслер :)
Заголовок сообщения: Wolf_Source ака SDK
СообщениеДобавлено: 11 авг 2007 10:51
Кидай мне на мыло, с ридкиком с описанием, я залью. cf-krot$list.ru .
Показать сообщения за:  Поле сортировки  
Страница 1 из 20
[ Сообщений: 287 ]

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Кто сегодня был на конференции за последние 24 часа

Пользователи смотревшие этот форум за последние 24 часа: нет зарегистрированных пользователей и 101 гостей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения
Перейти:  
cron

Работает на phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB