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


PDK 1.2 by 艾爾卡特 (Al'Karter)
Translation from Chinese made by: Archer-Dante, Espada_55, zapashok



Feature Example Description More Info
system.dat
Background music configuration
 menu_bgm1: BGM \ main.wma
 menu_bgm2: BGM \ main.wma
In first string sets music after game lauched, in second sets music after pressing Start Game

If you wish no music then put there "menu_bgm1: [MU]"
-
Background image configuration
 <menu_back_1>
 <menu_back_2>
In first string sets BG after game lauched, in second sets BG after pressing Start Game

Works only with "type: 3" and if images have different locations
Also there is some preference:

type 0\1\2\3
type: 0 displays only solid color background
type: 1 displays only 1 picture, always
type: 2 displays in order you set in list
type: 3 dosplays in random order like in LF2
<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 list that doesn't allow armor to work a while
 <armor_s>
 state: 8
 state: 11
 state: 12
 state: 13
 state: 14
 state: 16
 state: 18
 <armor_s_end>
- -
ID list for objects that can block with both sides
 <adefend>
 id: 124
 id: 220
 id: 221
 id: 222
 <adefend_end>
Characters from that list can block even with their back -
Stages
Basic info
-
- Survival mode was removed.
- max stages cap increased up to 500 levels.
-
stage.dat
<stage_information>
id: 0
name: Stage_1
file: data\stage\stage1.dat
<stage_information_end>
Each Stage now have its own dat-file.
To attach Stage in list you need to set it's id, name and location in stage.dat file
Values:

id - sets order number in menu list
name - sets name of stage in menu
file - path to your stage *.dat file. Each stage with it's own data.
ptype:
<stage> id: 0 stage_1-1
 ptype: 0
 bg: 13
 <phase> bound: 900
 id: 30 hp: 10
 <phase_end>
<stage_end>
In stage files may be used "ptype" attribute for choosing do the players need to run to the end of level after substage clear. 1 - substage will be done automaticaly

0 - players have to run in to the level's end (like in original LF2)
bg:
<stage> id: 0 stage_1-1
 ptype: 0
 bg: xx
 <phase> bound: 900
 id: 30 hp: 10
 <phase_end>
<stage_end>
In substages files you can set up Background Level you want to see. There is no just ID, but the order number from data.txt list. "bg:" attribute for using. xx - order number of BG from data.txt.

Keep in mind: count starts from 0
when_clear_goto_stage:
 <phase> bound: 900
 id: 30 hp: 10
 when_clear_goto_stage: XY
 <phase_end>
Allows you to go in phase you wish after current phase is over. "when_clear_goto_stage:" attribute
Must be set between <phase> and <phase_end>
Values:

X - Stage Number
Y - Phase Munber

Keep in mind: count starts from 0
team:
 <phase> bound: 900
 id: 30 hp: 10 team: x
 <phase_end>
Allows to set up the start team for character appear with "team: x" attribute

X may be in values:

1) 1 - team 1 (ally, can't be hit by player)
2) 2 - team 2 (ally, can be hit by player)
3) 3 - team 3 (ally, can be hit by player)
4) 4 - team 4 (ally, can be hit by player)
5) 5 - team 5 (enemy, by default all objects summoned in Stages is Team 5)
-
<protect>
 <phase> bound: 900
 id: 5 hp: 250
 team: 1 <protect>
 <phase_end>
Tag-Mark <protect> for objects. If the character with that mark is dead - game overs.

Recommended to set up with Team 1, because if mark is up on enemy, the game will be over immideatly after enemy down.

Made for "protect VIP" solutions.
-
reserve_join:
 <phase> bound: 900
 id: 11 hp: 10
 join: 10 reserve_join: 50
 <phase_end>
Feature that extends "join:" attribute and must be used with it.

"reserve_join:" adds "Lives" to ally that joined your side like free criminal.
Lives limit: 96
States | Current Status
State: 6xxx
<frame> 100
 pic: 25 state: 6090 hit_a: YYY
 wait: 5 next: 101 
<frame_end>
New State: 6xxx for Button Holding, defines in "hit_a: YYY" or "hit_j: YYY" or "hit_d: YYY" Holding Block, Jump or Attack

