Настройки
http://lfforever.ru/design/black.css http://lfforever.ru/design/ds_dw.css http://lfforever.ru/design/xmas.css
Присоединяйся к каналу LFF в Discord!


PDK 1.2 от 艾爾卡特 (Al'Karter)
В переводе и редактуре участвовали: Archer-Dante, Espada_55, zapashok



Функция Пример Описание Дополнительно
system.dat
Строчки управления фоновой музыки в меню
 menu_bgm1: BGM \ main.wma
 menu_bgm2: BGM \ main.wma
В первой строке вы указана музыка при запуске игры, во второй строке указана музыка после нажатия Start Game.

Если вы не хотите, чтобы там была музыка, достаточно прописать menu_bgm1: [MU]
-
Управление фоновыми изображениями
 <menu_back_1>
 <menu_back_2>
В первой строке указывается фон при запуске игры, во второй строке указывается фон после нажатия Start Game.

Но работает только если у вас type: 3 и изображения находятся в разных папках
Так же есть предустановки:

type 0\1\2\3
При указании type: 0 отображается только цвет фона, без рисунков.
При указании type: 1 отображается только один рисунок, всегда.
При указании type: 2 отображается в том порядке, в каком указано в списке.
При указании type: 3 отображается всё так же, как обычно - в случайном порядке.
<menu_back_1>
 type: 3 rect32: 1056876
 pic: sprite\menu\1.png
<menu_back_end>

<menu_back_2>
 type: 3 rect32: 1056876
 pic: sprite\menu_2\1.png
<menu_back_end>
Список State, в которых броня не действует
 <armor_s>
 state: 8
 state: 11
 state: 12
 state: 13
 state: 14
 state: 16
 state: 18
 <armor_s_end>
- -
Список id, у которых работает поддержка двустороннего состояния блока
 <adefend>
 id: 124
 id: 220
 id: 221
 id: 222
 <adefend_end>
Персонажи с этими ID будут блокировать даже спиной. -
Stages | Стадии
Общая информация
-
- режим Survival удален.
- максимальное число уровней увеличено до 500.
-
stage.dat
<stage_information>
id: 0
name: Stage_1
file: data\stage\stage1.dat
<stage_information_end>
Каждая стадия теперь имеет свой собственный dat-файл.
Чтобы подключить стадию к игре, нужно прописать ее id, имя и путь к ней в файле stage.dat
Значения:

id - номер стадии, порядковый номер стадии в списке меню.
name - указывается имя стадии в меню.
file - путь до файла со стадией, каждая стадия имеет отдельный файл.
ptype:
<stage> id: 0 stage_1-1
 ptype: 0
 bg: 13
 <phase> bound: 900
 id: 30 hp: 10
 <phase_end>
<stage_end>
В файлах стадий может использоваться атрибут "ptype" для выбора, нужно ли игрокам после окончания подстадии бежать в конец 1 - подстадия завершится автоматически

0 - необходимо бежать в конец (как в оригинальном LF2)
bg:
<stage> id: 0 stage_1-1
 ptype: 0
 bg: xx
 <phase> bound: 900
 id: 30 hp: 10
 <phase_end>
<stage_end>
В файлах стадий можно указывать фоновый уровень. Указывается уровень согласно его порядку в data.txt, а не просто ID. Атрибут "bg:" xx - Порядковый номер уровня согласно списку в data.txt.

Учтите, что счет ведется с 0.
when_clear_goto_stage:
 <phase> bound: 900
 id: 30 hp: 10
 when_clear_goto_stage: XY
 <phase_end>
Возможность перейти к определенной стадии и определенной фазе, после окончания любой фазы, благодаря атрибуту: when_clear_goto_stage:
Указывается между <phase> и <phase_end>
Значения:

X - Номер стадии
Y - Номер фазы

Помним, что счет ведется с 0.
team:
 <phase> bound: 900
 id: 30 hp: 10 team: x
 <phase_end>
Теперь можно указать, к какой команде относится вызываемый противник, благодаря атрибуту team: x

x может принимать значения:

1) 1 - союзник (нельзя наносить урон)
2) 2 - команда номер 2 (можно наносить урон, но к вам он расположен дружелюбно)
3) 3 - команда номер 3 (можно наносить урон, но к вам он расположен дружелюбно)
4) 4 - команда номер 4 (можно наносить урон, но к вам он расположен дружелюбно)
5) 5 - вражеская команда (по умолчанию, у всех призываемых персонажей стоит это значение)
-
<protect>
 <phase> bound: 900
 id: 5 hp: 250
 team: 1 <protect>
 <phase_end>
