Data Changing Guide RUS - Часть 1
=======================
Data Changing Guide
by Toxin
Русская Версия
Перевод: Firzen
=======================
1. Введение.
Этот гайд предназначен для тех, кто хочет создать нового персонажа в LF2, но не знает как.
2. Необходимые программы.
Для создания персонажа вам обязательно потребуется кодировщик и декодировщик для редактирования *.dat файлов из LF2. Одной из лучших программ для этого я считаю Data Changer by Jiquera Mondilano. Конечно можно использовать и программы Decrypt и Encrypt, но в них не так удобно работать, как в Data Changer. Также потребуется хороший редактор графики и просмоторщик, например Adobe Photoshop и ACDSee.
3. Начинаем работу.
Ну что, если вы готовы приступить, то запускайте Data Changer и открывайте davis.dat (мы будем использовать персонажа Davis в качестве примера). Когда программа загрузит файл, в окне редактора мы увидим примерно следующее:
name: Davis
head: sprite\sys\davis_f.bmp
small: sprite\sys\davis_s.bmp
file(0-69): sprite\sys\davis_0.bmp w: 79 h: 79 row: 10 col: 7
file(70-139): sprite\sys\davis_1.bmp w: 79 h: 79 row: 10 col: 7
file(140-209): sprite\sys\davis_2.bmp w: 79 h: 79 row: 10 col: 7
walking_frame_rate 3
walking_speed 5.000000
walking_speedz 2.500000
running_frame_rate 3
running_speed 10.000000
running_speedz 1.600000
heavy_walking_speed 3.700000
heavy_walking_speedz 1.850000
heavy_running_speed 6.200000
heavy_running_speedz 1.000000
jump_height -16.299999
jump_distance 10.000000
jump_distancez 3.750000
dash_height -10.000000
dash_distance 18.000000
dash_distancez 5.000000
rowing_height -2.000000
rowing_distance 5.000000
Эта часть - самая главная часть кода персонажа, сейчас я подробно объясню вам, что означает каждая строка в этом коде:
name: Davis --> Имя персонажа.
head: sprite\sys\davis_f.bmp --> Путь к спрайту davis_f.bmp в папке LF2. Этот спрайт отвечает за картинку при выборе персонажа в LF2.
small: sprite\sys\davis_s.bmp --> Путь к спрайту davis_s.bmp в папке LF2. Этот спрайт отвечает за маленькую картинку персонажа на статус баре во время игры.
file(0-69): sprite\sys\davis_0.bmp w: 79 h: 79 row: 10 col: 7
file(70-139): sprite\sys\davis_1.bmp w: 79 h: 79 row: 10 col: 7
file(140-209): sprite\sys\davis_2.bmp w: 79 h: 79 row: 10 col: 7
Эти строчки показывают путь к спрайтам davis_0, davis_1, davis_2. В этих спрайтах содержаться анимация персонажа.
Параметр w: 79 означает, что ширина одной яйчейки под картинку, в файле спрайта, равна 79.
Параметр h: 79 означает, что высота одной яйчейки под картинку, в файле спрайта, равна 79.
Параметры row: 10 и col:7 показывают сколько всего рядов и колонок в файле спрайта. В случае с Davis - 10 рядов и 7 колонок.
walking_speed --> Скорость ходьбы.
walking_speedz --> Скорость ходьбы по кооординате Z (вверх/вниз), во время ходьбы по координате X (влево/вправо).
running_speed --> Скорость бега.
running_speedz --> Скорость бега по кооординате Z (вверх/вниз), во время бега по координате X (влево/вправо).
heavy_walking_speed --> Скорость ходьбы, когда персонаж держит тяжелый предмет (например камень).
heavy_walking_speedz --> Скорость ходьбы по координате Z, когда персонаж держит тяжелый предмет (например камень) и двигается по координате X.
heavy_running_speed --> Скорость бега, когда персонаж держит тяжелый предмет.
heavy_running_speedz --> Скорость бега по координате Z, когда персонаж держит тяжелый предмет.
jump_height --> Высота прыжка.
jump_distance --> Дистанция прыжка по оси X.
jump_distancez --> Смещение по координате Z во время прыжка в дистанцию с нажатой кнопкой Up или Down.
dash_height --> Высота прыжка во время бега.
dash_distance --> Дистанция прыжка во время бега.
dash_distancez --> Смещение по координате Z во время прыжка в дистанцию во время бега с нажатой кнопкой Up или Down.
rowing_distance --> Дистанция подката.
=====================================================================
-Мы будем использовать бег и удар Дєвиса для следующих нескольких примеров.
_________________________________________________________________________________
72 super_punch
pic: 8 state: 3 wait: 2 next: 73 dvx: 0 dvy: 0 dvz: 0 centerx: 28 centery: 79 hit_a: 0 hit_d: 0 hit_j: 0
itr:
kind: 0 x: 40 y: 5 w: 35 h: 45 dvx: 3 dvy: -10 fall: 70 arest: 15 bdefend: 60 injury: 40
itr_end:
bdy:
kind: 0 x: 26 y: 12 w: 35 h: 66
bdy_end:
_________________________________________________________________________________
72 super_punch ---> номер кадра и название движения (имя обычно сокращенное)+(название движения здесь только для того чтоб было легче найти нужный кадр)
pic: 8 ---> картинка которую загружает кадр (!картинки в спрайтах считаются от левого угла до правого и первая картинка не 1 а 0!)
state: 3 ---> состояние персонажа*
wait: 2 ---> как долго длится кадр
next: 73 ---> следующий кадр
dvx: 0 ---> насколько персонаж продвигается в перед
dvy: 0 ---> насколько персонаж продвигается вверх \ вниз (!Когда в небе и на земле НЕ вверх и вниз вовремя ходьбы!)
dvz: 0 ---> насколько персонаж продвигается вверх \ вниз (!теперь это верх и вниз вовремя ходьбы!)
centerx: 28 ---> centerx используется чтоб показать где центр персонажа (!Я не советую вам парится с этим!)
centery: 79 ---> точка в которой ноги персонажа (если показатель больше 79 то персонаж окажется в воздухе)
-----------------------------------------------------------------------------------------------------------------
hit_a: 0 ---> указывает какой кадр последует дальше если вы нажмете атаку
hit_d: 0 ---> указывает какой кадр последует дальше если вы нажмете защиту
hit_j: 0 ---> указывает какой кадр последует дальше если вы нажмете прыжок
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
hit_fj: ---> указывает какой кадр последует дальше если вы нажмете d>j вовремя этого кадра
hit_uj: ---> указывает какой кадр последует дальше если вы нажмете d^j вовремя этого кадра
hit_dj: ---> указывает какой кадр последует дальше если вы нажмете dvj вовремя этого кадра
hit_fa: ---> указывает какой кадр последует дальше если вы нажмете d>a вовремя этого кадра
hit_ua: ---> указывает какой кадр последует дальше если вы нажмете d^a вовремя этого кадра
hit_da: ---> указывает какой кадр последует дальше если вы нажмете dva at вовремя этого кадра
hit_ja: ---> указывает какой кадр последует дальше если вы нажмете dja вовремя этого кадра
-----------------------------------------------------------------------------------------------------------------
itr: ---> атака начинается
kind: 0 ---> тип атаки*
x: 40, w: 35 ---> как далеко атакует (!вперед и назад!) (если вы учили алгебру то должны знать что ось х это движение влево и вправо ,а w это ширина)
y: 5, h: 45 ---> как высоко атакует (!вверх и вниз на земле и в небе!) (y – верх низ h - высота)
dvx: 3 ---> как далеко падает враг от удара (допустимы негативные значения)
dvy: -10 ---> как высоко подлетит противник после удара (!негативное значение допустимо!)
fall: 70 ---> шанс того что противник упадет
arest: 15 ---> хз
bdefend: 60 ---> шанс пробить защиту противника
injury: 40 ---> сколько атака наносит урона*
itr_end: ---> конец атаки
----------------------------------------------------------------------------------------------------------------
bdy: ---> начяло команд относящихся к телу (действия тела)
kind: 0 ---> ?Special Effect? (I'm not sure what will happen, maybe I'll experiment with it later)
x: 26, w: 35 ---> How far when attacked
y: 12, h: 66 ---> How far when attacked
bdy_end ---> конец команд относящихся к телу
----------------------------------------------------------------------------------------------------------------
mp: сколько манны жрет скил
==============================================================
ЗВУК
---------------------------------------------------------------------------------------------------------------
Добавить звук в игру не трудно, труднее сделать чтоб звук использовался в нужный момент
Чтобы добавить новый звук нужно скопировать его в папку "Data"
Чтобы добавить движению звук нужно в кадре во второй строке
(после pic:, etc): !sound: data\(sound name).wav!
Пример:
У меня есть звук "beep.wav" в папке "Data"
Теперь я хочю чтоб этот звук играл когда мой персонаж идет
Я ставлю!sound: data\beep.wav! во вторую линию кадра ходьбы
Теперь когда персонаж идет звук играет.
==============================================================
УРОН
---------------------------------------------------------------------------------------------------------------
Мы знаем что увеличивая значение параметра injury мы увеличиваем урон наносимый противнику но есть еще спец команды для этого параметра:
effect: 0 --> просто удар
effect: 1 --> Острое оружие (эффект крови)
effect: 2 --> Огонь
effect: 3 --> Лед
effect: 4 проходит сквозь врагов (?используется например для отхиливающих магий чтоб не хилило врагов?)
effect: 5 или выше ---> ?
effect: 20 огонь _______________________________________________________________________________
injury: 40
+++++++++++++++++++
Потом добавляем effect: 2
+++++++++++++++++++
injury: 40 effect: 2
--------------------
Теперь атака бет на 40 урона и поджигает
________________________________________________________________________________
==============================================================
СПРАЙТЫ
----------------------------------------------------------------------------------------------------------------
The Высота и ширина спрайта может бить изменена в начале даты. Стандартно 79 на 79 пикселей.
!первая картинка спрайта 0 не 1!
Когда говорят 2 ряда это значит не количество рядов а количество картинок
==============================================================
$ $
$Здесь заканчивается базовый курс. $
$ $
x: ширина стартовой точки в спрайте
y: высота стартовой точки в спрайте
-1
-1 -0---------------------79
-----------------------
-----------------------
-----------------------
79
Но всё место 79x79 чаще всего не используется.
К примеру ударDavisа
72 super_punch
pic: 8 state: 3 wait: 2 next: 73 dvx: 0 dvy: 0 dvz: 0 centerx: 28 centery: 79 hit_a: 0 hit_d: 0 hit_j: 0
itr:
kind: 0 x: 40 y: 5 w: 35 h: 45 dvx: 3 dvy: -10 fall: 70 arest: 15 bdefend: 60 injury: 40
itr_end:
bdy:
kind: 0 x: 26 y: 12 w: 35 h: 66 bdy_end:
>pic: 8
the pic no. from 0 to the no.
>state: 3
Состояние персонажа
state: 0 = стоит
state: 1 = идет
state: 2 = бежит
state: 3 = атакует
state: 7 = защита
state: 1700 = хил самого себя
>wait: 2
Как долго длится кадр.
>next: 73
Номер картинки в спрайте.
>dvx: 0 dvy: 0 dvz: 0
example:
dvx: 10 перемещается вперед на 10 кубов ,если -10 это значит движение назад
dvy: -10 движение вверх на 10(like jump) если 10 движение на землю на 10
dvz: - это позиция движения относительно земли
>centerx: 28 centery: 79
centerx: 28 не важно, centery: 79, высота персонажа (если больше 79 персонаж летает)
>hit_a: 0 hit_d: 0 hit_j: 0
hit_a: 0 смотрите выше
hit_fj: d>j
hit_uj: d^j
hit_dj: dvj
hit_fa: d>a
hit_ua: d^a
hit_da: dva
hit_ja: dja
> itr:
kind: 0 x: 40 y: 5 w: 35 h: 45 dvx: 3 dvy: -10 fall: 70 arest: 15 bdefend: 60 injury: 40
itr_end:
kind: 0—тип атаки 0 – нормальная, 10 - флейта
x: 40—стартовая точка x y: 5 стартовая точка y
w: 35—ширина из x, h: 45—высота из y
>bdy:
kind: 0 x: 26 y: 12 w: 35 h: 66
bdy_end:
kind: 0 – тип атаки
x: 26 y: 12 w: 35 h: 66> attack a bit
effect—эффект атаки (см выше)
special:
4300: hp-40 mp-300
10100: hp-100 mp-100,etc
-5050: hp+500 mp+500,etc
fall—падения персонажа если 70 персонаж падает если 60 персонаж згибается если 1 перс никогда не упадет,
bdefend—сколько процентов защиты пробито у противника
,когда вы атакуете этот параметр увеличивается...
Transform - трансформация
state: 80xx xx=id перса
команда opoint сумонит оружие (как меч фриза), параметр oid указывает id оружия.
Создание лвлов
1 id: 0 #stage 1-1
2 bound: 900
3 id: 30 hp: 50 times: 2 ratio: 1.0
4
5 bound: 1300
6 id: 30 hp: 50 times: 2 ratio: 1.0
7 id: 31 hp: 50 times: 1
8 id: 31 hp: 50 times: 1 ratio: .4
9
10 bound: 1700
11 id: 3000 hp: 50 times: 2
12 id: 3000 hp: 50 times: 2 ratio: 1.0
13
14 bound: 2200
15 id: 122 x: 1100 #milk
16 id: 123 x: 1100 #beer
17 id: 30 hp: 50 ratio: 1
18 id: 30 hp: 50
19 id: 31 hp: 50
20 id: 31 hp: 50 ratio: .4
21 id: 31 hp: 50 ratio: .2
22
23
В строке 1, мы видим параметр "id: 0" and "#stage 1-1".
"id: 0"означает какой это уровень. Значение "0" укажет на уровень 1, а "1" укажет на уровень 2 и тд. уровень 2 на самом деле в игре уровень 1-2 а уровень 7,в id: "8", будет уровнем 2-2.
"#stage 1-1" это коментарій чтоб легче было понять что это за уровень. Все что пишется после знака # не влияет на код.
В строках 2-4,мы видим параметры в которых показаны фазы появления врагов . кждая фаза в игре обозначается стрелочкой Go и сопровождается появлением врага если врагов больше нет то стрелка указывает на переход на следующий уровень.
"bound: 900" указывает на длину участка одной фазы, в конце этой длинны пока фаза не закончилась нас остановит невидимая стена. Длинна второй фазы еще 1300, на фазе 2 можно бегать 900+1300.
Все параметры обозначают объекты в фазе. Это враги, заложники, оружие, бутылки.
К примеру в фазе 1 мы видим:
id: 30 hp: 50 times: 2 ratio: 1.0
"id: 30"это id объекта . Все id прописаны в Data.txt
"id:30"означает бандита.
"hp: 50" Указывает на то что у бандита 50хп.
"times: 2"Показывает сколько раз появляется объект. В данном случае после смерти первого бандита выйдет второй
"ratio: 1.0"показывает ситуацию когда играет больше 1 человека. В данном случае по 1 бандиту на персонажа. Если параметр изменить на 5 то на каждого персонажа выйдет 5 бандитов, а если изменить до 0.5 то на 2 персонажей выйдет только 1 бандит а на 4 два и тд.
В линиях 15 и 16 мы видим:
id: 122 x: 1100 #milk
id: 123 x: 1100 #beer
(x: 1100)- это указывает на то где на поле появится объект. Если установить длину поля 2200 то молоко появится по центру
Посмотрим на другой пример, теперь это уровень 4-4 (id: 33).
bound: 1800
id: 300 hp: 100 act: 40 x: 1000 y: 0 reserve: 8
id: 300 hp: 100 act: 40 x: 1100 y: 0 reserve: 8
id: 122 x: 900 #milk ratio: 2
id: 123 x: 900 #beer ratio: 1
id: 3000 hp: 50 times: 2 ratio: 2
Рассмотрим строки:
id: 300 hp: 100 act: 40 x: 1000 y: 0 reserve: 8
Id 300 это criminal.dat (враг). act: 40указывает на то какой враг имеется ввиду . если мы посмотрим на criminal.txt, мы увидим:
40 bandit
pic: 20 state: 0 wait: 7 next: 41 dvx: 0 dvy: 0 dvz: 0 centerx: 38 centery: 78 hit_a: 0 hit_d: 0 hit_j: 0
bdy:
kind: 1043 x: 21 y: 18 w: 43 h: 62
bdy_end:
Сейчас мы не смотрим на код. Все что нам надо это"40 bandit".Это значит что act: 40 указывает на бандита. (0 монах, 10 is Марк... и тд.).
"x"это точка где появится бандит. A негативное значение "x" # (ex. x: -1000) значит что враг появится сзади нас ...на 1000 сзади от конца экрана.
=======================================
=======================================
Автор НАСТОЯТЕЛЬНО рекомендует создать копию data.txt во избежание проблем
Активация всех персов:
Открываем data.txt.
Первый кусочек даты с персонажами. Найдите его
Вы должны увидеть Bandit, Hunter, Mark, LouisEX, Firzen, и тд.
Скопируйте эти строчки и перенесите их в центр даты .
Теперь меняем их id. Их стандартные id используются в режиме прохождения уровней. Чтоб не мучатся добавьте перед каждым "8". К примеру: Bandit номер 30, а будет номер 830. Только убедитесь что номер еще не использован (убедитесь что нет повторов) .
If Теперь вам не надо прописывать код в игре для открытия персов .
Добавление персонажей:
Копируем дату нового персонажа в \data\
Открываем data.txt.
Теперь все что вам надо сделать так это придумать ему id и записать в части где у нас игровые персонажи(центр). Только убедитесь что номер еще не использован (убедитесь что нет повторов) .
Дальше тип, у персонажей всегда тип 0.
Если вы все правильно сделали то должно быть как тут :
id: Свой номер type: 0 file: data\"имя вашего перса(а точнее имя его файла даты)".dat
7.Ваш персонаж должен появится в игре.