Ок, с чего бы начать... может быть просто записывать мысли в таком порядке как они будут приходить в голову? Думаю, что так получится лучше всего
Это список всех частей тела (не суставов) с их внутреигровыми названиями. Это нам пригодится в будующем. Суставы называются также как и в игре, когда вы наводите на них, только вместо right в начало названия добавляется r_ и вместо left l_ соответственно.
А теперь начнем сам туториал :)
Для начала откройте старый добрый блокнот (если вы используете Mac или Linux, то откройте какой-нибудь простейший текстовый редактор. Нам не нужно форматирование, мы же не письмо любимой девушке пишем :D). Моды описываются в простых текстовых файлов и вы прямо сейчас можете открыть любой из папки data\mods и посмотреть как моды устроены. Если вы все поймете в структуре файлов модов, то этот туториал вам точно не нужен :P
Чтобы обучиться базовым принципам создания модов, давайте создадим что-нибудь :D
Как вы можете увидеть на моей аццкой картинки из пейнта, ось X расположена по направлению от одной руки к другой, ось Z это вверх и вниз, а ось Y это к юку и от него.
Для нашего тестового мода с мечами мы модифицируем кулаки, чтобы они были длинее и были инстагибистыми (интересное слово я придумал... я имею в виду, что при прикосновении к ним других частей тела, суставы прилегающие к этим частям будут ломаться).
Вот стандартный код для правого кулака:
body r_hand shape box sides 0.22 0.22 0.22 alt_sides 0.3 0.11 0.16 pos -0.35 0.85 2.3 rot 0 0 0 force 0 0 0 color 1 1 1 material flesh flag 32
Естественно нам нужно указывать только то, что мы изменяем, остальное будет установлено в значение по умолчанию. Обязательно только надо указать "body r_hand", это указывает на часть тела, которую мы редактируем. Пожалуйста, я прошу вас, умоляю даже!!!! скопируйте предыдущий код в блокнот. Просто читать и не пробовать все сделать самому никогда не кончается хорошо :D
Для начала, мы изменим размер кулака, чтобы они выглядели как мечи. Внутри кода правого кулака написано:
sides 0.22 0.22 0.22
Это означает, что кулак длиной 0.22 внутриигровых единиц длины в каждую сторону, то есть простой куб.
Мы хотим сделать мод с мечом, так что мы должны сделать кулак шире по оси Z (вверх и вниз) и тоньше по оси X.
Первое число обозначает координаты по оси X, второе по оси Y и третье по оси Z соответственно.
Так что если бы я хотел сделать кулак длинее в высоту я изменил бы
sides 0.22 0.22 0.22
например, на
sides 0.22 0.22 1
Основная часть времени при создании модов уходит на угадывание (это означает, что пока мы не сохраним мод и не откроем его в игре, мы не можем знать как он будет выглядеть) и тестирование. Так что основной цикл создания модов это изменение, тестирование и опять изменение и тестирование и так пока мы не увидим то, что мы хотели бы.
Теперь сделайте в блокноте теже изменения, какие я совершил выше, то есть 0.22 измените на 1. Теперь нажимаете Файл->Сохранить (или что там у вашего редактора) и сохраните файл под именем modtut.tbm в папку data\mod (чтобы сохранить файл с помощью виндоусовского блокнота с нестандартным расширением (в нашем случае - .tbm) выберите вмесьл "Текстовые документы (*.txt)" "Все файлы") и сохраните файл.
Теперь откройте Toribash, зайдите в одиночную игру и введите в чат команду "/lm modtut.tbm" (вы естестественно могли бы выбрать мод в меню, но так быстрее).
И вот ВАШ СОБСТВЕННЫЙ первый мод. Выглядит хреново, я прав?
Меч недостаточно длинный, так что вернемся в блокнот и изменим 1 на, например, 1.5, теперь пересохраните файл и теперь разверните окно Toribash и введите "/lm default" (если вы сразу введете "/lm modtut.tbm", то тогда игра не загрузит его, так как она подумает что вы пытаетесь второй раз один и тот же мод грузить и это как-то хреново и все такое) и теперь как обычно "/lm modtut.tbm".
Теперь меч выглядит подлиннее, мне кажется в самый раз. Если вы хотите сделать его длиннее или короче - делайте, так даже будет лучше, если вы будете сами пробовать.
Не кажется ли вам что он выглядит как просто большая палка?
Мы должны сделать наш меч намного тоньше. Измените
sides 0.22 0.22 1.5
на примерно
sides 0.005 0.22 1.5
Теперь у нас должно получиться примерно следующее:
[реклама вместо картинки]
Вроде бы размер правильный. Теперь мы должны исправить позицию. Кто же держит меч за середину лезвия :D
Найдите строку содержащую
pos -0.35 0.85 2.3
Это позиция кулака, как вы уже наверно поняли :D Естественно X, Y и Z.
Такс, мы хотим сделать его выше, чтобы это выглядело, как игрок держит меч за низ.
Попробуйте изменить
pos -0.25 0.85 2.3
на
pos -0.25 0.85 3
пересохраните, перезагрузите :)
немного высоковато, опустите до 2.9, так должно быть в самый раз.
Теперь вроде бы все хорошо, но здесь есть промежуток между мечом и суставом, который раньше был запястьем по оси X. Попробуйте изменить -0.35 на 0.2.
Теперь это выглядит как будто он держит меч!
[реклама вместо картинки]
Что еще мы можем сделать? А давайте-ка добавим инстагиб, как мы и хотели.
Инстагиб устанавливается с помощью флагов (параметр flag). Вот их список:
1 = стандартно
2 = при ударе по этой части тела противник не получает очков
6 = инстагиб и антиинстагиб (другие инстагибирующие вещи не будут ломать)
8 = статический объект (только для объектов, не относящихся к игрокам)
12 = инстагиб
16 = невозможно грабнуть
32 = недисквалифируема (как на кулаках и ступнях)
Небольшой комментарий: я не очень уверен на счет этих флагов, хотя везде именно их указывают. Просто обычно должно это быть, как отдельные битовые флаги (числа с только одним битом установленым в единицу... двоичная система счисления...)
Если вы хотите указать несколько флагов, то вы должны сложить требуемые числа, то есть, например, вы хотите сделать часть тела, которую невозможно заграбить и которая не будет дисквалифицироваться, то вы должны сложить 16 и 32 и написать 48 во флагах.
МЫ хотим сделать наш меч инстагибирующим и чтобы противник не мог сломать руку, когда он коснется своим мечом нашего, значит нам нужен флаг 6 (инстагиб и антиинстагиб), теперь исправьте флаг 32 на флаг 38 (инстагиб + недисквалифицируемость), сохраните мод и протестируйте в игре, коснувшись юка!
[реклама вместо картинки]
Но мечи же делают из металла, не из мяса, да? Изменим-ка
material flesh
на
material steel
Никаких видимых изменений, но это делает тяжелее и меняет звуки при ударе
Теперь у вас должно получиться что-то типа такого:
body r_hand shape box sides 0.005 0.15 1.5 alt_sides 0.3 0.11 0.16 pos -0.2 0.85 2.9 rot 0 0 0 force 0 0 0 color 1 1 1 material steel flag 38
Возможность граба на мече немного бесполезна, давайте-ка сделаем небольшое изменение, точнее сделаем грабящую руку такого же размера, как и обычную. У нас написано
sides 0.005 0.15 1.5
так что вы должны написать
alt_sides 0.004 0.14 1.4
или что-то типа такого, не особо важно, если быть честным.
Давайте теперь повернем наш меч, а то он стоит как-то слишком прямо, не бывает так
Чтобы это сделам нам потребуется команда rot. Работает точно также как и pos, то есть X, Y, Z и все такое, только здесь уже углы в градусах. Так, мы хотим, чтобы меч был повернут немного назад и в бок, поэтому сделаем что-то типа такого:
rot -10 20 0
Кажется мы повернули вперед, а не назад. Именно поэтому большую часть времени занимает проверка изменений в игре. Вы конечно можете юзать математику и посчитать что получится, но проще и менее скучно будет проверить в игре. Теперь просто меняем знак:
rot 10 20 0
И теперь должно быть как надо.
Теперь можно замутить еще какую-нить хрень. Например, добавим цвет. Цвета естественно указываются в формате RGB, только разница в том что максимум каждого цвета обозначается 1, а минимум 0. То есть чтобы перевести из стандартного формата RGB нам нужно каждую циферку разделить на 255 и должно то что надо получиться. Можете тестировать цвета в пейнте (если знаете как ;P).
Например, я в своем моде сделал меч желтым, то есть rgb 1 1 0
И вот что у меня получилось:
[реклама вместо картинки]
Давайте теперь сделаем для прикола ЦИЛИНДРИЧЕСКИЕ БОТИНКИ МВАХАХА. Хм.
Для начала нам потребуется стандартный код для левой ступни...
body l_foot shape box sides 0.2 0.5 0.08 pos 1.2 0.9 0.1 rot 0 0 0 force 0 0 0 color 1 1 1 material flesh flag 32
...и для правой...
body r_foot shape box sides 0.2 0.5 0.08 pos 0.8 0.9 0.1 rot 0 0 0 force 0 0 0 color 1 1 1 material flesh flag 32
Теперь изменим их форму на цилиндр. Для этого изменяем
shape box
на
shape cylinder
Все очень просто ы. Всего есть 3 типа объектов: box, cylinder и sphere. Прямоугольный параллелепипед (также известный как ящик), цилиндр и сфера.
Теперь ноги появляются внутри земли и цилиндры не в ту сторону повернуты. Есть два способа заставить их смотреть в нужную сторону. Перед тем как вы прочтете ответ, попробуйте сами додуматься как это сделать.
Вы можете использовать поворот или изменить размер <- выделите это, тут ответко xD
Надеюсь я вас уже достаточно обучил и вы можете сделать это сами. Теперь я вставлю то что у меня получилось если у вы не смогли сделать то что надо, но пожалуйста сделайте лучше это сами, тогда у вас будет больше шансов выучиться.
body l_foot
shape cylinder
sides 0.2 1 0.08
pos 1.2 0.9 0.1
rot 90 0 0
force 0 0 0
color 1 1 1
material flesh
flag 32body r_foot
shape cylinder
sides 0.2 1 0.08
pos 0.8 0.9 0.1
rot 90 0 0
force 0 0 0
color 1 1 1
material flesh
flag 32
^ выделите ^
Теперь сделаем ботинки черными или темно серыми, а то белые ботинки хреново выглядят. Сделайте это сами, а я напишу ответ внизу если вы ничего поняли с цветами :\
color 0 0 0
Теперь то что у нас получилось должно выглядеть вот так:
[реклама вместо картинки]
А давайте теперь сделаем чтобы они летели друг на друга как в jousting'е...
Для этого нам нужно будет использовать force. Если вы откройте файл jousting.tbm вы увидете что там используется force. Наш код будет немного другим. Пусть ноги пойдут вперед, это поможет нам устоять на них. Нам не нужно писать force для каждой части, примерно 5-10 частей тела в самый раз.
body stomach force 0 20 0 body breast force 0 20 0 body chest force 0 20 0 body groin force 0 20 0 body r_pecs force 0 20 0 body l_pecs force 0 20 0 body r_thigh force 0 20 0 body l_thigh force 0 20 0 body l_leg force 0 20 0 body r_leg force 0 20 0
Это сделает все что нам нужно. Просто вставьте в ваш мод, помучиться с force вы можете потом :D
Но теперь мы переворачиваемся из-за двух вещей:
1) Слишком много трения
2) Ноги в самом начале внутри земли находятся
Чтобы исправить первое добавьте
friction 0
в начала вашего мода.
А чтобы исправить второе добавьте
gamerule engageheight 20
Это установит engageheight на 20 в игровых настройках. Тоже самое что и /set engageheight 20
Хммм... все еще не работает? Я только что понял что наши ступни слишком большие и соответственно слишком тяжелые и нам потребуется больше силы для них. Исправьте force у ног на то что хотите (120 у меня получилось в самый раз). Не забудьте сделать это для обеех ног.
Но теперь тори поворачивается в левую сторону потому что его левая рука тяжелее меча. Мы можем это исправить двумя способами: сделать меч тяжелее увеличив толщину лезвия или добавить силы на левую сторону чтобы компенсировать разницу массы.
Я выбрал добавление силы. И вот что получилось:
body stomach force 0 20 0 body breast force 0 20 0 body chest force 0 20 0 body groin force 0 20 0 body r_pecs force 0 20 0 body l_pecs force 0 35 0 body r_thigh force 0 20 0 body l_thigh force 0 35 0 body l_leg force 0 35 0 body r_leg force 0 20 0
Это вроде работает нормально.
А теперь сделаем чтобы правое запястье вращалось по другим осям, чтобы лучше управлять мечом.
joint r_wrist radius 0.11 pos -0.2 0.9 2.3 axis 0 0 1 rot 0 0 0 range 2.0 -0.3 strength 2.0 velocity 60.0
^ стандартный код запястья ^
Вставьте этот код в свой мод. Теперь изменим
axis 0 0 1
на
axis 0 1 0
и измените range на
range 1 -2.5
axis устанавливает в каком направлении вращается сустав, а range на сколько сильно сустав поворачивается в стороны (небольшое примечание: что-то мне подсказывает что это угол в радианах). Видите как проще теперь управлять мечом :D
Теперь давайте превратим левую руку в сверло xD (я стараюсь охватить как можно больше в этом туториале).
Код для левого запястья:
joint l_wrist radius 0.11 pos 2.2 0.9 2.3 axis 0 0 1 rot 0 0 0 range 2.0 -0.3 strength 2.0 velocity 60.0
Вставьте это в свой мод естественно. Мы хотим чтобы кулак вращался на 360 градусов так что сделаем range большим
range 5 -5
В самый раз. Теперь изменим axis чтобы кулак вращался в нужном направлении.
axis 1 0 0
^ это сделает так чтобы кулак вращался как сверло. Но есть одна проблема - он слишком медленно вращается. Чтобы это исправить нам нужно изменить velocity, то есть как быстро сустав вращается. Увеличьте velocity вдвое. Также нам потребуется изменить strength - "силу сустава", то есть перестанет ли вращаться сустав если вы грабните юка или у сустава будет достаточно силы чтобы вращать юка. Измените strength на 100.
Так что же мы еще не сделали... А, точно, мы еще не добавили никаких окружающих объектов. Давайте сделаем трамплин чтобы игроки сталкивались в воздухе.
Пример код объекта:
env_obj 1 shape box pos 1 -0.125 0.73 color 0 0 0 rot 0 0 0 sides 1 1 1.48 material steel mass 0.1 flag 24
shape как вы уже наверно поняли устанавливает форму объекта.
pos - позиция как и у всех объектов
color - цвет
rot - поворот объекта
sides - размер...
material - материал. flesh или steel, то есть плоть или металл
Но теперь появилось mass - масса объекта.
flag - такие же флаги как и раньше. Разница только в том что здесь можно использовать дополнительный флаг 8, который делает объект статичным (то есть не двигается он)
Наш трамплин должен быть тонким, немного повернутым, чтобы работал как трамплин и статичным (мы же не хотим чтобы игроки двигали трамплин. Размер у нас будет примерно такой:
sides 2 2 0.1
Теперь у нас получилось что-то типа трамплина. Запомните, что трамплин будет состоять из двух частей, так что он будет более плавным, чтобы не так сильно снизить скорость. Нам нужно добавить вращение. Сделайте, например, так:
rot 0 10 0
Мы хотим сделать 4 объекта, по 2 на каждой стороне, поэтому сделаем этот объект на стороне красного игрока, для синего потом доделаем.
Изменим
pos 1 -0.125 0.73
на... подождите-ка. Попробуйте сами разместить объект. Но я на всякий случай как всегда сохранил ответ:
pos 1 4 0.12 <- то что у меня получилось
выделите ^
Мы сделали объект немного внутри пола, чтобы ноги игрока не зацепились за угол.
Для следущей части скопируйте код для объекта и измените
env_obj 1
на
env_obj 2
(для каждого объекта нужен уникальный номер)
и попробуйте расчитать позицию сами. Вот моя для сравнения:
pos 1 2.2 0.6
Теперь вы можете изменить цвет трамплина, я сделал коричневым, так что он выглядит как деревянный (что-то типа того)
[реклама вместо картинки]
Вот что у нас получилось ^
Выглядит достаточно круто :D
Для того чтобы сделать трамплин со стороны юка, просто измените знак (если не доходит: минус перед цифрами поставьте) у некоторых циферок... например позиция, поворот... Попробуйте сами это сделать (не забудьте новым объектам поменять номера, чтобы они не перезаписали друг друга)
Если вам лень самим искать ответ, вот мой:
env_obj 1
shape box
pos 1 4 0.12
color 0.3 0.1 0.05
rot 10 0 0
sides 2 2 0.1
material steel
mass 0.1
flag 24env_obj 2
shape box
pos 1 2.2 0.6
color 0.3 0.1 0.05
rot 20 0 0
sides 2 2 0.1
material steel
mass 0.1
flag 24env_obj 3
shape box
pos 1 -4 0.12
color 0.3 0.1 0.05
rot -10 0 0
sides 2 2 0.1
material steel
mass 0.1
flag 24env_obj 4
shape box
pos 1 -2.2 0.6
color 0.3 0.1 0.05
rot -20 0 0
sides 2 2 0.1
material steel
mass 0.1
flag 24
Флаг 24 означает что объект невозможно грабнуть и он статический. Вы, конечно, можете изменить это если хотите.
Наконец-то! Мы сделали это! Примерный скрин того что должно было получиться:
[реклама вместо картинки]
Все. Конец...
И еще кое-что. Здесь вы можете скачать стандартные параметры всех частей тела игроков (спасибо mrpoptart'у за это).
Надеюсь вам это понравилось. Могут быть очепятки.
Оригинал
Отредактировано SL7549 (25.04.2009 10:02:08)