Doom3.ru





















    •  Главная

  •  Doom3-форум   •  Прислать новости




  •  Doom3-info



  



  •  Doom3: RoE



  



  •  Статьи



  



  •  Quake4



  



  •  Quake Wars



  




Реклама
Всё для детей любого возраста - детский магазин воронеж.




Модострой 3

 30.12.2003  15:55  Автор: [ss]3L33T@

"Я мыслю, а значит - существую".
[ss]3L33T@


Иносказание.

Здравствуй, начинающий МОДер!
Ты наверное уселся за комп в надежде быстренько полистать эту статейку, а потом замутить свой мод? Спешу тебя огорчить: быстренько ты этого не сделаешь. Запасайся пивом, временем, включай музыку, собирай мозги в кучу, отключай асю, руби все irc каналы, задёргивай шторы, выключай свет, нагибайся и слушай...
От тебя понадобится максимум концентрации, усидчивости и большое кол-во времени, т.к. система, которую Кармак наворотил, огромна и сложна. Хотя и предельно проста. В общем, держись за кресло - понеслось...

Исследование больного или Imp - подопытный кролик.

Я думаю ты уже понял. Нет? Мы будем разбираться с системой на примере Imp'а. Идём в папку base\def, она на некоторое время станет вашим вторым домом, и там ищём файл monsters.def. Открываем. Что видно? Много всякой мути и всё непонятно. Ладно, забейте на всё и ищите строки(после каждой строки я буду подписывать то, что она делает.):

/***********************************************************************

monster_demon_imp

***********************************************************************/

Комментарии, что это такое - ищи во второй статье цикла Модострой.

export {
options -prefix IMP_ -align ALL -keep camera -keep Rmissile Lmissile -parent Rmissile Rhand -parent Lmissile Lhand -parent Rwing Chest -parent Lwing Chest -parent camera Head

Опции для экспорта модели и анимации из Маи. Что они означают, довольно трудно сказать. Да и нас это уже не волнуют, поскольку анимация и модель уже экспортированы. Я конечно могу привести догадки основываясь на названиях команд, но это будут лишь догадки.

mesh models/monsters/imp/animation/cycles/idle1.ma

anim models/monsters/imp/animation/cycles/initial.ma
anim models/monsters/imp/animation/cycles/idle1.ma
anim models/monsters/imp/animation/cycles/alert_idle.ma
anim models/monsters/imp/animation/cycles/alert_walk.ma
anim models/monsters/imp/animation/cycles/sight.ma
anim models/monsters/imp/animation/cycles/walk1.ma
anim models/monsters/imp/animation/cycles/faster_walk.ma
anim models/monsters/imp/animation/cycles/run.ma
anim models/monsters/imp/animation/cycles/on4_idle.ma
anim models/monsters/imp/animation/cycles/evade_left_on4.ma
anim models/monsters/imp/animation/cycles/evade_right_on4.ma
anim models/monsters/imp/animation/cycles/evade_right.ma
anim models/monsters/imp/animation/cycles/evade_left.ma
anim models/monsters/imp/animation/cycles/scurry2.ma
anim models/monsters/imp/animation/cycles/scurry_leap.ma
anim models/monsters/imp/animation/cycles/scurry_stop.ma
anim models/monsters/imp/animation/cycles/pain3.ma
anim models/monsters/imp/animation/cycles/pain_head.ma
anim models/monsters/imp/animation/cycles/pain_chest.ma
anim models/monsters/imp/animation/cycles/pain_luparm.ma
anim models/monsters/imp/animation/cycles/pain_ruparm.ma
anim models/monsters/imp/animation/cycles/pain_legs.ma
anim models/monsters/imp/animation/cycles/death1.ma
anim models/monsters/imp/animation/cycles/death1_twitch.ma
anim models/monsters/imp/animation/cycles/death2.ma
anim models/monsters/imp/animation/cycles/death2_twitch.ma
anim models/monsters/imp/animation/cycles/range1.ma
anim models/monsters/imp/animation/cycles/crouched_range1.ma
anim models/monsters/imp/animation/cycles/slash1.ma
anim models/monsters/imp/animation/cycles/slash2.ma
anim models/monsters/imp/animation/cycles/leap_attack.ma

anim models/monsters/imp/animation/jumpdown.ma
anim models/Fred/imp_kitchen_jim_idle.ma
anim models/Fred/imp_kitchen_jim.ma
anim models/monsters/zombie/zombie01/severed/idle.mb
anim models/monsters/zombie/zombie01/severed/wake.mb


Экспорт модели и анимации. Как всё пашет, смотри в Модосторое номер 2.

}

Конец экспорта.