Метка для призываемых персонажей. Если помеченный персонаж умирает - игра заканчивается.

Рекомендуется использовать метку с атрибутом team: 1, так как, если пометить врага - после его убийства игра все равно заканчивается. Без перехода на следующую фазу, стадию.

Судя по всему, создана для реализации миссии "Защищать цель"
-
reserve_join:
 <phase> bound: 900
 id: 11 hp: 10
 join: 10 reserve_join: 50
 <phase_end>
Функция, которая дополняет оригинальный атрибут "join:" и может быть использована только вместе с ним.

"reserve_join:" добавляет количество "воскрешений" для союзника, который перешел на вашу сторону, как если бы это был освобожденный заложник.
Лимит на количество воскрешений: 96
States | Стейты | Статусы Состояния
State: 6xxx
<frame> 100
 pic: 25 state: 6090 hit_a: YYY
 wait: 5 next: 101 
<frame_end>
Добавлен State: 6xxx для имитаций удержания клавиш, определенных в hit_a: YYY или hit_j: YYY или hit_d: YYY. Удерживаемый Блок, Прыжок или Атака.

Значения:
ххx - время в Wait (TU)
yyy - кадр, куда будет совершен переход.

Если удержание отпущено раньше времени - происходит переход в кадр указанный в Next

-
State: 4xxx
<frame> 100
 pic: 25 state: 4090 hit_a: YYY
 wait: 5 next: 101 mp: ZZZ
<frame_end>
Добавлен State: 4xxx для имитаций удержания клавиш, определенных в hit_a: YYY или hit_j: YYY или hit_d: YYY.

Значения:
ххx - время в Wait (TU)
yyy - кадр, куда будет совершен переход.
zzz - число маны

Если удержание отпущено раньше времени - происходит переход в кадр указанный в Next

Если есть указанное число маны в "mp:", то переход будет произведен мгновенно.
State: 5xxyy
<frame> 0
 pic: 999 state: 55252
 wait: 1 next: 1 
<frame_end>
<frame> 1
 pic: 999 state: 55050
 wait: 1 next: 1000
<frame_end>
Добавлен State: 5xxyy для создания эффекта землетрясения.

Значения:
хх - отклонения фонового уровня по координате Х
уу - отклонения фонового уровня по координате У

55050 - сбрасывает все отклонения обратно.

Число 50 следует считать как 0, в то время как значения от 0 до 49 - это отклонения в минус, а от 51 до 99 - в плюс. ()Аналогичный метод используется в перемещении снарядов по оси Z через hit_j: в оригинальном LF2, например в снарядах Davis!)
State: 10000-29999 - Статус для работы со слоями.
Чем выше значение - тем первее план у объекта.
-
State: 1xxxyyy
<frame> 0
 pic: 999 state: 1200999
 wait: 1 next: 370
<frame_end>
Добавлен State: 1xxxyyy next: zzz - статус условного перехода при определенном количестве здоровья.

Значения:
xxx - требуемый для перехода порог здоровья
yyy - кадр, куда персонаж попадает, если условие НЕ выполняется
zzz - кадр, куда персонаж попадает, если условие выполняется
Примечания:

Так же, можно создать условие "если больше хп, то ..."
Для этого нужно просто вместо yyy - кадр, куда персонаж попадает, если условие выполняется. В next: обязательно поставить 999.
state: 20 | state: 21
<frame> 234
 pic: 999 state: 21
 wait: 900 next: 235
<frame_end>
Статусы скрытности персонажа - state: 20 и state: 21 делают персонажа невидимым на время равное wait.
В стадиях персонаж остается видимым.

