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.Ваш персонаж должен появится в игре.