Проекты и Туториалы пользователей M.U.G.E.N.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



туторы

Сообщений 1 страница 16 из 16

1

Как добавить персонажа из простого m.u.g.e.n. в MKP(Mortal Kombat Project)

Нужно добавить файл common1.cns в папку с персонажем!Но файл не с каждой игры подойдет!!!
common1.cns

0

2

Параметры для использования звуков/анимаций.

Параметры использования анимаций:
F19 - анимация #19 используется из файла "Fightfx.air";
S19 - анимация #19 принудительно используется из .air-файла персонажа;
19 - анимация #19 используется из .air-файла персонажа.
Параметры использования звуков:
F19 - звук #19 используется из файла "Common.snd";
19 - звук #19 используется из .snd-файла персонажа.

0

3

Как изменить скорость randomeselect`a?

В папке "Data" в фаиле "System.def" Найти параметр и изменить:

;----------------------------------------------------
[SELECT INFO]
;----------------------------------------------------

;CELL.RANDOM.SWITCHTIME=15

Нада изменить цифру,но с учетом что 60-это 1 секунда!

0

4

Как сделать select screen 1-й картинкой?
1) Установить Fighter Factory v3.0.
2) В программе выбрать вкладку "Sprites" -> "Open" -> затем открыть "Data" -> "System.sff".
3) Добавить свою картинку "Sprites" -> "Add", выбрать группу-номер-положение.
4) Сохранить: "Sprites" -> "Save".
5) Открыть “System.def” и наити секцию:

[SelectBG 0]
type = normal
spriteno = 27,0 (Это и есть номер вашей картинки (Группа,номер))
start = 0,0
delta = 1,1
6) Сохранить: “System.def”

0

5

Возможно ли отключить кровь в игре?

Возможно!
1) В Statedef'ах ударов нужно поубирать хелперы с ссылками на стэйты №№ 28-31.
2) Или поудалять спрайты крови.


еще немного о крови:


Как сделать так чтобы кровь после удара осталось на полу?
На последний элемент в анимации
крови поставить бесконечное время
(-1), если она воспроизводится посредством эксплода . Если посредством обычной анимации в
хелпере (последний элемент тоже должен быть со временем -1), тогда нужно убрать либо отредактировать
DestroySelf.

0

6

Для тех кто не умеет создавать скринпаки я написал ТУТОРИАЛ.
Распределю его на несколько сообщений.
Для создания скринпака нам нужны 2 проги:
Figther Factory и Adobe Photoshop.

Основы

Итак, начнем мы с самого простейшего. Для этого запустим Fighter Factory, нажмем на блокнот:

Далее открываем файл System.def вашего Мугена, нажав на кнопку открыть:

Все. Теперь у нас открыт System.def и мы начинаем его редактировать:
[b][info] -
основная инфа о игре
Name = "****" - название вашей игры/сборки
Author = "****" - вы, то-есть создатель игры
displayname = "****" - отображаемое имя автора
versiondate = 25.04.2008 - дата создания
mugenversion= 06,14,2003 - версия Мугена
pal.defaults=1,2,3,4,5 - стандартный набор палитр (менять не надо)

Подключение файлов

Далее у нас идет заголовок [Files], где и идет подключение различных файлов
spr = system.sff - файл спрайтов для самого меню
snd = system.snd - файл звуков для основного меню
logo.storyboard = ****.def - Это лого при запуске игры
intro.storyboard = ****.def - Инто в игре
select = select.def - здесь пишите файл, в котором вы подключаете персов и арены
fight = fight.def - файл битвы (Лайфбар и тд и тп)
font1 = ****.fnt - шрифт 1
font2 = ****.fnt - шрифт 2, и так можете продолжать долго, увеличивая цифру после font.
Ну вот, файлы мы теперь подключили!

Музыка

Следующим заголовком в System.def должен быть [Music]. Разбираемся тут.

title.bgm = sound/Menu.mp3 - путь к файлу музыки для главного меню
title.bgm.loop = 1 - параметр =1говорит,что после конца песни она начнет играть снова, при = 0 этого не будет

select.bgm =sound/CharSel.mp3 - путь к файлу музыки для меню выбора персонажей
select.bgm.loop = 1 - параметр=1говорит,что после конца песни она начнет играть снова,при=0 этого не будет

vs.bgm =sound/VSscreen.mp3 - путь к файлу музыки для ВС скрина (Когда идет показ кто против кого)
vs.bgm.loop = 1 - параметр =1говорит,что после конца песни она начнет играть снова, при = 0 этого не будет

Теперь у нас есть музыка в скринпаке!

Главное меню

так, сейчас мы будем описывать главное меню и его примочки.
Перед описанием меню должен идти такой заголовок - [Title Info]
Поехали разбирать, что к чему:

fadein.time = 10 - скорость, с которой картинка плавно появится на экране, чем значение меньше, тем быстрей появится картинка
fadeout.time = 10 - - скорость, с которой картинка плавно исчезает с экрана, чем значение меньше, тем быстрей исчезнет картинка
menu.pos = 159,158 - позиция на экране самого меню (тобишь окно для выбора режима)
menu.item.font = 2,0,0 - шрифт букв в меню. Первая цифра 2 говорит о том, что он будет использовать Font2, который мы подключали во 2-ом шаге. Цифра 0 обозночает цветовую гамму шрифта, третью цифру лучше не менять.
menu.item.active.font = 2,5,0 - шрифт выделенного меню или режима. Он отличается только цветом, так как вторая цифра у нас 5
menu.item.spacing = 0, 13 - Расстояние между надписями в меню

menu.itemname.arcade = "ARCADE" - надпись в меню для режима аркады. Если вы не хотите данный режим, то вместо букв просто напишите = ""
menu.itemname.versus = "VS MODE" - надпись в меню для режима поединка. Убирание идентично предыдущему.
menu.itemname.teamarcade = "TEAM ARCADE" - надпись в меню для режима командной аркады. Убирание идентично предыдущему.
menu.itemname.teamversus = "TEAM VS" - надпись в меню для режима командного поединка. Убирание идентично предыдущему.
menu.itemname.teamcoop = "TEAM CO-OP" - надпись в меню для режима командного сотрудничества. Убирание идентично предыдущему.
menu.itemname.survival = "SURVIVAL" - надпись в меню для режима выживания. Убирание идентично предыдущему.
menu.itemname.survivalcoop = "SURVIVAL CO-OP" - надпись в меню для режима командного выживания. Убирание идентично предыдущему.
menu.itemname.training = "TRAINING" - надпись в меню для режима тренировки. Убирание идентично предыдущему.
menu.itemname.watch = "WATCH" - надпись в меню для режима наблюдения. Убирание идентично предыдущему.
menu.itemname.options = "OPTIONS" - надпись в меню для режима опций. Убирание идентично предыдущему.
menu.itemname.exit = "EXIT" - надпись в меню для выхода. Убирание идентично предыдущему.

menu.window.margins.y = 12, 8 - размер окна для надписей меню.
menu.window.visibleitems = 5 - сколько надписей видно одновременно.
menu.boxcursor.visible = 1 - 1 - видимость стандартного курсора меню, 0 - станет невидимым.
menu.boxcursor.coords = -58,-10,57,2 - координаты на экране стандартного курсора.

cursor.move.snd = 100,0 - звук перемещения курсора (берется из подключенного файла музыки в шаге 2). Первое значение 100 обозначает группу звука, второе - его номер в группе.
cursor.done.snd = 100,1 - звук выбора. Берется оттуда же
cancel.snd = 100,2 - звук отмены, тоже находится в подключенном файле.

Вот мы и настроили меню. В следующем шаге я опишу установку графики на главном меню.

Графика в главном меню

Следующим шагом нам надо сделать графику для нашего меню, так как просто черный экран и буквы нас не устраивают. . Следующим заголовком должно идти [TitleBGdef]. Тут один параметр:
bgclearcolor = 0,0,0 - это стандартный цвет фона. Как вы поняли три цифры - это красный, синий и зеленый.

Так, фон у нас есть. Что же дальше? Дальше нам надо повставлять картинки. Для этого мы в Fighter Factory откроем вкладку sprites, как на скрине

Затем там мы жмем на кнопку "открыть"(на скрине) и выбираем .sff файл, который мы подключили во 2-ом шаге.

Итак, файл открыт, и нам надо вставить туда нужные нам картинки, которые мы хотим увидеть в скринпаке. Для этого мы жмем на кнопку "добавить" (на скрине), устанавливаем нужную вам группу, и добавляем.

Обратите внимание, все картинки должны быть в формате .pcx и в палитре 256 цветов(для этого и требуется Photoshop или PhotoImpact). Добавили? Теперь мы переходим к коду и следущим заголовком надо написать [TitleBG 0]
Теперь давайте разберемся в структуре добавления изображения на экран:

type = normal - определяет тип изображения: Normal - нормальное, Parralax - паралельное и Anim - анимация
spriteno = 5, 1 - группа и номер спрайта/картинки из подключенного файла (только для Normal & Parralax)
start = 0, 145 - Начальные координаты рисунка
width = 400, 1200 - чесслово, хр*н знает, нафига оно нужно, скока юзал, никаких от него эффектов
tile = 1,1 - дублирование изображения: первая 1 -по горизонтали, вторая 1 - по вертикали
tilespacing = 350,0 - расстояние между дублированными изображениями, опять же сначала по оси X, затем Y.
velocity = -1,1 - скорость перемещения по экрану. Первое значение - по оси Х, второе - по оси Y.
ActionNo = 2000 - указание на код анимации (только для Anim).
trans = sub - Тип прозрачности: Sub - инверсия цветов, с прозрачностью; Add - Просто прозрачность; None - нету.
Mask = 1 - отключает задний фон картинки.

Вот мы и вставили картинку, она может "плавать" по экрану, быть прозрачной. В следующем шагу настройка Anim типа изображений.

Анимация

Здесь я опишу как работает анимация в скринпаках. Для этого вам сначала нужно создать [Title BG] с параметром type = anim и actionno = **** для перехода к самой анимации. Когда вы напишите все остальные нужные вам параметры, с новой строки вы должны начать код анимации:
[Begin Action ****] - вместо звезд ставьте то значение, которое вы указали в параметре Actionno = ****.
В принципе код анимации прост. Сейчас я опишу его строение:
410,0,0,0, 2 - это и есть описание одного кадра анимации. Давайте разберемся в нем:
410 - номер группы изображений в подключенном файле спрайтов.
0 - номер изображения 0 в группе 410.
0 - смещение по горизонтали от начальных координат.
0 - смещение по вертикали от начальных координат.
2 - время пребывания кадра на экране.
Вот и все. Если вы хотите еще один кадр в анимации, просто напишите подобный код в следующей строке. Шаг анимация пройден!

Выбор персонажей

Вот мы и подошли к окну выбора персонажей. Сдесь все идет также по аналогии: сначала опись скриптов, затем графика. Со скриптов и начнем. Заголовок должен быть [Select Info]. После него идет описание выбора персонажей:
fadein.time = 10 - скорость, с которой картинка плавно появится на экране, чем значение меньше, тем быстрей появится картинка
fadeout.time = 10 - скорость, с которой картинка плавно исчезает с экрана, чем значение меньше, тем быстрей исчезнет картинка
rows = 5 - количество строк ячеек для перснонажей
columns = 5 - количество столбцов ячеек для персонажей
wrapping = 0 - при 1 позволяет курсору крутится вокруг ячейки
pos = 68,63 - самая верхняя левая точка свей таблицы ячеек, то-есть координаты ее расположения.
showEmptyBoxes = 0 - при 1 показывает пустые ячейки персонажей, при 0 нет.
moveOverEmptyBoxes = 0 - при 1 позволяет водить курсором по пустым ячейкам, при 0 нет.
cell.size = 33,32 - размер каждой ячейки.
cell.spacing = 14,6 - расстояние между каждой ячейкой: по горизонтали, по вертикали соответственно.
cell.bg.spr = 412,1 - группа и номер спрайта для ячейки.
cell.random.spr = 412,0 - группа и номер спрайта для ячейки случайного выбора.
cell.random.switchtime = 3 - время смены рандомного персонажа на следующего.
p1.cursor.startcell = 0,0 - номер строки и ряда первоначального положения курсора 1-го игрока.
p1.cursor.active.**** = 410 - Номер анимки или спрайта для курсора 1-го игрока. Хотите анимацию, тогда вместо **** пишите anim, спрайт - spr, причем, если вы выбрали аним, то это значение раносильно Actionno в устаноке картинок.
p1.cursor.done.anim = 420 - анимация выбора перса 1-ым игроком, или спрайт, как и выше (только если вы вставляете спрайт, не забудьте через запятую дописать номер изображения в группе).
p1.cursor.move.snd = 100,0 - звук перемещения курсора 1-го игрока.
p1.cursor.done.snd = 100,1 - звук выбора перса 1-ым игроком
p1.random.move.snd = 100,0 - звук перебора персов ячейкой случайного выбора.
p2.cursor.startcell = 0,4 - дальше все аналогично, но для второго игрока.
p2.cursor.active.anim = 410
p2.cursor.done.anim = 420
p2.cursor.blink = 1 - моргание курсора 2-го игрока, когда оба курсора стоят на одной ячейке.
p2.cursor.move.snd = 100,0
p2.cursor.done.snd = 100,1
p2.random.move.snd = 100,0
random.move.snd.cancel = 1 - звук отмены ячейки случайного выбора.
stage.move.snd = 100,0 - звук перемещения на другую карту.
stage.done.snd = 100,1 - звук выбора карты.
cancel.snd = 100,2 - звук отмены.
portrait.offset = 0,0 - расположение портретов.
ortrait.scale = 1,1 - масштабирование портрета.
title.offset = 160,38 - Расположение заголовка, Аркада, например.
title.font = 4,0,0 - Шрифт для заголовка.

p1.face.offset = 1,1 - позиция для большого портрета 1-го игрока.
p1.face.scale = 1,1 - масштабирование этого портрета.
p1.face.facing = 0 - инверсия портрета, то есть, если =1, то картинка будет повернута в другую сторону.
p2.face.offset = 1,1 - позиция для большого портрета 2-го игрока. Дальше идет аналогично тому, что выше, только для 2-го игрока.
p2.face.scale = 1,1
p2.face.facing = 0

p1.name.offset = 60,235 - позиция для надписи имени перса, выбранного 1-ым игроком.
p1.name.font = 4,0,0 - шрифт этой надписи, если хотите,чтобы ее не было, просто введите = -1.
p2.name.offset = 260,235 - тоже самое, но для 2-го игрока.
p2.name.font = 4,0,0

stage.pos = 175,190 - положение надписи выранной карты.
stage.active.font = 4,1,0 - первый шрифт стэйджа.
stage.active2.font = 4,2,0 - вотрой шрифт стэйджа. Здесь, как видите, используется один и тот же шрифт, но разным цветом, и это создает эффект мигания.
stage.done.font = 4,2 - цвет шрифта надписи, когда вы выбрали арену.

teammenu.move.wrapping = 0 - вращение при перемещении командного меню.
p1.teammenu.pos = 29, 189 - положение командного меню для 1-го игрока. Я надеюсь, что вы знаете, что такое командное меню. Если нет, то это можно узнать даже в Naruto Battle Arena 2, когда вы выбираете командный режим. Там вы видите надписи Single,Team, и тд, и можете выбирать: 1-му быть, в паре, или играть 4-мя по очереди. Это и есть командное меню.
p1.teammenu.bg.spr =****,****/b] - фоновый спрайт для командного меню, или анимация, если вы вместо spr напишите anim.
p1.teammenu.selftitle.font = 4,0, 0 - шрифт заголовка для своего меню.
p1.teammenu.selftitle.text ="****" - сам текст заголовка.
p1.teammenu.enemytitle.font = 4,0, 0 - шрифт заголовка меню противника.
p1.teammenu.enemytitle.text ="****" - текст этого заголовка.
p1.teammenu.move.snd = 100,0 - звук перемещения в курсора в командном меню.
p1.teammenu.value.snd = 100,0 - звук при изменении количества игроков в твоем командном меню.
p1.teammenu.done.snd = 100,1 - звук выбора в командном меню.
p1.teammenu.item.offset = 0,20 - расположение командного меню
p1.teammenu.item.spacing = 0,10 - расстояние между обьектами в командном меню.
p1.teammenu.item.font = 4,0, 0 - шрифт надписей в командном меню.
p1.teammenu.item.active.font = 4,1, 0 - активный шрифт надписи в меню.
p1.teammenu.item.active2.font = 4,2, 0 - 2 активный шрифт, для мерцания.
p1.teammenu.value.icon.offset = 22,-9 - расположение иконок в командном меню (в стандартном мугене это формы человечков).
p1.teammenu.value.icon.spr = 181,0 - спрайт этих иконок
p1.teammenu.value.empty.icon.offset = 22,-9 - спрайт пустых иконок, то есть, когда их не выбирают.
p1.teammenu.value.empty.icon.spr = 182,0 - распложение пустых иконок, то есть можно делать так, что при включении этой иконки в общий список, она будет менять свое положение.
p1.teammenu.value.spacing = 6,0 - расстояние между иконками.

p2.teammenu.pos = 290, 210 - аналогично тому что выше, но для командного меню второго игрока.
p2.teammenu.bg.spr = ****,****
p2.teammenu.selftitle.font = 4,0, 0
p2.teammenu.selftitle.text = "****"
p2.teammenu.enemytitle.font = 4,0, 0
p2.teammenu.enemytitle.text = "****"
p2.teammenu.move.snd = 100,0
p2.teammenu.value.snd = 100,0
p2.teammenu.done.snd = 100,1
;p2.teammenu.item.offset = 0,20
p2.teammenu.item.spacing = 0,10
p2.teammenu.item.font = 4,0, 0
p2.teammenu.item.active.font = 4,1,0
p2.teammenu.item.active2.font = 4,2,0
p2.teammenu.value.icon.offset = -30,-10
p2.teammenu.value.icon.spr = 191,0
p2.teammenu.value.empty.icon.offset = -30,-10
p2.teammenu.value.empty.icon.spr = 192,0
p2.teammenu.value.spacing = -6,0

Когда вы все это написали, идет подключение рисунков,анимаций и тд и тп. Это дело происходит аналогично подлючению всего вышеперечисленного в главном меню, только заголовки должны быть [TitleBG **] - всемто звезд пишите номер,начиная с 0,затем 1,2, и так далее.

Versus-Экран

Вот мы и подошли к написанию Versus Screen. Это по сути то окно где показывают перед раундом кто против кого сражается. Как и все предыдущие пункты давайте разберемся в коде этого окна:
[VS Screen] - этот заголовок служит определителем для МУГЕНА что здесь описываются параметры ВС окна.
time = 150 - этот параметр задает продолжительность нахождения ВС окна на экране.
fadein.time = 15 - этот параметр отвечает за скорость появления этого окна из черного фона.
fadeout.time = 15 - обратный параметр предыдущему. Задает скорость исчезновения окна.
p1.pos = 20,31 - отвечает за положение портрета первого персонажа из его файла спрайтов 9000,1 на координатах Х,У в данном окне.
p1.facing = 1 - устанавливает отражение портрета 1-го игрока. Тоесть если будет 1 - то портрет будет направлен в ту сторону в которую он смотрел изначально, а если -1 то в противоположную.
p1.scale = 1,1 - масштаб портрета 1-го игрока по осям Х и У. Если хотите чтоб портрет был больше оригинальных размеров увеличьте эти числа, меньше - уменьшите.
p2.pos = 299,31 - отвечает за положение портрета второго персонажа из его файла спрайтов 9000,1 на координатах Х,У в данном окне.
p2.facing = -1 - отражение портрета 2-го персонажа. Как видите у меня он -1, значит если персонаж будет один и тот же, то портреты в ВС окне будут смотреть друг на друга
p2.scale = 1,1 - масштаб портрета 1-го игрока по осям Х и У. Если хотите чтоб портрет был больше оригинальных размеров увеличьте эти числа, меньше - уменьшите.
p1.name.pos = 78,190 - позиция Надписи имени 1-го персонажа. Если вы пишите имя шрифтом игры, а не врисовываете его в портрет как это делаю я в своей игре, тогда вам нужно настраивать этот параметр.
p1.name.font = 3,0,0 - шрифт который будет использоваться для написания имени 1-го игрока.
p2.name.pos = 241,190 - позиция Надписи имени 2-го персонажа. Если вы пишите имя шрифтом игры, а не врисовываете его в портрет как это делаю я в своей игре, тогда вам нужно настраивать этот параметр.
p2.name.font = 3,0,0 - шрифт который будет использоваться для написания имени 2-го игрока.

Когда вы все это написали, идет подключение рисунков,анимаций и тд и тп. Это дело происходит аналогично подлючению всего вышеперечисленного в главном меню, только заголовки должны быть [VersusBG **] - всемто звезд пишите номер,начиная с 0,затем 1,2, и так далее.

Вот мы и настроили Versus экран!!!

ВНИМАНИЕ!!!-Я не знаю автора данного тутора!Все что написано в туторе ведеться от лица автора тутора!!!

0

7

Standing Animation (0) - Анимация стойки

Turning (5)- Анимация разворота, когда враг перепрыгнул вас например и вы разворачиваетесь.

Crouch Turning (6) – Аналог выше но тут когда мы сидим

Stand to crouch (10)- Анимация приседания.

Crouching animation (11) - Анимация сидя.

Crouch to Stand (12) – Анимация персонажа когда он встаёт.

Walking Forward (20) – Анимация ходьбы вперёд

Walking Back (21) – Анимация ходьбы назад

Jump start frame (40) – Такой момент когда персонаж отталкивается, момент перед прыжком.

Starting Jumping up (41)– Прыжок вверх

Starting Jumping forwards (42)– Прыжок вперёд

Starting Jumping backwards (43) – Прыжок назад

Peak and coming down from Jumping up (44) – Падения вниз после прыжка вверх

Peak and coming down from Jumping forwards (45) – Падение вниз после прыжка вперёд (падает вперёд и вниз скажем так)

Peak and coming down from Jumping backwards (46) – Аналог того чего выше только назад

Jump land frame (47)– Такой момент когда чар приземляется, ну, например согнул ноги.

Run forwards (100)– Бег вперёд

Hop backwards (105)– Отскок назад

GUARDSTART (stand) (120)– Начало зашиты в стойке

GUARDSTART (crouch) (121)– Аналог выше только сидя

GUARDSTART (air) (122) – Аналог выше только в прыжке

GUARD (stand) (130) – Анимация уже защиты стоя

GUARD (crouch) (131) – Аналог выше только сидя

GUARD (air) (132)– Аналог выше только в прыжке

GUARDEND (stand) (140) – Конец зашиты стоя

GUARDEND (crouch) (141) – Аналог выше только сидя

GUARDEND (air) (142) – Аналог выше только в прыжке

Hit back while guarding (stand) (150) – Анимация зашиты при блокирование урона который двигает нашего персонажа назад стоя

Hit back while guarding (crouch) (151) – Аналог выше только сидя

Hit back while guarding (air) (152)– Аналог выше только в прыжке

Lose (170) – Анимация проигрыша

Win (180)– Анимация выигрыша

INTRO (190) – Вступительная анимация

Taunt (195)– Не знаю, я всегда удаляю. Думаю по переводу это насмехается - дразнить противника

Дальше трудней по этому Stand -стойка Air - прыжок Crouch – сидя

Light – легкий medium – средний hard - тяжёлый

[color=red]Stand/Air Hit high (light) (5000) – Урон высокий

Stand/Air Hit high (medium) (5001) – Урон высокий

Stand/Air Hit high (hard) (5002) – Урон высокий

Stand Recover high (light) (5005) – Восстановление после высокого урона

Stand Recover high (medium) (5006)– Восстановление после высокого урона

Stand Recover high (hard) (5007) – Восстановление после высокого урона

Stand/Air Hit low (light) (5010) – Урон малый

Stand/Air Hit low (medium) (5011) – Урон малый

Stand/Air Hit low (hard) (5012) – Урон малый

Stand Recover low (light) (5015) – Восстановление после малого урона

Stand Recover low (medium) (5016) – Восстановление после малого урона

Stand Recover low (hard) (5017) – Восстановление после малого урона

Crouch Hit (light) (5020) – Урон сидя

Crouch Hit (medium) (5021)– Урон

Crouch Hit (hard) (5022)– Урон

Crouch Recover (light) (5025) – Восстановление после урона

Crouch Recover (medium) (5026) – Восстановление после урона

Crouch Recover (hard) (5027)– Восстановление после урона

Stand/Air Hit back (5030)– 3-закон Ньютона)) Сила действующая на тело = силе противоположный…. Дать сдачи короче)

Stand/Air Hit transition (5035)– Переход в уорн

Air Recover (5040)– Востановление

Air Fall (5050)– Падаем

Air Fall (coming down) (5060)– Падаем вниз

Tripped (5070) – Выключить

LieDown Hit (stay down) (5080) – Упасть от урона

LieDown Hit (hit up into air) (5090) – Упасть в воздухе

Hitting ground from fall (5100)– Момент приземления когда соприкасаемся с землей

Bounce into air (5160) – отскакивать в воздухе

Hit ground from bounce (5170)– Отскок от земли когда упали

LieDown (5110) – Анимация персонажа в лежачем положении

Get up from LieDown (5120) – Встать из лежачего положения

LieDead (first rounds) (5140) – Анимация мёртвого 1 раунд

LieDead (final round) (5150)– Анимация мёртвого финальный раунд

Fall-recovery near ground (5200) – Когда падаем восстанавливаемся в воздухе у земли

Fall-recovery in mid-air (5210) – Когда падаем восстанавливаемся в воздухе

Dizzy (5300)– Шок, звёздочки над головой, стан!

ДАЛЬШЕ ИДУТ ДОПОЛНИТЕЛЬНЫЕ!

[color=red]"Continue?" screen (5500) – Анимация при скрине Продолжить?

"Yes" to "Continue" (5510) – Ответ ДА

"No" to "Continue" (5520)– Ответ Нет

Air fall -- hit up (5051)– Падение в воздухе получение урона

Coming down from hit up (5061) – Спустился вниз ударили сверху

LieDown Hit (stay down) (5081) – Упасть от урона

Bounce from ground into air (5101)– Отскакивать от земли в воздухе (возможно от стенок)

Bounce into air (5161)– отскакивать в воздухе

Hit ground from bounce (171) – Отскок от земли когда упали

LieDown (5111) – Анимация персонажа в лежачем положении

Get up from LieDown (5121) – Встать из лежачего положения

LieDead (first rounds) (5151) – Анимация мёртвого 1 раунд

LieDead (final round) (5156) – Анимация мёртвого финальный раунд

Air fall -- hit up (5052) – Падение в воздухе получение урона

Coming down from hit up (562) – Спустился вниз ударили сверху

LieDown Hit (stay down) (582)– Упасть от урона

Bounce from ground into air (5102)– Отскакивать от земли в воздухе (возможно от стенок)

Bounce into air (5162) – отскакивать в воздухе

Hit ground from bounce (5172)– Отскок от земли когда упали

LieDown (5112) – Упасть от урона

Get up from LieDown (5122)– Встать из лежачего положения

LieDead (first rounds) (5152) – Анимация мёртвого 1 раунд

LieDead (final round) (5157)– Анимация мёртвого финальный раунд

P.S-АВТОРА Я НЕ ЗНАЮ!

0

8

Тутор описывает как провести спрайты через палитру.
Будем исходить из того, что у вас уже существует настроенная палитра.
http://eternalozarchiv.3dn.ru/_ld/1/112_mhU.png
http://eternalozarchiv.3dn.ru/_ld/1/113_8J6.png
http://eternalozarchiv.3dn.ru/_ld/1/114_ASP.png

Автор: Sasuke94

0

9

Работа с .cns и .cmd!

Сns

Справа колонка со скроллером, это все стейты, которые существуют для МУГЕН!
http://eternalozarchiv.3dn.ru/_ld/1/111_f714b0115fed.jpg

При нажатии на жёлтую линейку, в левом меню открывается такое окно, где вы можете узнавать позиции спрайтов в игре, например кК поставить Наруто на жабу. Для начала ищем спрайт. Слева спрайт который будет стоять, а справа который мы будем двигать, чтобы узнать его позицию.

Begin Action (no) – номер анимации
Frames – кадр анимации

После того, как мы поставили Наруто как надо, запоминаем или записываем X и Y, а потом вписываем его в Helper или Explod (Что это такое читайте дальше).

---------------------------------------------
Описываю только самое важное, сразу говорю!

Начнём с начала cns
P.S. – две цифры через запятую, эт значит икс и игрик!

[Data]
life = 1000 – жизни персонажа
power = 3000 - чакра или энергия персонажа
attack = 100 – сила атаки персонажа
defence = 100 защита персонажа
fall.defence_up = 50
liedown.time = 60
airjuggle = 15
sparkno = 2
guard.sparkno = 40
KO.echo = 0
volume = 0
IntPersistIndex = 60
FloatPersistIndex = 40

[Size]
xscale = 1 - размер персонажа по иксу (слева направо)
yscale = 1 - размер персонажа по игрику (сверху вниз)
ground.back = 15
ground.front = 16
air.back = 12
air.front = 12
height = 60
attack.dist = 160
proj.attack.dist = 90
proj.doscale = 0
head.pos = -5, -90
mid.pos = -5, -60
shadowoffset = 1
draw.offset = 0,0

---------------------------------------------
[Velocity]
walk.fwd = 2.4 – скорость ходьбы вперёд персонажа
walk.back = -2.2 - скорость ходьбы назад персонажа
run.fwd = 6.2, 0 - скорость бега вперёд персонажа
run.back = -7, -4.6 – скорость бега назад персонажа
jump.neu = 0,-9 - дальность прыжка вверх персонажа
jump.back = -3 – дальность прыжка назад персонажа
jump.fwd = 3 – дальность прыжка вперёд персонажа
runjump.back = -6.55,-7.5 – дальность прыжка с разбега назад персонажа
runjump.fwd = 6,-7.5 - дальность прыжка вперёд с разбега персонажа
airjump.neu = 0,-9 - дальность прыжка в воздухе вверх персонажа
airjump.back = -3 - дальность прыжка в воздухе назад персонажа
airjump.fwd = 3 – дальность прыжка в воздухе вперёд персонажа

[Movement]
airjump.num = 1 – количетсво прыжков в воздухе
airjump.height = 35 – минимальное расстояние от земли для совершения прыжка в воздухе
yaccel = .44 – сила притяжения
stand.friction = .85
crouch.friction = .82

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

Возьмём для примера атаку:

[StateDef 200] – номер стейта (любой тока чтобы не повторялся)
type = S – расположение вроде, кароч если атака в воздухе то везде в type, movetype и в physics стоит A, а так S
movetype= A – а это вроде а значит что атака, тама есть ещё H, но я не знаю шо це таке!
physics = S
juggle = 1
velset = 6,0 – толчок вначале атаки, точнее движение (ну опять же первая цифра X, а вторая Y)
ctrl = 0 – такая штука, если она стоит 1 тогда ты можешь двинуться во время удара и выйти из него, а если 0 то не можешь
anim = 200 – номер анимации
poweradd = 30 – сколько отнимится или прибавится энергии или чакры
sprpriority = 2 – приоритет спрайтов, допустим у меня 2 а у врага 3, то тада например рука врага перекроет моего перса

---------------------------------------------
[State 200, PlaySnd] – это звук
type = PlaySnd
trigger1 = AnimElem = 2 – номер кадра в анимации
value = S200,1 – номер звука, S обязательна перед номером звука
volume = 1000 - громкость

[State 200, PlaySnd]
type = PlaySnd
trigger1 = AnimElem = 2
value = S1177, 10

[State 200, 1] - атака
type = HitDef
trigger1 = animelem = 3
attr = S, NA
damage = 25 – сколько потратит удар врагу
animtype = Light – воспримчивоть врага от удара, Light – как от лёгкого, Medium – средний, Hard - тяжёлый
guardflag = MA
hitflag = MAF
priority = 3, Hit
pausetime = 0, 0 – пауза, первая цифра значит, что после одного попадания ты тормознёшься на такое-то время, а вторая касается врага, а точнее его оглушение на определённое время
sparkno = s14 – номер эффекта при попадании
sparkxy = -20, -26 – расположение эффекта
hitsound = S200, 0 – звук при попадании
guardsound = 6, 0 – звук при защите от удара
ground.type = High
ground.slidetime = 5
ground.hittime = 12
ground.velocity = 10,-.8 – отлетание врага, если он стоит на земле при получении урона
airguard.velocity = -1.9,-.8 – отлетание врага, если он в воздухе при защите
air.type = High
air.velocity = -1.4,-3 отлетание врага, если он в воздухе при получении урона
air.hittime = 12

[State 200, end] – конец стейта
type = ChangeState
trigger1 = AnimTime = 0 – не закончится пока анимация вся не проиграет
value = 0 – когда закончится перейдёт в этот стейт, в данном случае стойка
ctrl = 1 – может двигаться после перехода

Дополнительные сведения

[State 0, Helper] – вызов стейта
type = Helper
trigger1 = animelem = 4
helpertype = normal ;player – если normal, тогда обыный стейт, а если player, то за ним будет следовать камера, будет как игрок, ведь так и переводиться - игрок
ID = 1023 – номер, не обязателен
stateno = 1023 – номер стейта, который будет вызываться
pos = 3,56 – позиция его
postype = p1 – где будет появляться, p1 – возле тебя, p2 – возле врага, left – слева экрана, right – справа экрана
facing = 1 – если равен одному то стейт всегда будет повёрнут передом к врагу, если назад то обратное
supermovetime = 150 – время, которое оно будет воспроизводиться в супер паузе
sprpriority = 6

[State 0, Explod] – вызов эффекта
type = Explod
trigger1 = animelem = 3
anim = 95 – анимация эффекта
ID = 95
pos = 0,0
postype = p1 ;p2,front,back,left,right
sprpriority = 6
supermovetime = 100

[State 0, SuperPause] – супер пауза
type = SuperPause
trigger1 = AnimElem = 1 – начинается с кадра первого
time = 150 – сколько времени она будет
anim = s31 – эффект при её появлении
sound = -1 – звук при её появлении
pos = 4,-24 – позиция эффекта
movetime = 150 – сколько будешь двигаться ты во время супер паузы
darken = 1 – затемнение экрана, если 1 – то будет, если 0 – не будет

---------------------------------------------
[State 0, EnvShake] - тряска
type = EnvShake
trigger1 = time = 0
time = 58 – сколько она будет длиться времени
freq = 60
ampl = -5 – чем больше будет эта цифра тем болье будет трясти, например при -25, будет конкретно трясти
phase = 90

Основные Триггеры
Trigger1 = time = 10 – когда будет время в анимации 10 то он подействует
Trigger1 = time >= 10 – будет действовать когда время в анимации будет больше либо равно десяти
Trigger1 = time = [0,30] – будет действовать в промежутке времени – от 0 до 30
Trigger1 = AnimElem = 3 – будет действовать на 3 кадре анимации
Trigger1 = movecontact – будет действовать при прикосновении к врагу
Trigger1 = movehit – будет действовать при попадании во врага, только не в блок

Сmd

Здесь оч мало расскажу, так как всё из cns берётся за основу!
Пример атаки

[State -1, Stand Attack 1]
type = ChangeState
value = 210 – номер стейта
triggerall = command = "a" - команда

---------------------------------------------
trigger1 = statetype = S – их три, если атака с приседанием например вниз б – тогда С, если просто а или б – тогда S, а если в воздухе – тогда A
trigger1 = ctrl
trigger2 = stateno = 200 – будет выполняться только после стейта 200
trigger2 = movecontact – и при условии прикосновении к врагу

это вверху цмдешника

[Command]
name = "dfa" – название комманды
command = D, F, a – сама команда
time = 10

[Command]
name = "holdx" – все холды это команды, которые надо зажимать
command = /$x
time = 1

Command:
D - вниз
F – на него
B – от него
U – если такая есть, то вверх
a,b,c,x,y,z,s – так и есть а б ц…

Кто не знает s – старт или интер!

Автора я не знаю

0

10

CLSN2 :Область столкновения (Синяя) / CLSN2-Бокс / Колижен-бокс
CLSN1 : Область удара (Красная)
ПОМНИТЕ ОБ ЭТОМ!!!:

[*]Если персонаж - из какой-либо уже существующей игры (King of Fighters, Akatsuki Blitzkampf, т.д.) и есть программа просмотра CLSN-Областей, то берите области столкновения напрямую из игры, что будет намного проще чем делать все самому.
[*]Основное правило во всех файтингах: 2 CLSN2-области на каждую анимацию (максимум 4 если спрайт очень большой)
[*]Основное правило во всех файтингах: 1 CLSN1 область на каждую атаку (максимум 2, можно увеличить и то 4х, если атака - метательное оружие, брошенное под углом)
[*]Располагайте области немного шире чем тело персонажа, но дальше рук выходить он не должен
[*]Всегда используйте одну и ту же область столкновения для анимации стойки, т.е. она не должна меняться по во время анимации (Если это конечно не редкий персонаж, который имеет сложную стойку)
[*]Используйте CLSN Default для областей столкновений и ударов, который не меняются в течении анимаций (например для стойки)
[*]Не делайте лишних движений CLSN2 -Боксов просто для небольшого движения головы или конечности

Пример хорошей "разметки" для стойки:
http://kod.trinitymugen.net/clsntut/1.png
Пример плохой разметки стойки (слишком много лишних деталей, которые не принесут никакого изменения в геймплее и только заставлять тормозить медленные компьютеры):
http://kod.trinitymugen.net/clsntut/2.png
Движения уклонения от атак снизу или сверху обычно не имеют никаких особых свойств в коде для них, вместо этого CLSN2-боксы расположены так, что удар оппонента не попадет по персонажу
В этом движении Кьё приседает перед атакой противника (то есть высокие атаки и атаки с воздуха, скорее всего, промахнуться):
http://kod.trinitymugen.net/clsntut/8.png
В этом движении Кьё подпрыгивает перед атакой (нижние удары не попадут)
http://kod.trinitymugen.net/clsntut/9.png
Далее я не знаю, как точно перевести это текст, так что оставлю под спойлером английский вариант:

О БЕСКОНЕЧНОМ ПРИОРИТЕТЕ

Moving onto CLSN1 boxes, there is a thing known as "infinite priority" which is caused by not overlapping a CLSN1 box with a CLSN2 box which in turn makes the attacker "cheap" by allowing him to attack without getting hit back.
Remember that Infinite Priority is NOT applicable to some fighting games which have clever CLSN positioning to further enhance the "realism" of the gameplay (KoF, Fatal Fury, Melty Blood, etc.) so do not apply the infinite priority rule to games which do not follow it as they are meant for their own gameplay style.

Мечи и другое оружие не должно иметь поверх CLSN1-боксов CLSN2-боксы, CLSN1-боксы должны быть в области меча/руки/т.д. и не занимать особо много места (тем не менее, удары мечем можно сделать пошире чтобы придать точности ударами мечем)
Пример хорошей разметки атаки:
http://kod.trinitymugen.net/clsntut/3.png
Пример хорошей разметки атаки в прыжке:
http://kod.trinitymugen.net/clsntut/4.png
Пример плохой разметки атаки (имеют бесконечный приоритет, нереалистичные и медленно работающие (слишком детально) )
http://kod.trinitymugen.net/clsntut/5.png
Пример плохой разметки атаки в прыжке (имеет бесконечные приоритет, нереалистичная и медленно работающая)
http://kod.trinitymugen.net/clsntut/6.png
Те же правила применимы для снарядов

Снаряды должны имеет CLSN2-боксы поверх CLSN1-боксов чтобы сталкиваться с другими снарядами/блокироваться другими снарядами, в зависимости от того какой тип снаряда вы хотите закодировать.
http://kod.trinitymugen.net/clsntut/7.png
Автор:GamerXP
Ссылка на оригинал: http://sprites.3dn.ru/forum/22-69-1

0

11

Сегодня, я хочу поделиться с вами своим старым кодом и ареной. В этом уроке, я вам расскажу как сделать, чтобы на вашей арене The Bridge ездили автомобили и сбивали игроков. Автомобили ездиют с разной скоростью, зависимо от модели автомобиля, тоесть, чем лучше автомобиль, тем он быстрее, а чем быстрее, тем сильнее его удар. Вот пример видео (в нём демонстрируется только один автомобиль):

Видео

Категория сложности: средне
M.U.G.E.N.: от версии RC8
Автор урока: Ruslan_xDD
Ссылка на оригинл: http://mkheroes.ru/forum/70-506-1
Версия: 1.0

И так, начнём:
Шаг 1
Скачайте Этот fightfx.sff и аккуратно переставьте все спрайты к себе в fightx.sff, переставляя все номера спрайтов и их коррдинаты.

скриншот

http://mkheroes.ru/Sections/Mugen_Tutorital/Lessons/Screenshots/Screenshot_1.png

Шаг 2
Теперь качаем эти звуки и вставляем их к себе в Common.snd, переставляя все номера звуков (внимание, номера звуков указаны в самом названии звука).
Шаг 3
Открываем у себя в папе Data фаил Fightfx.air через блокнот или другой текстовый редактор и в самый низ вставляем следующий код:

Код:
;The Bridge Car1   
[Begin Action 98520]   
9851,0, 0,0, -1   

;The Bridge Car2   
[Begin Action 98521]   
9851,1, 0,0, -1   

;The Bridge Car3   
[Begin Action 98522]   
9851,2, 0,0, -1   

;The Bridge Car4   
[Begin Action 98523]   
9851,3, 0,0, -1   

;The Bridge Car5   
[Begin Action 98524]   
9851,4, 0,0, -1   

;The Bridge Car6   
[Begin Action 98525]   
9851,5, 0,0, -1   

;The Bridge Car7   
[Begin Action 98526]   
9851,6, 0,0, -1   

;The Bridge Car8   
[Begin Action 98527]   
9851,7, 0,0, -1   

;The Bridge Car8 (facing -1)   
[Begin Action 98528]   
9851,8, 0,0, -1   

;The Bridge Car1 Wheel   
[Begin Action 98530]   
9851,10, 0,0, 3   

;The Bridge Car2 Wheel   
[Begin Action 98531]   
9851,11, 0,0, 3   

;The Bridge Car3 Wheel   
[Begin Action 98532]   
9851,12, 0,0, 3   

;The Bridge Car4 Wheel   
[Begin Action 98533]   
9851,13, 0,0, 3   

;The Bridge Car5 Wheel   
[Begin Action 98534]   
9851,14, 0,0, 3   

;The Bridge Car6 Wheel   
[Begin Action 98535]   
9851,15, 0,0, 3   

;The Bridge Car7 Wheel   
[Begin Action 98536]   
9851,16, 0,0, 3   

;The Bridge Car8 Wheel   
[Begin Action 98537]   
9851,17, 0,0, 3   

;The Bridge Car8 Wheel (facing -1)   
[Begin Action 98538]   
9851,18, 0,0, 3

Шаг 4
Теперь нам нужно вставить основной код. Открываем в папке Data фаил Common1.cns и в самый низ вставляем приведённый ниже код:

Код:
;____________________________________________________________   
;The Bridge Cars   
;____________________________________________________________   
[Statedef 27410]   
anim  = 888   

[State 27410]   
type = VarSet   
trigger1 = time = 0   
v = 27   
value = 0   

[State 27410]   
type = RemoveExplod   
trigger1 = time = 0   
id = 27411   

[State 27410, End]   
type = destroyself   
triggerall = FrontEdgeDist < -200   
trigger1 = p2stateno = 9010 || parent, stateno = 9010   
trigger2 = life <= 0 || p2life <= 0   
trigger3 = (p2stateno = [180,181]) || (parent, stateno = [180,181])   
trigger4 = NumHelper(63000) = 1   
trigger5 = (p2stateno = [45000,45029]) || (parent, stateno = [45000,45029])   

[State 27410, Change]   
type = ChangeState   
trigger1 = Time = 1000   
value = 27411   
;____________________________________________________________   
[Statedef 27411]   
type = S   
movetype = A   
physics = N   
anim  = 8887   

[State 27411]   
type = VarRandom   
trigger1 = time = 0   
v = 27   
range = 0,7   

[State 27411]   
type = VarRandom   
trigger1 = time = 0   
v = 28   
range = 0,1   

[State 27411]   
type = turn   
trigger1 = (time = 0) && (var(28)=1)   

[State 27411, Pos]   
type = PosSet   
trigger1 = time = 0   
X = -1000*(var(28)=0)|1000*(var(28)=1)   
Y = 17   

[State 27411, Vel]   
type = VelSet   
trigger1 = 1   
X = 5*(var(27)=[0,2])|8*(var(27)=[3,4])|6*(var(27)=5)|10*(var(27)=6)|7*(var(27)=7)   

[State 27411, Sound]   
type = PlaySnd   
trigger1 = time = 140-30*(var(27)=[3,7])   
value = F162,2*(var(27)=[0,2])|3*(var(27)=[3,6])|6*(var(27)=7)   
lowpriority = 1   
channel = 23   

[State 27411, Sound]   
type = PlaySnd   
trigger1 = (time = 80) && (var(27)=[0,2])   
value = F162,4   
lowpriority = 1   
channel = 22   

[State 27411, Sound]   
type = PlaySnd   
trigger1 = movehit = 1   
value = F162,5   
lowpriority = 1   
channel = 21   

[State 27411, Sound];Здесь указывается звук удара при столкновении   
type = PlaySnd   
trigger1 = movehit = 1   
lowpriority = 1   
value = F5,21   
channel = 20   

;[State 27411, Effect P2];Здесь вы можете указать эффект при слолкновении   
;type = explod   
;trigger1 = movehit = 1   
;postype = p2   
;anim = F4102   
;scale = 3,3   
;pos = -10,-100   
;vel = 0,-1   
;sprpriority = 2   

[State 27411, Car]   
type = explod   
trigger1 = (time = 0) && (var(27) = [0,6])   
anim = F98520+(var(27))   
scale = 1.5,1.5   
bindtime = -1   
sprpriority = 9   
id = 27411   
ownpal = 1   
shadow = 256,0,0   

[State 27411, Car Police]   
type = explod   
trigger1 = (time = 0) && (var(27) = 7) && (facing = 1)   
anim = F98527   
scale = 1.5,1.5   
bindtime = -1   
sprpriority = 9   
id = 27411   
ownpal = 1   
shadow = 256,0,0   

[State 27411, Car Police]   
type = explod   
trigger1 = (time = 0) && (var(27) = 7) && (facing = -1)   
anim = F98528   
scale = 1.5,1.5   
bindtime = -1   
sprpriority = 9   
id = 27411   
ownpal = 1   
shadow = 256,0,0   

[State 27411, Car Wheel]   
type = explod   
trigger1 = (time%6 = 0) && (var(27) = [0,6])   
anim = F98530+(var(27))   
scale = 1.5,1.5   
bindtime = -1   
sprpriority = 10   
id = 27411   
ownpal = 1   
removetime = 4   

[State 27411, Car Police Wheel]   
type = explod   
trigger1 = (time%6 = 0) && (var(27) = 7)   
anim = F98537   
scale = 1.5,1.5   
bindtime = -1   
sprpriority = 9   
id = 27411   
ownpal = 1   

[State 27411, Hit]   
type = HitDef   
trigger1 = 1   
affectteam = B   
attr = S, NA   
animtype  = Back   
damage  = 300+(25*var(27)), 40   
hitflag = -MAF   
sparkno = -1   
guard.sparkno = -1   
guardsound = 5,14   
ground.type = High   
ground.slidetime = 30   
p2facing = 1   
guard.ctrltime = 20   
guard.slidetime = 20   
ground.hittime  = 30   
ground.velocity = -5,-6                   
air.velocity = -5,-6   
air.hittime = 17           
ground.cornerpush.veloff = -35   
fall.recover = 0   
envshake.time = 15   
envshake.freq = 70   
envshake.ampl = 7   
yaccel = 0.45   
kill       = (Var(9) = 0)   
fall.kill  = (Var(9) = 0)   
guard.kill = (Var(9) = 0)   
priority = 1, Miss   

[State 27411]   
type = RemoveExplod   
triggerall = FrontEdgeDist < -200   
trigger1 = p2stateno = 9010 || parent, stateno = 9010   
trigger2 = life <= 0 || p2life <= 0   
trigger3 = (p2stateno = [180,181]) || (parent, stateno = [180,181])   
id = 27411   

[State 27411, End]   
type = destroyself   
triggerall = FrontEdgeDist < -200   
trigger1 = p2stateno = 9010 || parent, stateno = 9010   
trigger2 = life <= 0 || p2life <= 0   
trigger3 = (p2stateno = [180,181]) || (parent, stateno = [180,181])   

[State 27411, Change]   
type = ChangeState   
trigger1 = Time = 400   
value = 27410

Шаг 5
Теперь нам нужно в каждого игрока вставить столкновение. Скопируйте код, который написан ниже и вставьте его в самый низ, в анимации (*air) каждому персонажу.

Код:
;The Bridge Car Hit   
[Begin Action 8887]   
Clsn1: 7   
           Clsn1[0] = -301, -101, -13, -21   
           Clsn1[1] = -301, -174, -215, -101   
           Clsn1[2] = -15, -71, -4, -49   
           Clsn1[3] = -103, -111, -33, -97   
           Clsn1[4] = -148, -117, -78, -103   
           Clsn1[5] = -216, -129, -146, -106   
           Clsn1[6] = -215, -151, -178, -133   
-1,-1, 0,0, -1

Шаг 6
Теперь каждому игроку, в 1.cns, в [statedef -2] необхожимо вставить следующий код (внимание, statedef -2 может быть общим для всех игроков и храниться в общем фаиле в папке Data):

Код:
[State -2, The Bridge Cars]   
type = helper   
trigger1 = (StageVar(info.name) = "The Bridge") ;тут вы можете указать ещё арены, на которых будет работать данный код, для это необходимо прописать: || (StageVar(info.name) = "Название арены")   
trigger1 = (teamside = 1) && (NumHelper(27410) < 1)   
trigger1 = (life > 0) && (p2life > 0) && (NumHelper(63000) = 0)   
trigger1 = p2stateno != 9010 || stateno != 9010   
trigger1 = (p2stateno != [180,181]) || (stateno != [180,181])   
trigger1 = (p2stateno != [45000,45029]) || (stateno != [45000,45029])   
stateno = 27410   
id = 27410

Шаг 7
Теперь качаем саму арену и вставляем её в игру
Скачать арену The Bridge [Hi-Res] (By: Ruslan_xDD)
Теперь запускаем игру, наслаждаемся игрой.


Дополнение

1. Звук летящего вертолёта и ветер:
Каждому игроку, в 1.cns, в [statedef -2] вставляем следующий код (внимание, statedef -2 может быть общим для всех игроков и хранится в общем фаиле в папке Data):

Код:
[State -2, The Bridge Sounds]   
type = helper   
trigger1 = (StageVar(info.name) = "The Bridge") ;тут вы можете указать ещё арены, на которых будет работать данный код, для это необходимо прописать: || (StageVar(info.name) = "Название арены")   
trigger1 = (numhelper(44010) < 1) && (teamside = 1)   
id = 44010   
stateno = 44010

Далее в Data открываем Common1.cns и в самый низ вставляем этот код:

Код:
;============================================================   
;The Bridge Sounds   
;____________________________________________________________   
[Statedef 44010]   
anim = 888   

[State 44010, Wind]   
type = Playsnd   
triggerall = time = 0   
value = F162,1   
loop = 1   

[State 44010, Helicopter]   
type = Playsnd   
trigger1 = (time = 1000) && (roundno = 1)   
value = F162,7

Все звуки уже у вас имеются, вы их вставили во втором шаге.

0

12

В этом уроке я расскажу вам для чего нужны в мугене такие символы как + - * / () и другое, и расскажу вам, что они значат.

Символ +
Прибавляет сумму, очень полезен для тех, кто не понимает в математике и просто напросто трудно считать, например если вы хотите, чтобы в вашем стейте time был равен 50, а в последующих стейтах этот time прибавлялся на 50 больше, то можно написать таким образом в следущий стейт: time = 50+50. Также символ служит к другим фунциям, таким как + random или + var и др. Если вы например хотите сделать рандомную анимацию или ещё что-то рандомное, то вам нужно будет написать, к примеру: time = 50+random%5 - будет выбирать рандомно (наугад) любой тик от 50 до 54.

Символ -
Вычитание, пользуемся также как и +, только данная функия отнимает значения, а не прибавляет.

Символ *
Тоже самое что и +, только умножает, таким образом если вы хотите, чтобы в каждый последующий стейт был, например time на 50 больше, то можно написать так, 50*2, в след стейт: 50*3, в след стейт: 50*4 и т.д. Также служит прибавлением фунций, например: если вы хотите, чтобы на time = 0 позиция текущего стейт была 5,5, а на time = 1 - была 6,6, то самым удобным способом можно написать так: pos = (5*(time = 0))|(6*(time = 1)),(5*(time = 0))|(6*(time = 1))

Символ /
Деление, не буду обьяснять и так понятно.

Скобки ()
В скобках надёжнее, поэтому они иногда нужны для больших значений.

Переменные & и &&
Переменные обозначают "И", тоесть если мы пишем к примеру: time = 0 && p2stateno = 100, то нужно чтобы эти параметры работали одновременно, очень полезно для trigger'ов, так как вместо такого:

Код:
trigger1 = time = 0    
trigger1 = p2stateno = 100

Можно написать такое:

Код:
trigger1 = time = 0 && p2stateno = 100

А чтобы было надёжнее написать так:

Код:
trigger1 = (time = 0) && (p2stateno = 100)

Чем отличается & от &&:
& - Для по-битовой равносильности (для значений в двоичной системе [0 или 1]);
&& - Для обычной равносильности.

Переменные | и ||
Всё тоже самое, что и &, &&, только означает "ИЛИ", например вместо:

Код:
trigger1 = time = 0    
trigger2 = time = 15

Можно написать так:

Код:
trigger1 = time = 0 || time = 15

Если в выражении присутствуют [], то обязательно выражение нужно взять в скобки.

Символы []
В эти квадратные скобки должны браться числа "ОТ и ДО", первое число в скобках будет значить "ОТ", а второе - "ДО", например если запишем такое выражение:

Код:
trigger1 = time = [0,50]

То данное выражение будет работать только на time от 0 до 50.

Символы <>
< - меньше
> - больше
К примеру:
trigger1 = time < 30
Данный триггер будет работать только тогда, когда time будет меньше 30, или ещё можно запистаь так:

Код:
trigger1 = time =< 30

В этом случае будет работать только, если time будет меньше или равен 30.

Символ !
! - означает "НЕ ДОЛЖНО", например если мы запишем так:

Код:
trigger1 = time != 30

то данный триггер не будет работать на time 30.

Символ **
Экспоненциальный оператор. Если Х и Y оба целые и >= 0, затем Х**Y означает, что Х возводится в степень, равную Y.

Символ ^^
Логический XOR оператор. X^^Y равно 1 (целое), если точно один из X или Y не равен нулю, в иных случаях равно нулю.

Символ ~
Двоичный оператор НЕ (NOT). ~X инвертирует биты (компонент так называемой логической "двойки", 0 или 1) двоичного представления. Будет ошибочно принимать это к плавающим числам для результата операции.

Символ ^
Побитовый XOR оператор. n-ный бит выражения X^Y выбирается, если выбирается только один из X или Y.

Символ :=
Оператор присваивания. Не перенаправленное имя переменной (var(n) или fvar(n) для подходящих значений n) должно появляться с левой стороны. Если левая сторона содержит целую переменную, тогда правая сторона округляется до целого числа перед присваиванием. Если левая сторона содежит плавающую переменную, тогда правая сторона конвертируется в плавающее выражение, если необходимо перед присваиванием (назначением переменной). В обоих случаях значение выражения является значением, присвоенным для переменной.

Символ **
Экспоненциальный оператор. Если Х и Y оба целые и >= 0, затем Х**Y означает, что Х возводится в степень, равную Y.

Символ ^^
Логический XOR оператор. X^^Y равно 1 (целое), если точно один из X или Y не равен нулю, в иных случаях равно нулю.

Символ ~
Двоичный оператор НЕ (NOT). ~X инвертирует биты (компонент так называемой логической "двойки", 0 или 1) двоичного представления. Будет ошибочно принимать это к плавающим числам для результата операции.

Символ ^
Побитовый XOR оператор. n-ный бит выражения X^Y выбирается, если выбирается только один из X или Y.

Символ :=
Оператор присваивания. Не перенаправленное имя переменной (var(n) или fvar(n) для подходящих значений n) должно появляться с левой стороны. Если левая сторона содержит целую переменную, тогда правая сторона округляется до целого числа перед присваиванием. Если левая сторона содежит плавающую переменную, тогда правая сторона конвертируется в плавающее выражение, если необходимо перед присваиванием (назначением переменной). В обоих случаях значение выражения является значением, присвоенным для переменной.

авторы урока:Ruslan_xDD и chameleoncyborg
ссылка на оригинал: http://mkheroes.ru/forum/70-433-1

0

13

Работа с экраном выбора чаров
Стандартно в мугене стоит экран выбора персонажа из 12 ячеек. (3x4)
Сейчас мы его попробуем сделать больше. =) Сделаем на 50 бойцов. ^^
1. Открываем data -> mugen1 -> system.def блокнотом
Находим строчки
http://eternalozarchiv.3dn.ru/_ld/0/79_gjw.gif
rows - это строчки
columns - это столбцы
2. Меняем на
rows = 5
columns = 10

Сохраняем и запускаем муген.
Мы видим что у нас табличка ушла за экран.

3. Теперь нам её нужно сдвинуть.

За положение таблички отвечает эта строчка
pos = 480,128
которая находится на 2 строчки ниже rows'a и columns'а.
pos = x,y
http://eternalozarchiv.3dn.ru/_ld/0/80_jHr.gif
Теперь нам надо прощитать отступы

Смотрим код:
ниже
pos = 480,128
идёт
cell.size = 100,100
cell.spacing = 10

cell.size - это ширина и высота одной иконки чара
cell.spacing - это отступ между иконками (по вертикали и по горизонтали)

Значит
10иконок умножаем на 100 и прибавляем 9 пробелов умноженных на 10
10*100+9*10=1090 пикселей
Для моего компьютера при первом запуске муген задал ширину окна 1280.
Значит
1280-1090=190
190/2=95

Меняем
pos = 480,128
на
pos = 95,128
http://eternalozarchiv.3dn.ru/_ld/0/81_FYJ.gif
Также выщитываем высоту, и всё, табличка у нас по центру. =)
Конечно получилось не очень, т.к. версус и табличка налаживаются, просто нам нужно было изменить размер иконок.
cell.size = x,y
Потом уменьшить версусы, а также иконки (Это уже у самих чаров в .sff) под размер новых ячеек.
Автор урока: fEnomen
Ссылка на оригинал: http://mugenforall.ru/forum/69-441-1

0

14

СОЗДАНИЕ FATALITY (FINISHERS.ST)
Разберем самое простое фаталити, Джонни Кейжда
Сначала правим 1.cmd и находим там вот это ...

Код:
[Command]  ; это секция команды     
name = "fatal"  ; имя команды     
command = F,F,D,U    ; комбинация, как можно догадаться - стандартная :)))     
time = 35  ; время за которое комбинацию надо набрать, вполне приемлимое вермя ...

и после этого еще вот что :

Код:
[State -1,fatal]     
type = ChangeState  ; тип - изменения состояния     
value = 3000   ; значение - номер состояния     
triggerall = p2bodydist X < 15    ; триггер общий, расстояние от тела противника до игрока не более 15 точек     
triggerall = command = "fatal"    ; проверка названия команды     
triggerall = p2stateno = 9010    ; состояние противника должно быть под номером 9010 - это состояния Dizzy     
trigger1 = statetype = S  ; тип нашего состояния - S - стоя на земле     
trigger1 = ctrl = 1  ; мы можем контролировать движение     
triggerall = command != "run"    ; не выполнять комбинацию при команеде Run - то есть на бегу

Вот то что пишется в файлах Finishers.st, это и есть те самые действия что выполняет во время фаталити наш персонаж.

Вот он исходник из того самого файла:

Код:
[Statedef 3000]     
type    = S     
movetype= A     
physics = S     
juggle  = 1     
anim = 0     
Velset = 0, 0     
ctrl = 0     

[State 430, 31sdaa]     
type = changeanim     
trigger1 = Time = 60     
value = 660     

[State 9130, SetFatal]     
type = Varset     
trigger1 = movehit     
V = 4     
value = 1     

[State 1200, BoltFat]     
type = Hitdef     
trigger1 = AnimElem = 7     
trigger1 = Anim = 660     
velocity = 8, 0      
remvelocity = 0, 0     
attr = S, NT     
animtype = Hard     
air.animtype = Back     
air.fall = 1     
fall.recover = 0     
guardflag = HL     
pausetime = 0,0     
sparkno = 16     
sparkxy = -20,-125     
p2stateno = 6003;661     
guard.sparkno = -1     
hitsound   = 5,0     
ground.type = High     
kill       = (Var(9) = 0)     
fall.kill  = (Var(9) = 0)     
guard.kill = (Var(9) = 0)     

[State 200, 7]     
type = changestate     
trigger1 = Anim = 660     
trigger1 = AnimTime = 0     
value = 0     
ctrl = 1

Теперь всё по порядку:

Код:
[Statedef 3000]  ; стэйтдэф, определение общих параметров всего движения. Номер важен (3000). Это то что мы указали в секциях файла 1.cmd    
type    = S  ; тип состояния (S - stand, стоя на земле)    
movetype= A  ; тип самого движения (A - attack, атака)    
physics = S  ; физика движения (S - стоя на земле)    
juggle  = 1  ; жонглирование, то есть если это движение может являтся, иил явлается частью атаки состоящей из нескольких мелки (тобишь комбо), для любой атаки желательно установить в 1    
anim = 0  ; номер анимации которая связана с этим движением, в данном случае тут не надо сразу ставить ту, что мы запрограммировали, ибо она окажется одна, на всё фаталити точ не всегда допустимо, лучше всего установить нужную анимацию в процессе программирования    
Velset = 0, 0  ; скорость персонажа во время движения, по оси х и у соответстсвенно ...     
ctrl = 0   ; возможность управлять движением (это не к чему, зачем же прерывать такое зрелище

Собственно у нас получилось обычное движение, с физикой "на земле", стоя на месте. Это великолепно! Продолжим разбор полетов...

Далее идет первая часть действия, команда, если можно так назвать. А вообще дословно переводится как "состояние".

Код:
[State 430, name]    ; Определения стейта, собствено номер не очень важен, мне на моей практике не встречалось его использовать, как собственон и имя, то что идет после запятой    
type = changeanim    ; тип действия - ChangeAnim - сменить анимацию. По константам этой опции существует целый раздел в официальной документации. (все быстренько RTMFить ... <img src="http://src.ucoz.net/sm/1/wink.gif" border="0" align="absmiddle" alt="wink"> )    
trigger1 = Time = 60    ; первый триггер Time(по ним тоже дока есть). означает, что через 60 милисекунд произойдет требуемое действие    
value = 660  ; значение, собственно тут это значение - номер анимации на которую следует переклчюится (660)

Пока что всё просто ... Можем в FF или MCM посмотреть эту анимацию ... да, так и есть. Это то самое классическое фаталити, что потом в Ультимэйте Эрмаку отдали :))) (Обратите внимание на красные и синие Cloosion Boxes, пригодится)

Далее идет очень спецефичная именно для MKP опция, установка определенной переменной.

Код:
[State 9130, SetFatal]    
type = Varset  ;собственно тип действия - установить значение переменной    
trigger1 = movehit    ;тирггер, логического типа (да/нет), получает значение 1 если первый игрок при атаке таки попал во второго <img src="http://src.ucoz.net/sm/1/smile.gif" border="0" align="absmiddle" alt="smile">    
V = 4   ; номер переменной в которую пишется значение    
value = 1  ; собственно значение
Код:
Это специфично для MKP потому что таким образом мы обозначаем какого типа добивание производится    
Эксперементально я накопал что эту переменную надо установить в 1 во время фаталити, 5 при бруталити. При френдшипе почуму-то ничего устанавливать не надо о_О (до конца пока не понял).

Далее основное действие:

Код:
[State 1200, BoltFat]    
type = Hitdef   ; тип hitdef - отвечает за нанесение удара    
trigger1 = AnimElem = 7  ; триггер, указывает на номер кадра (элемента) в анимации, при котором состоится действие    
trigger1 = Anim = 660  ; триггер, соответетсенно проверяет номер анимции (бдительные испанцы <img src="http://src.ucoz.net/sm/1/smile.gif" border="0" align="absmiddle" alt="smile"> )    
attr = S, NT   ; атрибуты атаки ---  S - так же как в Statedef тип атаки, стоя на земеле, NT - тоже тип атаки, дополнительные параметры N - normal (обычная атака), T - throw (бросок, хотя тут бы A надо поставить, обычную атаку)    
animtype = Hard  ; тип воздействия удара на противника - hard - догадайтесь сами (в документации много чего интересного)    
air.animtype = Back  ; тип воздействия если противник окажется в воздухе .... непонял нафига оно тут, но собвстенно back - притивника заносит за персонажа (как при броске)    
air.fall = 1   ; при этом противник после броска, переходит в состояние Fall - педение     
fall.recover = 0   ; не позволяет противнику вернутся из состояния fall до окончания его действия (бкувально, перекувыркнуться и встать на ноги)    
guardflag = HL   ; указывает насколько противник может защитится от атаки. HL (экв. M) - средняя степень защиты (очевидно что тут это уже не надо)    
pausetime = 0,0   ; время задержки после удара, как в Страит-файтерх всяких, первое число - время для нашего игрока, второе - противника    
sparkno = 16   ; номер "искры" при ударе, то есть эффект который заложен в основах, в файлах FIGHTFX.AIR и FIGHTFX.SFF. 16 - брызги крови , кому интересно смотрим через MCM или FF.    
sparkxy = -20,-125  ; координаты места, где будет появлятся "искра"    
p2stateno = 6003  ; номер состояния в которое переходит пртивник после удара (6003 - имерть от отскания головы, заранее запрограммировано для каждого)    
guard.sparkno = -1  ; номер "искры" у противника ... не требуется    
hitsound   = 5,0   ; номер группы, звука в SND файле, при ударе    
ground.type = High  ; тип "падения" противника ...     
kill       = (Var(9) = 0)  ; тут я не совсем разобрался, но это надо    
fall.kill  = (Var(9) = 0)    
guard.kill = (Var(9) = 0)

И в довершение :

Код:
[State 200, 7]    
type = changestate  ; сменить состояние    
trigger1 = Anim = 660  ; если анимация 660    
trigger1 = AnimTime = 0   ; и время её вышло, то есть цикл завершился ...    
value = 0   ; то переходим в сотстояние 0 - нормальная стойка     
ctrl = 1    ; мы можем контроллировать движния ....

Вот и всё ... А есть добивания и положней, так что дерзаем! :)
Автор: armand
Ссылка на оригинал: http://mkp.ucoz.ru/forum/13-14-1

0

15

Как сделать VS SCREEN с выбранной ареной?

1. Отключаеш стандартный vs sсrееn!
Код:
;----------------------------------------------------
[VS SCREEN]
;----------------------------------------------------
fadein.time = 0
fadeout.time = 0

p1.scale = 0, 0
p2.scale = 0, 0
p1.name.scale = 0, 0
p2.name.scale = 0, 0
time = 0

;----------------------------------------------------
[VersusBGdef]
;----------------------------------------------------
[VersusBGdef]
[VersusBG]
type = D
2. Делаешь это!

В comon1.cns прописать:

Код:
[Statedef 190]
type = S
ctrl = 0
start = 0,0
anim = 888
velset = 0,0,0

[State 190, sprite]
type = Explod
trigger1 = time = 1
anim = 9001
pos = 50,0
bindtime = -1
scale = .35,.35
removetime = 300
sprpriority = 5

[State 190, red]
type = Explod
trigger1 = time = 0
anim = 9002
pos = 50,0
bindtime = -1
scale = .35,.35
removetime = 300
sprpriority = 5

[State 190, loading]
type = Explod
trigger1 = time = 0
anim = F9752
Postype = Left
pos = 156,20
bindtime = -1
scale = .40,.40
removetime = 300
sprpriority = 5

[State 190, loading bar]
type = Explod
trigger1 = time = 0
anim = F963
Postype = Left
pos = 156,95
bindtime = -1
scale = 1,1
removetime = 300
sprpriority = 5

[State 190, vs]
type = Explod
trigger1 = time = 0
anim = F111
Postype = Left
pos = 40,-270
bindtime = -1
scale = 1,1
removetime = 300
sprpriority = 5

[State 190, codes]
type = Explod
trigger1 = teamside = 1
facing = 1
trigger1 = time = 0
stateno = 111370
pos = 50,200
removetime = 300
postype = left

[State 190, codes]
type = Explod
trigger1 = teamside = 2
facing = -1
trigger1 = time = 0
stateno = 111370
pos = 260,200
removetime = 300
postype = left

[State 190, sound]
type = Playsnd
trigger1 = time = 1
value = F47,9
volume = 60
channel = 1

[State 190, IntroAssert]
type = AssertSpecial
trigger1 = 1
flag = Intro
flag2 = nomusic

[State 190, IntroAssert]
type = AssertSpecial
trigger1 = 1
flag = nobardisplay
flag2 = noFG

[State 190, end]
type = ChangeState
trigger1 = Time = 300
value = 1909

;------------------------intro
[Statedef 1909]
type = S
ctrl = 0
start = 0,0
anim = 191
velset = 0,0,0

[State 1909, IntroAssert]
type = AssertSpecial
trigger1 = 1
flag = Intro

[State 190, end]
type = ChangeState
trigger1 = Time = 10
value = 0
3.Изменяешь эксплоды
Код:
[State 190, codes]
type = Explod
trigger1 = teamside = 1
facing = 1
trigger1 = time = 0
anim = 9001
pos = 50,200
removetime = 300
postype = left

[State 190, codes]
type = Explod
trigger1 = teamside = 2
facing = -1
trigger1 = time = 0
anim = 9001
pos = 260,200
removetime = 300
postype = left

И ещё надо добавить каждому персонажу анимацию 9001 из одного кадра - портрета.

Итог:http://eternalozarchiv.3dn.ru/_ld/0/32_VS.png
Автор:dyadun

0

16

===============Для *st
[Statedef 1000] ;номер
type = S
movetype= A
physics = S
juggle = 5
ctrl = 0
velset = 0,0
sprpriority = 2 ;Слой
anim = 1000 ;Анимация первого игрока

[State 1000, Pos] ;Лучше не трогать, чтобы не возникало багов с АИ
type = posset
trigger1 = Time = 0
Y = 0

[State 1000] ;Чтобы АИ не делал часто этот приём
type = Explod
trigger1 = time = 0
anim = 888
ID = 1000
removetime = 300 ;Промежуток времени для АИ, через сколько он сможет сделать приём

[State 1000, Sound]
type = playsnd
trigger1 = time = 6
value = 0,0 ;звук вылета фаирбола

[State 1000, Raketa]
type = helper
trigger1 = animelem = 3
stateno = 1001 ;Номер стейтдефа фаирбола
ID = 1011
;size.xscale = .25 ;размер фаирбола по горизонтали
;size.yscale = .25 ;размер фаирбола по вертикали
pos = -20,-90 ;Позиция
ownpal = 1

[State 1000, End]
type = changestate
trigger1 = animtime = 0
ctrl = 1
value = 0
;_______________________________________________________
[Statedef 1001]
type = S
movetype= A
physics = S
juggle = 2
sprpriority = 1
anim = 7015

[State 1001]
type = veladd
trigger1 = 1
X = 8 ;скорость движения фаирбола по горизонтали
;Y = 0 ;скорость движения фаирбола по вертикали

[State 1011, Sound]
type = Playsnd
trigger1 = movecontact ;При попадании в блок работает
;trigger1 = movehit ;Только при попадании без блока, при использовании уберите триггер выше.
value = 0,0 ;звук фаирбола при попадании в противника

[State 1001, Effect P2] ;Эффект второго игрока при столкновении
type = explod
trigger1 = movecontact ;При попадании в блок работает
;trigger1 = movehit ;Только при попадании без блока, при использовании уберите триггер выше.
postype = p2
pos = 0,-55
;scale = 1,1 ;Размер вспышки
anim = F0 ;Анимация с Fightx.sff, если анимация в игроке, то сотрите F
sprpriority = 1
bindtime = -2
ownpal = 1

[State 1001, Hit]
type = HitDef
trigger1 = time = 0
attr = S,NA
getpower = 0
animtype = Hard
damage = 180, 100 ;(без блока, в блоке)
guardflag = MA
hitflag = MAFP
priority = 4
animtype = Light
air.animtype = Back
air.fall = 1
spakno = -1
guardflag = HL
pausetime = 0,10
p2stateno = 21238 ;стейтдеф второго игрока при столкновении без блока
kill = (parent,Var(9) = 0)
fall.kill = (parent,Var(9) = 0)
guard.kill = (parent,Var(9) = 0)
;palfx.time = 60
;palfx.add = 250,33,33
;palfx.sinadd = 100,50,0,90

[State 1001, End]
type = DestroySelf
trigger1 = movecontact
trigger2 = time = 100

========Для *cmd:

[State 1000, Fireball]
type = ChangeState
value = 1000
triggerall = (p2stateno != 9010) && (statetype = S) && (vel X = 0) && (vel Y = 0)
trigger1 = command = "unnamed" ;имя команды
trigger2 = var(50) = 1 || AiLevel = 1
trigger2 = numexplod(1000) < 1

автор:Ruslan_xDD
Ссылка на оригинал: http://mkheroes.ru/forum/70-436-1

0



Рейтинг форумов | Создать форум бесплатно