Нельзя использовать next 999, иначе будет эффект next 1000.
Примечания:
state: 20 - учитывает клонов
state: 21 - не учитывает клонов
*.dat files features | Функционал дат-файлов
shadow: x
<bmp_begin>
shadow: 1
<bmp_end>
Атрибут "shadow" в заголовке объекта между <bmp_begin> и <bmp_end> для скрытия тени объекта. Значения:
0 - всё как обычно
1 - тень отсутствует у объекта во всех его кадрах
hiden: x
<bmp_begin>
hiden: 1
<bmp_end>
Атрибут hiden (именно hiden, а не hidden) в заголовке объекта между <bmp_begin> и <bmp_end> для скрытия объекта категории type: 0 из выбора меню персонажа.

Значения:
0 - всё как обычно
1 - персонаж доступен при успешном вводе пароля
2 - персонаж будет скрыт даже при введенном пароле
Примечания:

Баг! - даже если персонаж скрыт полностью (значение - 2), его можно будет выбрать через Random.
<armor>
<armor>
 sound1: data\085.wav
 sound2: data\085.wav
 type: 1
 ratio: 999
 decrease: 0
 mp: 0
 fall: -1
 bdefend: -1
 injury: -1
 delay: -1
 hp: 500
 action: 250
 frame: 0 200
 spark: 600
 state 3 15 1 12 14
 id: 208 id: 214
 recover: -1
 effect: 2
 effect: 3
 effect: 20
 effect: 21
 effect: 22 
 effect: 23
 effect: 30
<armor_end>
sound1 - звук при срабатывании брони
sound2 - звук при срабатывании брони при блоке

type - разновидность брони:
- При 0 броня отсутствует, но работает sound2 от блока.
- При 1 броня работает в обычном её режиме
- При 2 броня учитывает только различные effect-ы
- При 3 броня игнорирует fall атрибут у атакующих itr
- При 4 броня учитывает только атрибут "decreace" для занижения урона.

ratio - скорость восстановления брони. Броня х2, как у Джулиана \ Рыцарей равна примерно 15-20
decrease - как сильно занижается получаемый урон. Например, при 0 персонаж не будет получать урона при ударах по броне, а при 50 весь получаемый урон будет наноситься с уменьшением на 50%, а при 100 весь получаемый урон будет наноситься персонажу, даже если был удар по броне.
mp - сколько отнимается маны при каждом срабатывании брони. Если маны будет недоставать, то броня не сработает.
fall - минимальное значение fall, которое будет игнорировать броню
bdefend - минимальное значение bdefend, которое будет игнорировать броню
injury - минимальное значение injury, которое будет игнорировать броню
delay - управляет задержкой персонажа (короткой тряской). Если стоит значение -1, то всё будет подобного оригинальному LF2. При значениях от 0 и выше подтормажвания при получении урона минимизируются.
id - список ID, которые игнорируют броню персонажа
effect - список эффектов, которые игнорируют броню персонажа
recover - как долго броня восстанавливается (значение -1 делает броню невосстанавливаемой)
hp - здоровье брони, атрибут можно не прописывать, если хотите чтобы броня не заканчивалась и была постоянной.
action - если hp у брони было установлено и закончилось, персонаж совершит переход в номер кадра, указанный в action. Атрибут не обязателен.
frame - начальный и конечный кадр, между которыми броня действует. Атрибут не обязателен.
spark - номер кадра для эффекта вспышки от удара по броне. Атрибут не обязателен.
state - список state, в которых броня активна. Если ничего не указано, броня будет во всех state. Атрибут не обязателен.
-
walking_frame: x
<bmp_begin>
walking_frame: 7
5 6 7 8 235 236 237
walking_frame_end:
<bmp_end>
Управление количеством кадров ходьбы в заголовке объекта между <bmp_begin> и <bmp_end>

Значения:

walking_frame: x - общее число кадров, которое используется для походки.

5 6 7 8 235 236 237 - порядок кадров, которые будут прокручиваться по ходу анимации. Если вы хотите использовать стандартные кадры в начале кода, то их тоже нужно прописать.

walking_frame_end: - закрывающий тэг, указывающий, что перечисление кадров завершено.
-
running_frame: x
<bmp_begin>
running_frame: 3
300 301 302
running_frame_end:
<bmp_end>
Управление количеством кадров бега в заголовке объекта между <bmp_begin> и <bmp_end>

Значения:

running_frame: x - общее число кадров, которое используется для бега.