entityDef monster_demon_imp {

Начало описания импа.

"inherit" "monster_default"

Эта строка означает, что этот монстр(в данном случае - имп) будет описываться по шаблону с названием "monster_default". В этом шаблоне идёт описание того как монстр должен себя вести, но файлы описания поведения мы будет разбирать в след. раз.

"size" "32 32 72"

Размер монстра. Точнее не размер его модели, а размер того куба в который он вставляется. Как известно, чтобы определить момент столкновения предмета с чем - либо, его предварительно помещают в "коробку". Зачем? А ты сам подумай: если монстр состоит из 250000 полигонов и по каждому полигону надо пройтись на момент столкновения, то какие же системные требования будут у игры? Однако эта "коробка" используется только для мэшей. Отсюда следуют, что система пополигонного попадания Кармака остаётся в силе, просто она используется только для оружия. Ну правильно - зачем пробегать по всем полигонам игрока, чтобы определить касается ли он, например, патронов от ракетницы? проще поместить патроны и модель игрока в куб и тогда проверять надо уже не 250000 полигонов, а всего лишь 6. Круто, да? В общем, всё это к тому, что если поменять параметры, то модель в размерах не увеличится.

"use_aas" "aas32"

Какой aas файл использует монстр.

"team" "1"

В какой команде. 0 - игрок, 1 - монстры.

"rank" "4"

Если проще - звание, авторитет монстра.

"health" "120"

Ну это и ежу понятно - жизни, точнее сколько их у монстра.

"melee_damage" "20"

Какой урон наносит в упор.

"melee_range" "64"

Какой урон наносит, бросая fireball.

"projectile" "projectile_impfireball"

Указание на то, какой тип пуль использует. В файле projectiles.def есть описание всех типов пуль. Но с ними мы будем разбираться чуть позже.

"leap_range" "480"

Расстояние, при котором имп будет пытаться прыгнуть на нас.

"leap_rate" "8"

Что означает эта строка я не знаю.

"missile_range_min" "64"

Минимальное расстояние для возможности запуска fireball'а

"missile_range_max" "1024"

Максимальное расстояние для запуска fireball'а. Имеется ввиду расстояние от игрока до импа.

"run_range" "640"

Максимальная дистанция для пробежки импа.

"pain_threshold" "50"

Это весьма интересная штука. С ней я так и не разобрался до конца. Короче - если ты наносишь импу 50 урона, то он проигрывает анимацию боли.

"model" "models/monsters/imp/animation/cycles/idle1.md5mesh"

Модель для импа указывается тут.

"anim initial" "models/monsters/imp/animation/cycles/initial.md5anim"
"anim idle" "models/monsters/imp/animation/cycles/idle1.md5anim"
"anim stop" "models/monsters/imp/animation/cycles/idle1.md5anim"
"anim alert_idle" "models/monsters/imp/animation/cycles/alert_idle.md5anim"
"anim alert_walk" "models/monsters/imp/animation/cycles/faster_walk.md5anim"
"anim sight" "models/monsters/imp/animation/cycles/sight.md5anim"
"anim walk" "models/monsters/imp/animation/cycles/walk1.md5anim"
"anim combat_walk" "models/monsters/imp/animation/cycles/faster_walk.md5anim"
"anim run1" "models/monsters/imp/animation/cycles/faster_walk.md5anim"
"anim run2" "models/monsters/imp/animation/cycles/scurry2.md5anim"
"anim crouch" "models/monsters/imp/animation/cycles/on4_idle.md5anim"
"anim evade_left1" "models/monsters/imp/animation/cycles/evade_left.md5anim"
"anim evade_left2" "models/monsters/imp/animation/cycles/evade_left_on4.md5anim"
"anim evade_right1" "models/monsters/imp/animation/cycles/evade_right_on4.md5anim"
"anim evade_right2" "models/monsters/imp/animation/cycles/evade_right.md5anim"
"anim crouch_walk" "models/monsters/imp/animation/cycles/scurry2.md5anim"
"anim scurry_leap" "models/monsters/imp/animation/cycles/scurry_leap.md5anim"
"anim scurry_stop" "models/monsters/imp/animation/cycles/scurry_stop.md5anim"
"anim death1" "models/monsters/imp/animation/cycles/death1.md5anim"
"anim death1_twitch" "models/monsters/imp/animation/cycles/death1_twitch.md5anim"
"anim death2" "models/monsters/imp/animation/cycles/death2.md5anim"
"anim death2_twitch" "models/monsters/imp/animation/cycles/death2_twitch.md5anim"
"anim range_attack" "models/monsters/imp/animation/cycles/range1.md5anim"
"anim crouch_range_attack" "models/monsters/imp/animation/cycles/crouched_range1.md5anim"

"anim leap_attack" "models/monsters/imp/animation/cycles/scurry_leap.md5anim"
"anim melee_attack1" "models/monsters/imp/animation/cycles/slash1.md5anim"
"anim melee_attack2" "models/monsters/imp/animation/cycles/slash2.md5anim"

"anim jumpdown" "models/monsters/imp/animation/jumpdown.md5anim"

"anim kitchen_idle" "models/Fred/imp_kitchen_jim_idle.md5anim"
"anim kitchen_jumpdown" "models/Fred/imp_kitchen_jim.md5anim"

"anim zombie_feast" "models/monsters/zombie/zombie01/severed/idle.md5anim"
"anim zombie_feast_wake" "models/monsters/zombie/zombie01/severed/wake.md5anim"

"anim pain" "models/monsters/imp/animation/cycles/pain3.md5anim"
"anim pain_head" "models/monsters/imp/animation/cycles/pain_head.md5anim"
"anim pain_left_arm" "models/monsters/imp/animation/cycles/pain_luparm.md5anim"
"anim pain_right_arm" "models/monsters/imp/animation/cycles/pain_ruparm.md5anim"
"anim pain_legs" "models/monsters/imp/animation/cycles/pain_legs.md5anim"
"anim pain_chest" "models/monsters/imp/animation/cycles/pain_chest.md5anim"


Это всё описания подключения файлов анимации импа. Например, "anim idle", вместо idle может быть любое другое слово или набор символов. Это просто авторское название анимации. В данном случае idle - анимация ожидания противника. Т.е. та анимация, которая проигрывается, когда имп не видит противника.

"frame walk:2" "sound snd_footstep"

А вот здесь надо будет попариться и понять всё, что я скажу. Слово frame означает, что идёт обращение к какому-либо кадру анимации. Слово walk - сообщает название этой анимации. Сочетание символов :2 говорит, что обращение идёт ко второму кадру. Далее следует строка: "sound snd_footstep", она говорит, что надо проиграть звук из списка snd_footstep. Если сходить в самый низ описания импа, то там можно найти строку:"snd_footstep" "monster_demon_imp_footstep" Она означает, что список snd_footstep заполняется с помощью описания звуков под названием "monster_demon_imp_footstep". А откуда это описание берётся? Помнишь, во второй части Модостроя мы говорили об описаниях звука? Идём в папку base\sound. Там есть файл - monster_demon_imp.sndshd. Открываем его. В самом начале файла есть строки:

monster_demon_imp_footstep {
minDistance 2
maxDistance 25
volume -8
sound/nin/Foley3/DOOMFSFinalFiles/Imp/Metal/impmetalcrouchfront12.wav
sound/nin/Foley3/DOOMFSFinalFiles/Imp/Metal/impmetalcrouchfront13.wav
sound/nin/Foley3/DOOMFSFinalFiles/Imp/Metal/impmetalcrouchfront14.wav
sound/nin/Foley3/DOOMFSFinalFiles/Imp/Metal/impmetalcrouchfront15.wav
sound/nin/Foley3/DOOMFSFinalFiles/Imp/Metal/impmetalcrouchfront16.wav
sound/nin/Foley3/DOOMFSFinalFiles/Imp/Metal/impmetalcrouchfront17.wav
sound/nin/Foley3/DOOMFSFinalFiles/Imp/Metal/impmetalcrouchfront18.wav
sound/nin/Foley3/DOOMFSFinalFiles/Imp/Metal/impmetalcrouchfront19.wav
sound/nin/Foley3/DOOMFSFinalFiles/Imp/Metal/impmetalcrouchfront20.wav

}

Это и есть описание звуков. Т.е. система пашет так: sound snd_footstep(snd_footstep -> monster_demon_imp_footstep -> <случайный звук из списка звуков описанных в файле monster_demon_imp.sndshd>).
Ну что? Вроде потихоньку всё проясняется? Тогда продолжим, тем более что дальше будет ещё круче.

"frame walk:19" "sound snd_footstep"
"frame combat_walk:13" "sound snd_footstep"
"frame combat_walk:26" "sound snd_footstep"
"frame alert_walk:13" "sound snd_footstep"
"frame alert_walk:26" "sound snd_footstep"
"frame run1:13" "sound snd_footstep"
"frame run1:26" "sound snd_footstep"
"frame run2:6" "sound snd_footstep"
"frame run2:10" "sound snd_footstep"
"frame run2:14" "sound snd_footstep"
"frame run2:18" "sound snd_footstep"
"frame evade_left1:1" "sound snd_pain"
"frame evade_left1:14" "sound snd_footstep"
"frame evade_left1:15" "sound snd_footstep"

"frame evade_left2:1" "sound snd_pain"
"frame evade_left2:14" "sound snd_footstep"
"frame evade_left2:15" "sound snd_footstep"
"frame evade_left2:16" "sound snd_footstep"

"frame evade_right1:1" "sound snd_pain"
"frame evade_right1:13" "sound snd_footstep"
"frame evade_right1:14" "sound snd_footstep"
"frame evade_right1:15" "sound snd_footstep"
"frame evade_right1:16" "sound snd_footstep"
"frame evade_right2:1" "sound snd_pain"
"frame evade_right2:13" "sound snd_footstep"
"frame evade_right2:14" "sound snd_footstep"

"frame leap_attack:1" "sound snd_sight8"
"frame leap_attack:4" "sound snd_footstep"
"frame leap_attack:15" "sound snd_footstep"


Описания подобны, так что я их не описываю.

"frame leap_attack:16" "attack_begin melee_impLeapAttack"
"frame leap_attack:28.1" "attack_end"
"frame leap_attack:28" "sound snd_thud"
"frame leap_attack:36" "sound snd_thud"

"frame melee_attack1:10" "sound snd_footstep"
"frame melee_attack1:19" "sound snd_footstep"

"frame melee_attack2:4" "sound snd_footstep"
"frame melee_attack2:11" "sound snd_footstep"
"frame melee_attack2:21" "sound snd_footstep"

"frame range_attack:18" "sound snd_footstep"
"frame range_attack:32" "sound snd_footstep"

"frame melee_attack1:1" "sound snd_attackmelee_1"
"frame melee_attack1:8" "melee melee_impLeftClaw"
"frame melee_attack1:17" "melee melee_impRightClaw"



Интересные строки(последние три). В них говорится, что на 8 кадре анимации атаки в упор надо махать левой лапой, а на кадре 17 - правой, а на кадре 1 произвести звук удара в упор. Описание атак находится в файле base\def\melee.def. Там есть строки:

entityDef melee_impLeftClaw {

// melee specific parameters

"melee_bone" ""
"melee_distance" "64"
"snd_hit" "monster_demon_imp_melee_hit"
"snd_miss" "monster_demon_imp_melee_miss"
"kickDir" "1 1 0"


// damage parameters

"damage" "5"

"blob_material" "leftSlash"
"blob_time" "300"
"blob_x" "140"
"blob_y" "-100"
"blob_width" "600"
"blob_height" "600"

"knockback" "20"

"kick_time" "400"
"kick_amplitude" "2"

"dv_time" "100"
}


Это есть описание удара левой лапой. Прошу обратить внимание, в строке описания анимации -

"frame melee_attack1:8" "melee melee_impLeftClaw";

название описания - entityDef melee_impLeftClaw. Описание melee.def я опять таки приводить не буду. Всё в своё время.

"frame melee_attack2:1" "sound snd_attackmelee_2"
"frame melee_attack2:9" "melee melee_impLeftClaw"

"frame range_attack:2" "sound snd_createmissile"
"frame range_attack:2.1" "create_missile RMissile"
"frame range_attack:22" "sound snd_attackmissile"
"frame range_attack:22.1" "sound snd_chatter_combat"
"frame range_attack:22.1" "launch_missile RMissile"


Последние пять строк описывают следующее: кадр 2 - звук создания fireball'а; кадр 2.1(да, да - возможно и дробное значение кадра) - создание fireball'а в правой руке; кадр 22 - звук запуска fireball'а; кадр 22.1 - звук "кряканья" импа; кадр 22.1 - пустить fireball. Всё просто...

"frame sight:1" "sound snd_sight"
"frame death1:1" "sound snd_die"
"frame death1:13" "sound snd_thud"
"frame death1:17" "sound snd_thud"
"frame death1:20" "sound snd_thud"

"frame death2:1" "sound snd_die"
"frame death2:13" "sound snd_thud"
"frame death2:20" "sound snd_thud"

"frame pain:1" "sound snd_pain"
"frame pain_head:1" "sound snd_pain"
"frame pain_chest:1" "sound snd_pain"
"frame pain_legs:1" "sound snd_pain"
"frame pain_left_arm:1" "sound snd_pain"
"frame pain_right_arm:1" "sound snd_pain"

"fx_chatter" "particles/demon_imp_breath.particle"
"fx_chatterbone" "Jaw"


Здесь создаётся спецэффект, который использует систему частиц, описанную в файле "particles/demon_imp_breath.particle" и всё это крепится на кость с именем "Jaw". Эта строка нигде не используется. Это видимо осталось от старой системы частиц или от её промежуточной версии. Далее мы разберём работу системы частиц.

"snd_footstep" "monster_demon_imp_footstep"
"snd_sight" "monster_demon_imp_sight"
"snd_sight8" "monster_demon_imp_sight8"
"snd_chatter" "monster_demon_imp_chatter"
"snd_chatter_combat" "monster_demon_imp_chatter_combat"
"snd_pain" "monster_demon_imp_pain"
"snd_attackmelee_1" "monster_demon_imp_attackmelee_1"
"snd_attackmelee_2" "monster_demon_imp_attackmelee_2"
"snd_attackmissile" "monster_demon_imp_attackmissile"
"snd_die" "monster_demon_imp_die"
"snd_thud" "monster_demon_imp_thud"
"snd_createmissile" "monster_demon_imp_fireball_create"
"snd_attackmissile" "monster_demon_imp_fireball_throw"


Надо учесть, что компилятор сначала создаёт все описания и переменные, а потом начинает компилировать код. Т.е., если вы вставите эти строки в начало описания импа, то это ничего не изменит. Я это к чему - многие программисты привыкли, что программы выполняется так, как она описана(если я сначала использовал переменную или описание, а потом её описал, то программа выдаст мне ошибку), но в думе не так(программа сначала проходит по всем "системным файлам", создаёт все описания и заводит переменные, а потом начинает компилировать).

}

