Текущее время: 28 мар 2024 20:19

Часовой пояс: 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 часа


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

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


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

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


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

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