Values:
ххx - time in Wait (TU)
yyy - frame in that character will be trasfered

If holding process is down, character goes in "next:" frame

-
State: 4xxx
<frame> 100
 pic: 25 state: 4090 hit_a: YYY
 wait: 5 next: 101 mp: ZZZ
<frame_end>
New State: 4xxx for Button Holding, defines in "hit_a: YYY" or "hit_j: YYY" or "hit_d: YYY"

Values:
ххx - time in Wait (TU)
yyy - frame in that character will be trasfered
zzz - mana value

If holding process is down, character goes in "next:" frame

If mana in "mp: zzz" is enough the transfer will be done immideatly
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>
New State: 5xxyy for earthquake effect

Value:
хх - background shift by X-ccordinate
уу - background shift by Y-ccordinate

55050 - reset all changes in normal

Value 50 shall be counted as 0, in that case all Values between 0 and 49 - moves in negative coords, and between 51 and 99 - moves in positive coords. (Same method used in original LF2 for making ball move in Z-coord, where 50 is 0, ex. Davis!)
State: 10000-29999 - State for set Layer priority.
Higher value - higher layer.
-
State: 1xxxyyy
<frame> 0
 pic: 999 state: 1200999
 wait: 1 next: zzz
<frame_end>
New State: 1xxxyyy next: zzz, state with HP compare before going to frame.

Values:
xxx - minimal HP character needs
yyy - frame in that character goes if there is not enough HP
zzz - frame in that character goes if he have enough HP

state: 20 | state: 21
<frame> 234
 pic: 999 state: 21
 wait: 900 next: 235
<frame_end>
Invisibility states - state: 20 and state: 21 makes character invisible for "wait:" time
In stages character stays half-transparent

If used "next: 999" then it will works like "next: 1000"
Note:
state: 20 - counts clones
state: 21 - without count
*.dat files features
shadow: x
<bmp_begin>
shadow: 1
<bmp_end>
"shadow" attribute in data head between <bmp_begin> and <bmp_end> for hiding shadow of object Значения:
0 - shadow will works
1 - shadow won't appear in any frame
hiden: x
<bmp_begin>
hiden: 1
<bmp_end>
"hiden" attribute (yes, "hiden", not "hidden") in data head between <bmp_begin> adn <bmp_end> for hiding the "type: 0" object from character selection screen

Values:
0 - regular work
1 - character will be available if cheat code is on
2 - character can't be selected even with cheat code
Values:

Bug! Even if character is comletly hidden with "2" value, it can be taken by 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 - sound of armor hit
sound2 - sound of armor hit while character's block is up

type - armor types:
- 0 - armor is disabled, but sound2 still works while block
- 1 - armor works in regular mode
- 2 - armor protects only from different effects
- 3 - armor ignores "fall" attribute from ITR of attacker
- 4 - armor using only "decreace" for damage decreasing

ratio - speed of armor regeneration, Julian and Knight's double armor is around 15-20 ratio
decrease - how much Damage in % the armor will skip thro itself and let the owner gets injury (ex. "decrease: 0" will block ALL damage till armor is up)
mp - how much mana Armor will drain from owner every time protect triggers. If there is not enough mana, armor will not protect.
fall - minimal "fall" value that will ignores armor
bdefend - minimal "bdefend" value that will ignores armor
injury - minimal "injury" value that will ignores armor
delay - manipulates the short delay if armor triggers (Shaking). If there is "-1" value, everything will work like in original LF2. With 0 and above values, the Shaking effect will have less effect.
id - ID list, that ignores armor
effect - Effect list, that ignores armor
recover - how much time needed to recover armor. -1 value makes it unrecoverable.
hp - health of armor. You may not use this attribute for regular armor. Attribute isn't nessecary.
action - if armor's HP is over, owner will goes to "action: xxx" frame. Attribute isn't nessecary.
frame - first and last frame numbers, between thouse armor will work. Attribute isn't nessecary.
spark - frame number of spark on armor hit. Attribute isn't nessecary.
state - state list, where armor will work. If there is no state list, then armor will work in every state. Attribute isn't nessecary.
-
walking_frame: x
<bmp_begin>
walking_frame: 7
5 6 7 8 235 236 237
walking_frame_end:
<bmp_end>
Manage the number of walking frames in between <bmp_begin> and <bmp_end>