Возможно каких - либо строк у вас нет.
Тут ещё есть пара строк, которые в случае добавления дадут результат:

1)"scale" "2" - Увеличение размеров модели в 2 раза. Мечта идиота, правда? Но есть один недостаток - хрен ты в неё попадёшь. Система пополигонного попадания не совсем отлажена в альфе.

2)"damage_zone ССС" "*ХХХ" - Создание зоны попадания, где ССС - любой набор символов, ХХХ - название кости. Чтобы посмотреть название костей у определённого монстра, заходим в игру, запускаем карту на которой есть этот монстр, в консоли пишем - notarget, затем - r_ShowSkel 1; теперь находим этого монстра, теперь мы видим скелет, а в местах связки joint'ов есть названия костей. Так зачем надо создавать зону попадания? А если теперь в описании добавить строку:
"damag_scale ССС" "ХХХ" - то, если пуля попадает в зону с именем ССС, то урон от пули величивается в ХХХ раз.

3) Можно наложить текстуру на монстра (Да, я всё таки вспомнил!):
"skin" "ХХХ", где ХХХ - путь к файлу с текстурой. Но не забудь стереть файл типа *.d3t, иначе никаких изменений не будет(это для тех кто меняет текстуру уже не в первый раз).

4)"model_offset" "X Y Z" - я как-то говорил про куб, в который помещается модель? Так вот эта команды(model_offset) корректирует положение модели относительно этого куба. X Y Z - значения сдвига по соответствующим осям. Например, если написать "model_offset" "-20 0 0", а после этого пойти на импа, то можно легко пройти сквозь него, а если отклонится немного левее, то можно уткнуться в невидимую преграду. Короче - эта команда останавливает положение части монстра, с которой идёт взаимодействие игрового мира, относительно модели(т.е. точка 0 0 0 - Точка положения модели.). По умолчанию все модели получают значение: "model_offset" "0 0 0".