300 301 302 - порядок кадров, которые будут прокручиваться по ходу анимации. Если вы хотите использовать стандартные кадры в начале кода, то их тоже нужно прописать.

running_frame_end: - закрывающий тэг, указывающий, что перечисление кадров завершено.
-
heavy_walking_frame: x
<bmp_begin>
heavy_walking_frame: 4
310 311 312 313
heavy_walking_frame_end:
<bmp_end>
Управление количеством кадров ходьбы с тяжелым предметом в заголовке объекта между <bmp_begin> и <bmp_end>

Значения:

heavy_walking_frame: x - общее число кадров, которое используется для походки с тяжелым предметом.

310 311 312 313 - порядок кадров, которые будут прокручиваться по ходу анимации. Если вы хотите использовать стандартные кадры в начале кода, то их тоже нужно прописать.

heavy_walking_frame_end: - закрывающий тэг, указывающий, что перечисление кадров завершено.
-
heavy_running_frame: x
<bmp_begin>
heavy_running_frame: 4
320 321 322 323
heavy_running_frame_end:
<bmp_end>
Управление количеством кадров бега с тяжелым предметом в заголовке объекта между <bmp_begin> и <bmp_end>

Значения:

heavy_running_frame: x - общее число кадров, которое используется для бега с тяжелым предметом.

320 321 322 323 - порядок кадров, которые будут прокручиваться по ходу анимации. Если вы хотите использовать стандартные кадры в начале кода, то их тоже нужно прописать.

heavy_running_frame_end: - закрывающий тэг, указывающий, что перечисление кадров завершено.
-
heavy_running_frame: x
<weapon_piece>
team: 1
piece: 1
 act: 109 framea: 0
 dvx: 0 dvy: 0 dvz: 0
 oid: 211 amount: 1
piece_end:
piece: 2
 act: 125 framea: 4
 dvx: 12 dvy: -20 dvz: 4
 amount: 2
piece_end:
piece: 2
 act: 130 framea: 4
 dvx: 4 dvy: -8 dvz: 4
piece_end:
piece: 3
 act: 135 framea: 4
 dvx: 8 dvy: -10 dvz: 4
 amount: 4
piece_end:
<weapon_piece_end>
Создание осколков для оружия:

"team" - указываете какой стороне принадлежат осколки. Если выставлено значение 0 - привязки по умолчанию нет, а если 1 - происходит привязка к изначальной команде.

"piece" - порядковый номер группы осколков. Из этих групп случайным образом формируется куча осколков, которые появляются (до 25 осколков на один объект).

"act" - первый кадр, из которого и берутся осколки."framea" - число кадров, которое будет использоваться для осколков, например, указываете 3, при том что act 100 стоит, тогда получаете порядок из 100, 101 и 102 (суммарно 3 кадра).

"dvx", "dvy" и "dvz" - скорость полета осколков и их диапазон. Например, при dvx: 5 и dvz: 3 будут работать диапазоны для координаты X от -5 до 5, а для координаты Z от -3 до 3 (представляем куб). dvy в свою очередь указывает как высоко может достать летящий осколок по координате Y, например, при dvy равном -15, ваш осколок может оторваться от земли с силой равной -15 максимум, а минимум с силой равной 0. Это лишь диапазоны допустимых значений, сами осколки выбирают случайное направление полета туда, где допущен указанный вами диапазон.

"amount" - как много осколков такого типа может появиться.
-
Новые атрибуты в Frame | Фреймах | Кадрах
hp:
-
Новый атрибут hp:
Работает аналогично mp:, но теперь как 2 раздельных параметра.

Если вам нужно сделать отнятие hp: через next, то обязательно должен присутствоваться параметр mp: 1+
-
hit_aj:

hit_aa:

hit_jj:
<frame> 235
 pic: 5 state: 3 wait: 3
 next: 236 hit_aj: 240
<frame_end>

<frame> 236
 pic: 5 state: 3 wait: 3
 next: 237 hit_aa: 245
<frame_end>

<frame> 237
 pic: 5 state: 3 wait: 3
 next: 999 hit_jj: 246
<frame_end>
Новые базовые приёмы hit_aj: = D+A+J

hit_aa: = D+A+A