Значения:

walking_frame: x - total number of frames used for animation

5 6 7 8 235 236 237 - order list of frames in animation (from first to last)

walking_frame_end: - closing tag
-
running_frame: x
<bmp_begin>
running_frame: 3
300 301 302
running_frame_end:
<bmp_end>
Manage the number of running frames in between <bmp_begin> and <bmp_end>

Значения:

running_frame: x - total number of frames used for animation

300 301 302 - order list of frames in animation (from first to last)

running_frame_end: - closing tag
-
heavy_walking_frame: x
<bmp_begin>
heavy_walking_frame: 4
310 311 312 313
heavy_walking_frame_end:
<bmp_end>
Manage the number of heavy walking frames in between <bmp_begin> and <bmp_end>

Значения:

heavy_walking_frame: x - total number of frames used for animation

310 311 312 313 - order list of frames in animation (from first to last)

heavy_walking_frame_end: - closing tag
-
heavy_running_frame: x
<bmp_begin>
heavy_running_frame: 4
320 321 322 323
heavy_running_frame_end:
<bmp_end>
Manage the number of heavy running frames in between <bmp_begin> and <bmp_end>

Значения:

heavy_running_frame: x - total number of frames used for animation

320 321 322 323 - order list of frames in animation (from first to last)

heavy_running_frame_end: - closing tag
-
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>
Managing weapon pieces:

"team" - sets basic team to pieces. If "0" there is no special team setup, If "1" then it takes the team of owner.

"piece" - order number of pieces group. From this groups formating a future pieces (up to 25 pieces for each object).

"act" - first frame where pieces will be taken."framea" - how much frames will be used for pieces (ex. set "framea: 3" and "act: 100", then you'll get order of 100, 101 and 102 frames - 3 summary)

"dvx", "dvy" and "dvz" - flying speed range. (ex. with "dvx: 5" and "dvz: 3" range will be "X" with value from "-5" to "5", and for "Z" will be from "-3" to "3"). "dvy" is defines how high the pieces CAN reach (ex. "dvy: -15" will define a possibility for piece to have "dvy" from "0" to "-15"). The pieces works only with range values.

"amount" - how much pieces can appear.
-
New Attributes in Frames
hp:
-
New attribute "hp:"
Works same as "mp" but with HP

If you're using "hp: xxx" for going to Next frame, you should add "mp: 1" or above to make it works properly
-
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>
New basic moves 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>
Values:

xxx - frame in which object will be moved if touches the ground
Note:

If you're using this feature with Type 3, then also set the 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 frame Randomizer "next: 13xx"

Values:
xx - number of frames after current where one of them will be selected randomly and then the owner will moves to this "next"
-
dx:

dy:

dz:
-
Moving features dx: dy: dz:
Works the same as dvx: dvy: dvz:

Difference:
1) Inertia won't be saved after all
2) "dz:" now moves the object in Z-coord, while "dvz:" just allows the character to move by Z-coord with ^ or v

Note: total distance still depends on "wait"
-
[ITR]
z:
-
Shifts ITR by Z-coord:

- adds the Z-shift of ITR, where positive values will move ITR down and negative moves ITR up
Also works with "mpoint"
-
[ITR]
poison: xyyyzzww
 itr:
 kind:0 x:3 y:4 w:80 h:76 poison: 13005075
 itr_end:
Poison feature.

X - poison type:
X = 0 -> periodicaly makes Damage to HP. Can kill character.
X = 1 -> periodicaly makes Damage to HP. Can not kill character.
X = 2 -> periodicaly makes Damage to HP in Percentage of Current HP. Can kill character.
X = 3 -> periodicaly makes Damage to HP in Percentage of Current HP. Can not kill character.
X = 4 -> periodicaly makes Damage to HP in Percentage of Maximum HP. Can kill character.
X = 5 -> periodicaly makes Damage to HP in Percentage of Maximum HP. Can not kill character.