5)"spawnobject" "ХХХ" - Интересная команда. Я с ней не работал, но догадываюсь, что она делает, а именно - создаёт объект с названием ХХХ. Я взял это из описания монстра "maggot". Если есть желание можно попробовать воткнуть это где нибудь в анимации.

Все эти команды надо добавлять, естественно, в описании монстра, т.е. между скобками: "{", "}".

Система частиц и все, все, все.

Кто видал мой МОДик знает, что там HellKnight'а оставляет за собой кровавые следы. Реализация этого эффекта будет очень яркой демонстрацией системы частиц. Я сначала была мысль огненного пинки сделать, но потом решил с Хелкнайтом поизвращаться. Если хочешь, читатель, - после прочтения статьи сделай сам огненного пинки. Он должен работать следующим образом: на концах лап пламя, когда он пускает "pinkyball" должен весь покрываться огнём(тут можно закрепить ем на спину эффект взрыва fireball'а пинки). А пока приступаем к ХК.

Значит так, система следующая:
Файл с описанием монстра -> вставка использования спецэффекта в описании анимации монстра -> описание спецэффекта -> ссылка на систему частиц -> описание системы частиц.
Сейчас мы всё это постадийно провернём.
Идём в файл base\def monsters.def, там ищем строки:

/***********************************************************************

monster_demon_hellknight

***********************************************************************/