hit_jj: = D+J+J
hit_g:
<frame> 235
 pic: 5 state: 3 wait: 3
 next: 236 hit_g: 600
<frame_end>
Значения:

xxx - кадр, куда перейдет персонаж, если коснется земли.
Примечания:

При использовании этой функции с type 3 нужно использовать state 3007.
next: 13xx
<frame> 235
 pic: 5 state: 3 wait: 3
 next: 1303
<frame_end>

<frame> 236
 pic: 6 state: 3 wait: 3
 next: 300
<frame_end>

<frame> 237
 pic: 7 state: 3 wait: 3
 next: 400
<frame_end>

<frame> 238
 pic: 8 state: 3 wait: 3
 next: 500
<frame_end>
Рандомайзер перехода next: 13xx

Значения:
xx - количество следующих кадров, среди которых будет выполнен рандомный переход. Например, если стоит frame 300 next: 1350, то будет выполнен случайных переход к одному из кадров от 301 до 350.
-
dx:

dy:

dz:
-
Функции движения dx: dy: dz:
Работают аналогично dvx: dvy: dvz:

Отличия:
1) Не сохраняется инерция персонажа.
2) dz: перемещает персонажа по оси Z, в отличие от dvz: , который дает возможность передвижения, путем нажатия клавиш вверх/вниз

Примечание: пройденное расстояние все так же зависит от wait
-
[ITR]
z:
-
Смещение ITR по Z:

- для использования атрибута в IRT нужно добавлять "z:", где положительные значения - это вниз, а отрицательные - вверх.
Так же работает и в mpoint
-
[ITR]
poison: xyyyzzww
 itr:
 kind:0 x:3 y:4 w:80 h:76 poison: 13005075
 itr_end:
Функция Яда.

X - эффект, один из вариантов ниже:
X = 0 -> периодически наносится урон светлому здоровью, яд может убить
X = 1 -> периодически наносится урон светлому здоровью, здоровье не опускается ниже 1hp
X = 2 -> периодически наносится урон светлому здоровью в процентах от текущего здоровья, а не единицах hp. Яд может убить.
X = 3 -> периодически наносится урон светлому здоровью в процентах от текущего здоровья, здоровье не опускается ниже 1hp.
X = 4 -> периодически наносится урон светлому здоровью в процентах от максимального здоровья, а не единицах hp. Яд может убить.
X = 5 -> периодически наносится урон светлому здоровью в процентах от максимального здоровья, а не единицах hp, здоровье не опускается ниже 1hp.

YYY - время действия яда в Единицах Времени Wait.

ZZ - урон в hp или %, в зависимости от выбранного эффекта.

WW - вероятность отравления в %, 0 = 100%

О примере:

poison: 13005075

1 - яд, который не может убить
300 = 10 секунд действия яда
50 - количество хп, которое будет сниматься каждые 2 секунды
75 - шанс отравления
[ITR]
manacle: xxyyy
 itr:
 kind:0 x:3 y:4 w:80 h:76 manacle: 25300
 itr_end:
Функция Silence | Оковы | Молчание

Пораженная эффектом жертва не сможет использовать никакие приемы вроде D+A\J и подобное, то есть приемы со ссылками в другой кадр. Не блокирует работу hit_a, hit_j и hit_d .

XX - % шанс срабатывания эффекта, 0 = 100%
YYY - время действия эффекта

О примере:

manacle: 25300

25% шанс, что эффект сработвает
300 = 10 секунд действия эффекта
[ITR]
delay: xxyyy
 itr:
 kind:0 x:3 y:4 w:80 h:76 delay: 99150
 itr_end:
Функция Root | Slow | Сковывания | Замедления передвижения

Пораженная этим эффектом цель не сможет передвигаться быстро некоторое время.

XX - % шанс срабатывания эффекта, 0 = 100%
YYY - время действия эффекта

О примере:

delay: 99150

99% шанс, что эффект сработвает
150 = 5 секунд действия эффекта
[ITR]
confus: xxyyy
 itr:
 kind:0 x:3 y:4 w:80 h:76 confus: 10090
 itr_end:
Функция Confus | Замешательства