YYY - how long poison will works

ZZ - damage in Real Numbers or Percentage, depends on Poison Type

WW - poison chance (0 = 100%)

About example:

poison: 13005075

1 - poison that can't kill the victim
300 = 10 second for poison
50 - amount HP which target will lose every 2 seconds
75 - poisoning chance
[ITR]
manacle: xxyyy
 itr:
 kind:0 x:3 y:4 w:80 h:76 manacle: 25300
 itr_end:
Works like "Silence", makes the Target unable to use skills.

Doesn't blocks the work of regular moves: "hit_a", "hit_j" and "hit_d"

XX - % of silence change (0 = 100%)
YYY - time of silence

About example:

manacle: 25300

25% chance that target will be silenced
300 = 10 second of silent work
[ITR]
delay: xxyyy
 itr:
 kind:0 x:3 y:4 w:80 h:76 delay: 99150
 itr_end:
Slows movement of target

Target can't move fast for some time.

XX - % of slow chance
YYY - time of slow works

About example:

delay: 99150

99% chance of target will be slowed
150 = 5 second of slow
[ITR]
confus: xxyyy
 itr:
 kind:0 x:3 y:4 w:80 h:76 confus: 10090
 itr_end:
Confuse feature

Target's key buttons will shuffle for some time

XX - % chance of Confuse
YYY - how logn it will works

About example:

confus: 10090

10% chance of target will be affected by Confuse
090 = 3 second of button-shuffle
[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:
Platforms:

- Platforms work with "center" attrubutes of object, so it will works even with bodyless characters.

itr kind X0 (dvy - sets the Height, only with X3/4/5) - creating platform that can be used for jumps.
itr kind X1 - making barrier that cannot be passed thro
itr kind X2 (taking up with "dvy", pushing with "dvx", ) - allows "dvx" and "dvy" for moving platform
itr kind X3 (only with X3) - allows "dvx" and "dvy" for moving platform with acceleration
itr kind X4 (slows the enemy by X and Y axises) - "dvx" and "dvy" functions now meaned to be as X\1000 and Y\1000.
itr kind X5 (X3 - dvy - trampoline, dvx - pushes, X4/5/6/7/8 - doesn't work) - jumping platform with "dvx" for horisontal shift and "dvy" for vertical shift

X can have values:
- 3 - works on all Type-0 objects
- 4 - works on ally Type-0 objects
- 5 - works on enemy Type-0 objects
- 6 - works like "3" but allows Type 0 \ 1 \ 2 \ 4
- 7 - works like "4" but allows Type 0 \ 1 \ 2 \ 4 \ 6
- 8 - works like "5" but allows Type 0 \ 1 \ 2 \ 4 \ 6
About example:

Here we're made a platform with "cube" shape, that can be used for jump and items will fall on it. The platform itself will move a little up and down
dvx/dvy/dvz = 550 is Nessecary in Frame (not in ITR), or the platform just will fly away.

Note:

Better use negative values in "y:" for stable platform work
Other
- State 9997 doesn't have a 80-pixel limit anymore
- on game launch the windows always will be set on center of screen
- reworked picture-using algorithms (API functions).
- complete PNG support
- for 32-bit PNG files transparency also works (alpha-channel)
- 1000-object limit in data.txt
- in Mirror Sprites the high priority have the "*_mirror" files, instead the hardware mirror-methon. Highly actual for some video cards.
- ads are removed.
- autoupdate is removed
- music list now can be managed in bgm.dat
- loading before game now loads only files thouse gonna be used in-game
- при выборе карты или уровня стадии теперь можно прокручивать список в обратном направлении нажатием прыжка.
- in Stage mode invisibility now makes player half-transparent
- object limit in-game raised to the 1000
- hit and blood effects now inherits the target moving speed
- added Unicode support, and also possible to change fonts (?)
- Health and Mana lines now moved to "sprites/bars.png"
- Added number displaying of Health and Mana, numbers are sprites and located in "bars.png"
- ITR limit for each frame raised to 100
- Frame limit raised to 799
- Sound limit removed.