Как вы уже догадались, это начало описания ХК. Далее ищем строки:

"anim range_attack"
"models/monsters/hellknight/cycles/attack1.md5anim"

"frame melee_attack1:1" "sound snd_melee1"
"frame melee_attack1:22" "melee melee_hellknight"


В смысле этих строк, читатель, разобраться можешь сам. А вот ниже вставляем следующие строки:

"frame walk:13" "sound snd_footstep"
"frame walk:18" "fx fx/hkwalk.fx"
"frame walk:18.2" "fx fx/my/hell_2.fx"
"frame walk:33" "sound snd_footstep"
"frame walk:38" "fx fx/hkwalk.fx"
"frame walk:38.1" "fx fx/my/hell_1.fx"
"frame walk:52" "sound snd_footstep"
"frame walk:57" "fx fx/hkwalk.fx"
"frame walk:57.2" "fx fx/my/hell_2.fx"
"frame walk:72" "sound snd_footstep"
"frame walk:77" "fx fx/hkwalk.fx"
"frame walk:77.1" "fx fx/my/hell_1.fx"

Здесь всё обстоит следующим образом: 13, 33, 72 кадры - воспроизведение звука ходьбы, на сколько я помню описания этих звуков(snd_footstep) в обычной альфе отсутствует. Ну ничего, делаем так: идём в папку sound, находим файл - monster_demon_hellknight.sndshd, ищем там строки:

monster_demon_hellknight_footstep
{


А если их нет, то пишем эти строки в конце файла.
После них вставляем след. строки:

minDistance 2
maxDistance 250
volume 7

no_dups

sound/nin/monsters/hellknight/HELL_KNIGHT_FOOTSTEPS/main_steps_1.wav

}

Но по моему они уже есть в альфе. Я не помню... столько раз всё перезаписывал.
Ладно, сохраняем файл и возвращаемся к описанию ХК.
В 18, 18.2, 38, 38.1, 57, 57.2, 77, 77.1 кадрах сказано, что тут идёт вставка спецэффекта (это говорится за счёт слова "fx [файл с описанием спец. эффекта в папке base(в данном случае base\fx\hkwalk.fx и base\fx\my\hell_1.fx)]").
Другими словами - в момент отмеченного кадра будет произведён спецэффект, описание которого находится в каком - либо файле. Так, теперь идём в конец описания ХК и поставим там строку (конечно же, если её там нет):

"snd_footstep" "monster_demon_hellknight_footstep"

Ну вот, теперь переходим к описанию спецэффектов.
Открываем папку base\fx и создаём файл hkwalk.fx со следующим содержимым:

{

{
delay 0
duration 0.5
restart 0
shake 250
offset -5, 5, -5
}

}


Первая скобка открывает начало описания спецэффектов, вторая - открывает описание первого спецэффекта, т.е. в один файл можно затолкать несколько спецэффектов сразу, а потом в анимации вызывать один файл.

Теперь к описанию:
delay 0 - задержка перед тем, как будет воспроизведён спецэффект, после его вызова в анимации.
duration 0.5 - ? Не помню.
restart 0 - время через которое будет перезапущен спецэффект.
shake 250 - шок на 2.5 секунды. Шок в данном случае - это отброс камеры влево вверх
offset -5, 5, -5 - отброс камеры влево вверх.

Затем идёт конец описания первого спецэффекта и конец описания спецэффектов в целом, из данного файла.
Теперь создаём папку base\fx\my и там делаем файл hell_1.fx, со следующим содержимым:

{
bindto "rthumbtoe1"
{
delay 0
duration 2
restart 1
particle "particles/blooddrip.particle"
}
}


Первая строка открывает описание спец. эффектов.
Bindto "rthhumtoe1" - ОЧЕНЬ ВАЖНО! Указание кости, на которую будет повешен спец. эффект. В консоли есть команда - r_showskel, если поставить её в значение 1, то будут видны скелеты моделей и, соответственно, название костей(ну не костей, а мест их скрепления).
Далее начинается описание спецэффекта. Следующие три строки вам уже известны, а вот последняя:

particle "particles/blooddrip.particle" - тут говорится, что надо активизировать систему частиц из файла "particles/blooddrip.particle".
Всё ведь просто. Описание файла "particles/blooddrip.particle" я на всякий случай приведу ниже, мало - ли:

1)numParticles 0
2)material textures/particles/bloodspray

3)initialVelocity ( line, 0, 0, 0, 0.5, 0, 0 )
4)size ( 2, 5 )

5)liveforever
6)trailSize 4
7)angle ( 0, 359 )
8)rotationSpeed ( -2, 2 )
9)movewithparent
10)begin {
11) copyVelocitys
12) targetColor ( 0, 0, 0, 0.0, 0.25 )
13) source ( 0.75, point, 0,0,0 )
14) gravity ( 0.0, 0.0, -0.15 )
15) applydamping (1, 1, 0.999)
16) killunseen
17) killifolderthan 50
18) leaveThisOnWorldContact ("textures/decals/dsplat5","textures/decals/dsplat7", "textures/decals/dsplat11", 30 )
19) applyMathSoFar
20) }