У пораженного персонажа будут перепутаны все нажатия клавиш в случайном порядке. Каждый раз порядок может быть разным. Действует и на AI, однако боты обычно трясутся на месте, так как пытаются использовать привычное движение, но тут же отказываются от него, в результате чего ведут себя слишком хаотично.

XX - % шанс срабатывания эффекта, 0 = 100%
YYY - время действия эффекта

О примере:

confus: 10090

10% шанс, что эффект сработвает
090 = 3 секунды действия эффекта
[ITR]
kind X0
kind X1
kind X2
kind X3
kind X4
kind X5
itr:
kind: 63
x: 0 y: 0 w: 100 h: 100 z: 100
dvx: 5 dvy: -5
itr_end:
Платформы:

- платформы действуют на "center" атрибуты кадров, поэтому работают даже на объекты, у которых нету bdy.

itr kind X0 (dvy - устанавливает высоту, только X3/4/5) - создание платформы, на которую можно просто прыгать.
itr kind X1 - создание непроходимого барьера
itr kind X2 (поднимает вверх через dvy, отталкивает через dvx, ) - доступны dvx и dvy для создание подвижной платформы
itr kind X3 (только при X3) - доступны dvx и dvy для создание подвижной платформы с ускорением (постепенное наращивание dvN параметра)
itr kind X4 (замедляет врага..как по оси Y, так и по X) - функции dvx и dvy теперь подразумевают значения X\1000 и Y\1000.
itr kind X5 (X3 - dvy - аналог батута, dvx - отталкивает, X4/5/6/7/8 - не работает) - прыгающая платформа, где dvx создает горизонтальные рывки, а dvy вертикальные (вписывать отрицательное значение, если хотите, чтобы платформа ускакала вверх)

X может имет следующие значения:
- при 3 действует на все объекты type 0
- при 4 действует только на союзные объекты type 0
- при 5 действует только на вражеские объекты type 0
- при 6 действует так же как при 3, но работает на type 0, type 1, type 2 и type 4
- при 7 действует так же как при 4, но работает на type 0, type 1, type 2, type 4 и type 6
- при 8 действует так же как при 5, но работает на type 0, type 1, type 2, type 4 и type 6
О примере:

В этом случае мы получаем платформу типа "куб", на которую можно прыгнуть, а так же на неё будут падать всяческие предметы. Сама платформа будет перемещаться немного вперед и вверх.
При использовании платформ, нужно ставить dvx/dvy/dvz = 550(в фрейме, не в итре), иначе персонаж будет просто улетать вверх. Так же желательно отрицательное значение Y в itr_kind.

Примечания:

В атрибуте y: лучше указывать отрицательные значения для стабильной работы платформ.
Прочее
- State 9997 не имеет лимита в 80 пикселей
- при запуске ЕХЕ, окно игры всегда центрируется на экране.
- изменен принцип обработки изображений программой (функция API).
- полная поддержка формата PNG.
- для 32-битных PNG файлов поддерживается прозрачность (alpha-канал).
- в data.txt может быть теперь записано 1000 объектов.
- в зеркальных спрайтах приоритет отдается изображениям с наличием _mirror частью, вместо аппаратного отзеркаливания (актуально для некоторых видео-карт).
- удалена реклама.
- удалена функция автоматического обновления.
- список музыки теперь можно изменить через bgm.dat
- загрузка игры происходит теперь тогда, когда эти файлы игры задействованы (крайне актуально для владельцев старых PC, где занимание всей RAM памяти сразу - пагубно).
- при выборе карты или уровня стадии теперь можно прокручивать список в обратном направлении нажатием прыжка.
- в режиме стадий, играя за Рудольфа, вы становитесь полупрозрачными при использовании невидимости, но весь эффект от приёма остается такой же, а так же это распространяется на клонов.
- число объектов, которые одновременно могут быть на уровне увеличено до 1000.
- эффекты "ударов" и "крови" теперь наследуют движение поражаемой цели.
- добавлена поддеркжа Юникода, появилась возможность изменить шрифты.
- полоски здоровья и маны перенесены в sprites/bars.png
- добавлено отображение здоровья и маны в числовых значениях (значения составляются из спрайтов в bars.png, поэтому вы можете убрать их там, если вам они не нужны).
- лимит itr на один кадр увеличен до 100.
- лимит кадров поднят до 799.
- лимит звуков снят.