Если вы хотите персонализировать игровой процесс или сделать проект более оригинальным, создание скринпака в Mugen — отличный способ проявить себя. В этом руководстве мы подробно расскажем, что такое скринпак, какие инструменты вам понадобятся и как правильно его создать. Вы узнаете, как подобрать изображения, настроить конфигурационные файлы и интегрировать всё в Mugen. Независимо от того, делаете ли вы скринпак для фанта или полноценного мода, эта статья поможет вам разобраться со всеми этапами создания без лишней головной боли.
Итак, что нам нужно для создания скринпака? В принципе, не так много:
Figther Factory
Ulead PhotoImpact, ну или Adobe Photoshop
Вот и все тулзы, нужные для этого дела.
1. Основы
Итак, начнем мы с самого простейшего. Для этого запустим Fighter Factory, нажмем на блокнот:
Далее открываем файл System.def вашего Мугена, нажав на кнопку открыть:
Все. Теперь у нас открыт System.def и мы начинаем его редактировать:
[info] - основная инфа о игре
Name = "****" - название вашей игры/сборки
Author = "****" - вы, то-есть создатель игры
displayname = "****" - отоброжаемое имя автора
versiondate = 25.04.2008 - дата создания
mugenversion= 06,14,2003 - версия Мугена
pal.defaults=1,2,3,4,5 - стандартый набор палитр (менять не надо)
2. Подключение файлов
Далее у нас идет заголовок [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.
Ну вот, файлы мы теперь подключили!
3. Музыка
Следующим заголовком в 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 этого не будет
Теперь у нас есть и музыка в скринпаке!
4. Главное меню
Итак, сейчас мы будем описывать главное меню и его примочки.
Перед описанием меню должен идти такой заголовок - [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 - звук отмены, тоже находится в подключенном файле.
Вот мы и настроили меню. В следующем шаге я опишу установку графики на главном меню.
5. Графика в главном меню
Следующим шагом нам надо сделать графику для нашего меню, так как просто черный экран и буквы нас не устраивают. . Следующим заголовком должно идти [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 типа изображений.
6.Анимация
Здесь я опишу как работает анимация в скринпаках. Для этого вам сначала нужно создать [Title BG] с параметром type = anim и actionno = **** для перехода к самой анимации. Когда вы напишите все остальные нужные вам параметры, с новой строки вы должны начать код анимации:
[Begin Action ****] - вместо звезд ставьте то значение, которое вы указали в параметре Actionno = ****.
В принципе код анимации прост. Сейчас я опишу его строение:
410,0,0,0, 2 - это и есть описание одного кадра анимации. Давайте разберемся в нем:
410 - номер группы изображений в подключенном файле спрайтов.
0 - номер изображения 0 в группе 410.
0 - смещение по горизонтали от начальных координат.
0 - смещение по вертикали от начальных координат.
2 - время пребывания кадра на экране.
Вот и все. Если вы хотите еще один кадр в анимации, просто напишите подобный код в следующей строке. Шаг анимация пройден!
7. Выбор персонажей
Вот мы и подошли к окну выбора персонажей. Сдесь все идет также по аналогии: сначала опись скриптов, затем графика. Со скриптов и начнем. Заголовок должен быть [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] - фоновый спрайт для командного меню, или анимация, если вы вместо [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, и так далее.
8. VS меню.
Вот мы и подошли к написанию 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, и так далее.