1 - количество частиц, которое будет вылетать. Если поставить 0, то частицы всё равно будут лететь, но мало. Какое ограничение стоит.
2 - текстура, которая используется для отображения частиц в игровом пространстве.
3 - Я всего знать не могу. Тут указывается тип частиц (line - линии. Почему? Спросите у Кармака), их цвет и прозрачность.
4 - Ясен пень - Размеры(X Y).
5 - живут всегда, т.е. пока не столкнутся.
6 - Не знаю или не помню.
7 - угол под которым могут вылетать частицы(0 - 359 градусов)
8 - скорость вращения по оси X Y. Это ведь спрайты.
9 - Не знаю или не помню.
10 - начало основной описаловки.
11 - для всех частиц одни и те же параметры(тир - line и всё такое).
12 - Не знаю или не помню.
13 - См. выше
14 - воздействие гравитации, точнее скорость падения по осям (X Y Z).
15 - Не знаю или не помню.
16 - Если частицу не видно, то и не обрабатывать её.
17 - время существования.
18 - Когда частица касается стен или ещё чего - то, то на её месте появляется Кровавый след, текстура которого выберется случайно из перечисленных.
19 - Не помню или не знаю.
20 - конец основного описания.

Теперь всё аккуратненько сохраняем, и запускаем игру. Ну как?

В общем - то мы с вами только что рассмотрели систему спецэффектов и частиц, их взаимодействие.
Идём дальше...

Пулемёт Максим или рельсу на изготовку, plz.

Через пару десятков минут, парень, ты создашь рельсу. Что тебе для этого нужно:
1)Умение думать, читать, печатать.
2)Модель рельсы. Как её экспортировать из Майки смотри в других статьях с названием похожим на Модострой.
3)Звук рельсы. Лично я возьму из ку3.
4)Время.
Идём папку base\def, там есть файл weapons.def, открываем его и пишем в его конец следующее (все файлы анимации и модели я сделал сам и затолкал в папку base\weapons\mrg):

1)entityDef weapon_MRG
2){
3) "editor_color" ".3 .3 1"
4) "editor_mins" "-16 -16 0"
5) "editor_maxs" "16 16 32"

6) "editor_usage" ""

7) "spawnclass" "idItem"
8) "model" "models/weapons/mrg/idle.md5mesh"
9) "viewmodel" "models/weapons/mrg/idle.md5mesh"
10) "anim idle" "models/weapons/mrg/idle.md5anim"
11) "anim fire" "models/weapons/mrg/fire.md5anim"
12) "anim noammo" "models/weapons/mrg/empty.md5anim"

13) "inv_message" "Picked up a RailGun"
14) "inv_weapon" "weapon_mrailgun"
15) "inv_ammo_slugs" "10"
16) "icon" "guis/assets/hud/mrg_icon"

17) "weaponname" "RailGun"
18) "projectile" "projectile_mrg"
19) "numProjectiles" "1"
20) "spread" "0"
21) "ammoType" "ammo_slugs"
22) "ammoRequired" "1"
23) "clipSize" "5"
24) "fireRate" "0"
25) "switchWhenEmpty" "0"

26) "flashShader" "muzzleflash"
27) "flashColor" "1 0.55 0"
28) "flashRadius" "80"

29) "snd_fire" "MRG_FIRE"
30) "snd_empty" "MRG_EMPTY"

31)}


1)Говорит, что начато описание с именем "weapon_MRG".
2)Начало описания.
3,4,5,6) Информация для редактора, не имеет большого значения.
7)Указание названия класса, в случаях с оружием надо указывать - "IdItem", это ведь всё таки айтем.
8)Модель, которая используется для отображения в игровом мире.
9)Модель, которая используется для отображения в руках, когда ты смотришь от первого лица.
10)Анимация, когда ты просто бегаешь и не производишь над орудием никаких действий.
11)Анимация выстрела.
12)Анимация, когда у тебя нет патронов.
13)Сообщение, которое вываливается в тот момент, когда ты подбираешь пушку.
14)Название оружия. Запомни, нам это ещё пригодится.
15)Количество патронов, которое будет дано при поднятии оружия.
16)Иконка, которая будет гореть, когда выбираем или поднимем пушку. Расширение - TARGA(*.tga).
17)Опять название оружия, но уже для других целей.
18)Пуля, которую использует оружие. Эта пуля должна быть описана в файле base\def\projectiles.def, но с ним разберёмся чуть позже.
19) Количество пуль, вылетающих за один выстрел.
20)Разброс пуль, при выстреле.
21)Тип патронов. Помните в начале файла base\def\ammo.def идёт описание типов патронов. Можете добавить свой.
22)Мин. Кол - во патронов для одного выстрела.
23)Размер дыр, после выстрела. Вроде бы...
24)Задержка перед следующим выстрелом.
25)Переключать ли на другую пушку, если у вас закончились патроны.
26)Картинка, которая используется для вспышки. MuzzleFlash - это картинка по умолчанию - круг.
27)Цвет вспышки.
28)Радиус вспышки. Вспышка происходит в момент выстрела и источником является оружие.
29,30) Описание звука.
31)Конец описания оружия.

Так, давайте сразу разберёмся со звуком. Если есть желание вставить свой звук, то надо чтобы звуковые файлы были типа WAV(*.wav), 44.1 KHZ, Stereo. Теперь для тех кто хочет использовать звук рельсы из ку3:Файл 22.5 KHZ. Нам надо сделать его 44.1 KHZ. Как? Нет, это я у вас спрашиваю... Шутка. Берите Любую прогу, которая позволяет редактировать звуковые файлы (не используте Sound Forge XP, у меня он нормально так и не смог конвертировать, а вот TsunamiPro32 - смог.), затем открываем там звук выстрела рельсы, выбираем сохранить как и указываем частоту 44.1 KHZ. Теперь, допустим, что у вас уже есть готовые звуковые файлы, если так, тогда идём в base\sound\weapons.sndshd и в конце файла пишем:

MRG_FIRE
{
minDistance 1
maxDistance 100
volume 1
sound/weapons/mrg/mrg_fire.wav
}

MRG_EMPTY
{
minDistance 1
maxDistance 100
volume 1
sound/weapons/mrg/mrg_empty.wav
}


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

Теперь разберёмся с мелочами, которые необходимы для запуска пушки:

1)Идём в base\def\player.def. Там есть строки:

"weapon0" "weapon_fists"
"weapon1" "weapon_pistol"
"weapon2" "weapon_shotgun"
"weapon3" "weapon_machinegun"
"weapon4" "weapon_flare"
"weapon5" ""
"weapon6" ""
"weapon7" ""
"weapon8" ""
"weapon9" ""
"weapon10" ""
"weapon11" ""
"weapon12" ""
"weapon13" ""
"weapon14" ""
"weapon15" ""


У тебя, читатель, эти строки выглядят по другому, наверно. Короче, твоя задача добавит свою пушку в список уже имеющихся, делается это, например, так:

"weapon15" "weapon_mrailgun".

Я как-то говорил тебе запомнить название пушки?(weapon_mrailgun)

2)Ищем base\def\projectiles.def и там, в конце файла, пишем следующее:

1)entityDef projectile_mrg
2){
3) "spawnclass" "idProjectile"
4) "mins" "-1 -1 -1"
5) "maxs" "1 1 1"
6) "scale" "0.1"
7) "noshadows" "1"

8) "snd_ricochet" "mrg_rikoshet"
9) "snd_impact" "mrg_metal_impact"
10) "snd_impact_flesh" "mrg_impact_flesh"

11) "decal_scale" "8"

12) "damage" "damage_shotgun"

13) "health" "0"
14) "velocity" "7200 0 0"
15) "angular_velocity" "0 0 0"
16) "thrust" "0"
17) "thrust_start" "0"
18) "thrust_end" "0"
19) "linear_friction" "0"
20) "angular_friction" "0"
21) "contact_friction" "0"
22) "bounce" "0.6"
23) "mass" "5"
24) "gravity" "1066"
25) "fuse" "4"

26) "detonate_on_fuse" "1"
27) "detonate_on_death" "0"
28) "detonate_on_world" "1"
29) "detonate_on_actor" "1"

30) "impact_blood" "0"
31) "impact_gib" "1"

32) "decal_bounce" ""
33) "decal_detonate" "textures/decals/bulleth02"
34) "decal_size" "7"

35) "fx_fly" ""
36) "fx_detonate" ""
37) "fx_fuse" ""
38) "fx_blood" ""

39) "light_shader" ""
40) "light_color" "0 0 0"
41) "light_radius" "0"
42) "light_offset" "0 0 0"

43) "detonate_light_shader" ""
44) "detonate_light_color" "0 0 0"
45) "detonate_light_radius" "0"
46) "detonate_light_removetime" "0"
47)}


Помните у нас в описании оружия была такая строка:

"projectile" "projectile_mrg" ?

Я сказал, что это указание на название пули, так вот, то что вы видите сейчас чуть выше - это и есть описание пули. Сейчас мы в нём разберёмся.

1)Говорим, что начинаем описание с именем projectile_mrg.
2)Начало описания.
3)Название класса, к которому относится этот объект. В данном случае у нас пуля, соответственно - должен быть класс пули - idProjectile.
4,5)Не знаю.
6)Изменение размера, я уже об этом писал.
7)Пуля не отбрасывает тени.
8,9,10)Описание звука. Приводить его не буду. Опишите сами, мы уже с вами достаточно в этом практиковались.
11)Не знаю.
12)Какое количество урона наносит. Список наносимых повреждений (там же можно добавить свой) находится в файле base\def\melee.def. Я, чтобы не париться, поставил урон от шотгана.
13)Количество жизней у пули. Да, тут даже и это имеется. А что вы никогда не взрывали fireball импа?
14)Что-то вроде направления при вылете из ствола.
15 - 21)Не знаю.
22)Прыгучесть, отскакиваемость патрона от стен. В данном случае не имеет смысла, т.к. пуля у нас уничтожается куда бы она не попала.
23)Масса пули. Этот параметр имеет смысл, в том случае, если вы стреляете во что - либо ragdoll активное.
24)Воздействие гравитации. Почти не влияет на траекторию полёта.
25)Ещё один параметр похожий на 22.
26)Взрывается ли при физ. Контакте (отскакивание от стен).
27)Взрывается ли, когда заканчиваются жизни?
28)Взрывается ли при взаимодействии с игровым миром (столы, стулья и т.п.)
29)Взрывается ли при попадании в NPC.
30)При попадании летит кровь?
31)Когда достигнут предел количества жизни, для того чтобы разорвало на куски модель, разрывать её?
32)Картинка, которая появляется, при физическом взаимодействии (отскакивание от стен).
33)Картинка, которая появляется при попадании в стены и т.п.
34)Размер этих картинок.
35)Спецэффект при полёте.
36)Спецэффект при взрыве.
37)Спецэффект при физическом взаимодействии.
38)Кровь, которая используется при попадании.
39)Картинка, которая появляется как вспышка при выстреле.
40)Цвет этой картинки, в системе RGB(RED GREEN BLUE).
41)Радиус этой вспышки.
42)Что-то вроде отступа вспышки в разные стороны.
43)При взрыве (попадании во что либо) какую картинку используем?
44)Цвет взрыва.
45)Радиус взрыва.
46)Время сущ. Эффекта взрыва.
47)Конец описания пули.

Ну, кажется всё. Теперь вы знаете довольно много.



Другие материалы рубрики:




Комментарии

#1  FX (-----.sovam.com)   19:08  30.12.2003
Про Ragdoll
А как Ragdoll к лампе приделать как на e3_3. У меня не выходит, если узнаешь то с физикой можно будет такого наделать...

#2  FX (-----.sovam.com)   19:15  30.12.2003
Опять про Ragdoll
И еще, ты там пиешь про физические взаимодействия импа с окружающей средой, где он для упрощения в коробку пихается, но система взаимодействия с пулей все равно остается полигоналтной, а как можно приделать полигональную детекцию выстрелов к обыкновенным моделям, у меня есть пара сложных моделей, но для физики их приходится затягивать в квадрат и взаимодействую они с пулями только через этот квадрат, может к модели тоже def надо какой-нибудь написать.

#3  raZor (-----.132.19)   16:17  01.01.2004
FX ' y
ragdoll к лампе пределать элеменоарно!
если надо пиши на мыло расскажу!

#4  raZor (-----.132.19)   16:19  01.01.2004
о radiant'e и думе!
о radiant'e и думе моги многое рассказать и показать! и вообще клёвый сайт поболя б таких!

#5  raZor (-----.132.19)   16:20  01.01.2004
поправка
... думе могу многое......

#6  dвцщКвшфтwdwoRdianoRdian (-----.94.41)   01:13  02.01.2004
Ну что попробую

#7  SGI (-----.wplus.net)   12:05  06.01.2004
>3)initialVelocity (line,0,0,0,0.5,0,0)
>3 - Я всего знать не могу. Тут указывается >тип частиц (line - линии. Почему? Спросите >у Кармака), их цвет и прозрачность.

line - это не тип частицы линия. Это тип модели ее испускания. Линия- значит частицы вылетают вдоль линии. Еще вроде есть cone - конус, т.е. частицы вылетают пучком в виде конуса и sphere - в разные стороны, как из сферы.

#8  Don (-----.50.164)   20:24  06.01.2004
SGI
Ага и ещё сфера (sphere)

#9  Don (-----.50.164)   20:28  06.01.2004
Интересно было бы Ragdoll'овского Pink demon'а забацать!!!

#10  [ss]3L33T@ (-----.BurNet.Ru)   07:07  07.01.2004
2 SGI:
Я это и имел ввиду. У меня небольшие проблемы с выражением мыслей :).
2 Don:
Я ведь это очень просто. В след. статье я про это напишу. Вот только выберусь из Улан-Удэ.
Ну и гадючник тут. клубы днём с огнём не сыщешь. Ели нашёл. Вот сижу, чепятую...:)

#11  raZor (-----.132.19)   10:32  14.01.2004
monster_demon_pynky_ragdoll
у меня уже есть рагдолл пинки, а так же имп и хеллкнайт и это можно сделать с каждым!
Хотите могу дать, только они немного глючат, но Это исправляется правильной подборкой костей, импа я почти исправил!

#12  [ss]3L33T@ (-----.csk.ru)   13:09  16.01.2004
2 raZor
И типа чё?
Я давно говорил:"RagDoll моно прикрутить в любой момент к любому монстру."
Просто никто никак не реагирует.
на этом сайте мало программеров, в основном - геймеры.

#13  Don (-----.50.164)   18:20  19.01.2004
Обращение к народу!
Народ! кому не лень подскажите как в Radiant'е сделать неровные поверности.
[ss]3L33T@ как смодельировать взрывную волну для Rocketlauncher'а?! Если не влом
расскажи поЖалуВста!!!

#14  [ss]3L33T@ (-----.irtel.ru)   06:29  20.01.2004
2 Don
Ну ничё ты загнул.
Это тебе надо париться с частицами. Почитай эту статью тут всё написано.

#15  Don (-----.50.164)   19:47  23.01.2004
[ss]3L33T@
С частицами я уже давно разобрался!
Ну е там кое чё над чем поработать надо.
И есчё! Я не про частицы, а про физическую
модель. %)А как в Radiant'е сделать неровные поверности у кого нибудь есть ответ?

#16  [ss]3L33T@ (-----.sibron.ru)   07:43  24.01.2004
2 Don
Это ты к killer'у и FX иди - они тебе скажут

#17  LoHHa (-----.170.1)   17:22  24.01.2004
[ss]3L33T@
а в Майку совсем нельзя модели затащить? я тут слыхал, что в четвёртой люди дополнительные анимации для монстров делали...
в этом деле я ламо полное, но ради создания мультика на движке всему научусь

#18  [ss]3L33T@ (-----.csk.ru)   06:34  25.01.2004
2 LoHHa
Из Майи в дум - моно. Из Дума в Майю - моно, но я не знаю формат майи.

#19  LoHHa (-----.170.1)   11:41  25.01.2004
killer вроде
скоро разузнает у Onan'a

#20  LoHHa (-----.170.1)   11:42  25.01.2004
... как там что делается :)

#21  [ss]W@RR1OR (-----.csk.ru)   11:30  02.02.2004
Сразу видно - Элитыч работал. Только вот уж дёже сильно модефицировано всё.
2 админ: по-меньше коррекции и "народ к вам потянется".

#22  Fedir (-----.farlep.net)   19:48  18.11.2005
Чё за...
А почему у меня в папке base кроме savegames & maрs ничего нет (папок других нет) а только файлики *.pk4? Чего это все заархивировано, так же дольше открывается?!

#23  Миха (-----.spb.ru)   11:54  26.12.2007
Ну ты...
Fedir потому что все у тебя лежит в файлах *.pk4 это архивы Zip. Открой их WinRar'ом ивсе, читать статьи надо внимательней $

#24  Fucker (-----.nchel.ru)   07:20  01.01.2008
Чем открыть md5mesh в максе? или законвертить?



Добавить комментарий
Имя - заполнять обязательно

Е-майл

Заголовок

Текст комментария - заполнять обязательно

Введите эти цифры в это поле.






Розовый





















Valuehost.Ru


Яндекс цитированияRambler's Top100Rambler's Top100
DOOM3 is a registered trademark of id'Software
Copyright 2002-2018 © Doom3.ru