Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Unpacked Script.pvf
#1
Disclaimers:
- The information given in this topic is useless for hacking or creating a private server.
- The purpose of giving out this information is so that people can be more informed about stats and numbers regarding Dungeon Fighter Online to increase their gameplay experience through legitimate playing of the game.
- This thread is not affiliated with or sponsored by Nexon or any of its affiliates or Southperry.
- At no point will I be giving out instructions for how to decrypt, reverse engineer, or repack the game executable or the Script.pvf file.
- I will be documenting how to parse the files within Script.pvf, but this uses no reverse engineering or decryption. Everything is plaintext.

Script.pvf unpacked (May 11, 2011):
ScriptPVF.7z

Requirements to understand this document:
- Hexadecimal
- Parsing binary data
- Programming experience
- You're not an idiot.

Documentation of file format:
The files within Script.pvf are in binary format. This means you cannot view them with a text editor. However, you can view the files in a hex editor. One could even conceivably translate the binary format into the textual format. However, this is not something I have time, patience, or care to do.

All binary files in Script.pvf utilize the same format which is as follows:

Code:
Bit order: Little-endian
File Header: 0xB0D0

Until EOF do the following:
(1) read one 8-bit value and one 32-bit value.
(2) Determine what to do with the 32-bit value based upon the 8-bit value.

0x02 - Integer (32-bit)
0x04 - Float (32-bit)
0x05 - Integer (32-bit) - Section Name (like `[Name]` or `[Animation]`) - Lookup value in ./stringtable.bin
0x07 - Integer (32-bit) - File Link - Lookup value in ./stringtable.bin - then read the given file
0x09 - Integer (32-bit) - File index - Lookup in ./string.usa.lst in PVF root
0x0A - Integer (32-bit) - Lookup value - in ./stringtable.bin (usually paired with 0x09)

A 0x09 block followed by a 0x0A block is syntactic equivalent to something like <4::chr_equip_1443> where 4 is located in the 0x09 block and the chr_equip_1443 is in the 0x0A block. This is used for string lookups.

The above list is not exhaustive. There are likely other blocks which I have not found yet. However, these blocks are the most common.

The following represents python code which can parse stringtable.bin located in the Script.pvf file root.

Code:
import CBinaryReader

    stringTable = CBinaryReader.BinaryReader('stringtable.bin', 'rb')

    numStrings = stringTable.rS32() #rS32 = Read a 32-bit signed integer
    listStrings = [''] * numStrings #Initialize an array of blank strings
    
    baseOffset = stringTable.tell()
    startStringOffset = stringTable.rS32() + baseOffset        
    for eachInt in range(numStrings):
        endStringOffset = stringTable.rS32() + baseOffset
        
        remember = stringTable.tell()
        stringTable.seek(startStringOffset)
        lengthString = endStringOffset - startStringOffset
        stringTableString = stringTable.read(lengthString)
        listStrings[eachInt] = '%d>%s' % (eachInt, stringTableString)
        stringTable.seek(remember)

        startStringOffset = endStringOffset
    FileIO.WriteFile('stringtable.txt', '\n'.join(listStrings))

"CBinaryReader" above is a customized module and is not available with the standard Python distribution. However, the mechanism of reading a binary file should be very easy to comprehend and translate between different programming languages.

Anyway, when the 0x0A block has the number "123456", for example, you would look up the 123,456th string in stringtable.bin. If you're good at math, you should be able to perform the stringtable.bin lookup in O(1) without needing an array of strings.

Save for exactly how to decrypt Script.pvf, you now know everything I know about the files inside script.pvf. If you do happen to have the old unpacking of Script.pvf from a year or so ago, it's extremely helpful to compare files between the previous one and the current one. It was the only way I was able to figure out all that I have.

Happy hunting.
#2
Thanks for the script, Felix. Most of the stuff isn't too useful, but it's a good hunt to see what can be useful and what isn't. Currently trying to do something in Java to somehow output this stuff in a more easily read fashion... but I'm not doing too well. Ah well. Tongue
#3
mrcowcow Wrote:Thanks for the script, Felix.

Quoting so you can't change it.
#4
...How did I get Fiel and Felix mixed up... brb crying in a corner

FIEL****************
#5
Isn't too useful?

I would love to get a repacker going (I do have the tools necessary to create one) just to see what kind of power could be had.
#6
I have no idea how to use this.

So, I'm leaving it up to you, Moo!
#7
mrcowcow Wrote:Thanks for the script, Felix. Most of the stuff isn't too useful, but it's a good hunt to see what can be useful and what isn't. Currently trying to do something in Java to somehow output this stuff in a more easily read fashion... but I'm not doing too well. Ah well. Tongue
I have a rather robust parser for the old (text, non-binary) unpacked format in C#. If you or anyone else would be interested in that, let me know.
#8
Wow these files really have everything. Thanks Fiel.

Hopefully we can extract good stuff like skill stats and such from this. I was looking at the Acid Rain file just parsed out based on the info in the first post:
Code:
[name]
File Index: look up in ./string.usa.lst - 12
Integer - 173111
[name2]
File Index: look up in ./string.usa.lst - 12
Integer - 173112
[basic explain]
File Index: look up in ./string.usa.lst - 12
Integer - 173113
[explain]
File Index: look up in ./string.usa.lst - 12
Integer - 173114
[purchase cost]
Integer - 30
[/purchase cost]
[pre required skill]
Integer - 89
Integer - 3
[/pre required skill]
[required level]
Integer - 30
[required level range]
Integer - 2
[type]
[active]
[skill class]
Integer - 3
[maximum level]
Integer - 30
[growtype maximum level]
Integer - 0
Integer - 0
Integer - 0
Integer - 0
Integer - 20
[skill fitness growtype]
Integer - 4
[/skill fitness growtype]
[consume MP]
Integer - 80
Integer - 200
[casting time]
Integer - 600
Integer - 600
[durability decrease rate]
Integer - 80
[icon]
Character/Mage/Effect/SkillIcon.img
Integer - 250
Character/Mage/Effect/SkillIcon.img
Integer - 251
[consume item]
[/consume item]
[command]
0x6 - 171499
0x8 - 114045
0x6 - 171499
0x8 - 114045
0x6 - 171500
[/command]
[command key explain]
File Index: look up in ./string.usa.lst - 12
Integer - 173116
[cool time]
Integer - 20000
Integer - 20000
[static data]
Integer - 300
Integer - 525
Integer - 175
Integer - 0
Integer - 1
Integer - 2
Integer - 600
Integer - 100
Integer - 0
Integer - 200
Integer - 330
Integer - 100
Integer - 1300
Integer - 650
[/static data]
[level info]
Integer - 9
Integer - 8000
Integer - 280
Integer - 210
Integer - 234
Integer - 257
Integer - 10000
Integer - 10
Integer - 504
Integer - 5
Integer - 8000
Integer - 311
Integer - 233
Integer - 259
Integer - 285
Integer - 10000
Integer - 11
Integer - 616
Integer - 6
Integer - 8000
Integer - 344
Integer - 258
Integer - 286
Integer - 315
Integer - 10000
Integer - 13
Integer - 737
Integer - 7
Integer - 8000
Integer - 378
Integer - 283
Integer - 315
Integer - 346
Integer - 10000
Integer - 14
Integer - 867
Integer - 8
Integer - 8000
Integer - 414
Integer - 310
Integer - 345
Integer - 379
Integer - 10000
Integer - 16
Integer - 1005
Integer - 9
Integer - 8000
Integer - 451
Integer - 338
Integer - 376
Integer - 414
Integer - 10000
Integer - 17
Integer - 1152
Integer - 10
Integer - 8000
Integer - 490
Integer - 368
Integer - 408
Integer - 449
Integer - 10000
Integer - 19
Integer - 1309
Integer - 11
Integer - 8000
Integer - 531
Integer - 398
Integer - 442
Integer - 487
Integer - 10000
Integer - 21
Integer - 1474
Integer - 12
Integer - 8000
Integer - 573
Integer - 430
Integer - 477
Integer - 525
Integer - 10000
Integer - 23
Integer - 1648
Integer - 13
Integer - 8000
Integer - 617
Integer - 463
Integer - 514
Integer - 565
Integer - 10000
Integer - 24
Integer - 1830
Integer - 14
Integer - 8000
Integer - 662
Integer - 497
Integer - 552
Integer - 607
Integer - 10000
Integer - 26
Integer - 2022
Integer - 15
Integer - 8000
Integer - 709
Integer - 532
Integer - 591
Integer - 650
Integer - 10000
Integer - 29
Integer - 2222
Integer - 16
Integer - 8000
Integer - 758
Integer - 569
Integer - 632
Integer - 695
Integer - 10000
Integer - 31
Integer - 2432
Integer - 17
Integer - 8000
Integer - 808
Integer - 606
Integer - 674
Integer - 741
Integer - 10000
Integer - 33
Integer - 2650
Integer - 18
Integer - 8000
Integer - 860
Integer - 645
Integer - 717
Integer - 789
Integer - 10000
Integer - 35
Integer - 2877
Integer - 19
Integer - 8000
Integer - 914
Integer - 685
Integer - 762
Integer - 838
Integer - 10000
Integer - 38
Integer - 3112
Integer - 20
Integer - 8000
Integer - 969
Integer - 727
Integer - 808
Integer - 888
Integer - 10000
Integer - 40
Integer - 3357
Integer - 21
Integer - 8000
Integer - 1026
Integer - 769
Integer - 855
Integer - 940
Integer - 10000
Integer - 43
Integer - 3611
Integer - 22
Integer - 8000
Integer - 1084
Integer - 813
Integer - 904
Integer - 994
Integer - 10000
Integer - 45
Integer - 3873
Integer - 23
Integer - 8000
Integer - 1144
Integer - 858
Integer - 954
Integer - 1049
Integer - 10000
Integer - 48
Integer - 4144
Integer - 24
Integer - 8000
Integer - 1206
Integer - 904
Integer - 1005
Integer - 1105
Integer - 10000
Integer - 51
Integer - 4424
Integer - 25
Integer - 8000
Integer - 1269
Integer - 952
Integer - 1058
Integer - 1163
Integer - 10000
Integer - 54
Integer - 4713
Integer - 26
Integer - 8000
Integer - 1334
Integer - 1001
Integer - 1112
Integer - 1223
Integer - 10000
Integer - 57
Integer - 5011
Integer - 27
Integer - 8000
Integer - 1401
Integer - 1050
Integer - 1167
Integer - 1284
Integer - 10000
Integer - 60
Integer - 5317
Integer - 28
Integer - 8000
Integer - 1469
Integer - 1102
Integer - 1224
Integer - 1346
Integer - 10000
Integer - 63
Integer - 5632
Integer - 29
Integer - 8000
Integer - 1538
Integer - 1154
Integer - 1282
Integer - 1410
Integer - 10000
Integer - 66
Integer - 5957
Integer - 30
Integer - 8000
Integer - 1610
Integer - 1207
Integer - 1341
Integer - 1476
Integer - 10000
Integer - 69
Integer - 6290
Integer - 31
Integer - 8000
Integer - 1683
Integer - 1262
Integer - 1402
Integer - 1543
Integer - 10000
Integer - 73
Integer - 6632
Integer - 32
Integer - 8000
Integer - 1757
Integer - 1318
Integer - 1464
Integer - 1611
Integer - 10000
Integer - 76
Integer - 6982
Integer - 33
Integer - 8000
Integer - 1833
Integer - 1375
Integer - 1528
Integer - 1681
Integer - 10000
Integer - 80
Integer - 7342
Integer - 34
[/level info]
[pvp]
[start cool time]
Integer - 20000
Integer - 20000
[cool time]
Integer - 30000
Integer - 30000
[level info]
Integer - 9
Integer - 8000
Integer - 112
Integer - 84
Integer - 93
Integer - 103
Integer - 10000
Integer - 10
Integer - 504
Integer - 5
Integer - 8000
Integer - 124
Integer - 93
Integer - 104
Integer - 114
Integer - 10000
Integer - 11
Integer - 616
Integer - 6
Integer - 8000
Integer - 138
Integer - 103
Integer - 115
Integer - 126
Integer - 10000
Integer - 13
Integer - 737
Integer - 7
Integer - 8000
Integer - 151
Integer - 113
Integer - 126
Integer - 139
Integer - 10000
Integer - 14
Integer - 867
Integer - 8
Integer - 8000
Integer - 165
Integer - 124
Integer - 138
Integer - 152
Integer - 10000
Integer - 16
Integer - 1005
Integer - 9
Integer - 8000
Integer - 180
Integer - 135
Integer - 150
Integer - 165
Integer - 10000
Integer - 17
Integer - 1152
Integer - 10
Integer - 8000
Integer - 196
Integer - 147
Integer - 163
Integer - 180
Integer - 10000
Integer - 19
Integer - 1309
Integer - 11
Integer - 8000
Integer - 212
Integer - 159
Integer - 177
Integer - 195
Integer - 10000
Integer - 21
Integer - 1474
Integer - 12
Integer - 8000
Integer - 229
Integer - 172
Integer - 191
Integer - 210
Integer - 10000
Integer - 23
Integer - 1648
Integer - 13
Integer - 8000
Integer - 247
Integer - 185
Integer - 206
Integer - 226
Integer - 10000
Integer - 24
Integer - 1830
Integer - 14
Integer - 8000
Integer - 265
Integer - 199
Integer - 221
Integer - 243
Integer - 10000
Integer - 26
Integer - 2022
Integer - 15
Integer - 8000
Integer - 284
Integer - 213
Integer - 236
Integer - 260
Integer - 10000
Integer - 29
Integer - 2222
Integer - 16
Integer - 8000
Integer - 303
Integer - 227
Integer - 253
Integer - 278
Integer - 10000
Integer - 31
Integer - 2432
Integer - 17
Integer - 8000
Integer - 323
Integer - 243
Integer - 269
Integer - 296
Integer - 10000
Integer - 33
Integer - 2650
Integer - 18
Integer - 8000
Integer - 344
Integer - 258
Integer - 287
Integer - 315
Integer - 10000
Integer - 35
Integer - 2877
Integer - 19
Integer - 8000
Integer - 366
Integer - 274
Integer - 305
Integer - 335
Integer - 10000
Integer - 38
Integer - 3112
Integer - 20
Integer - 8000
Integer - 388
Integer - 291
Integer - 323
Integer - 355
Integer - 10000
Integer - 40
Integer - 3357
Integer - 21
Integer - 8000
Integer - 410
Integer - 308
Integer - 342
Integer - 376
Integer - 10000
Integer - 43
Integer - 3611
Integer - 22
Integer - 8000
Integer - 434
Integer - 325
Integer - 361
Integer - 398
Integer - 10000
Integer - 45
Integer - 3873
Integer - 23
Integer - 8000
Integer - 458
Integer - 343
Integer - 381
Integer - 420
Integer - 10000
Integer - 48
Integer - 4144
Integer - 24
Integer - 8000
Integer - 482
Integer - 362
Integer - 402
Integer - 442
Integer - 10000
Integer - 51
Integer - 4424
Integer - 25
Integer - 8000
Integer - 508
Integer - 381
Integer - 423
Integer - 465
Integer - 10000
Integer - 54
Integer - 4713
Integer - 26
Integer - 8000
Integer - 534
Integer - 400
Integer - 445
Integer - 489
Integer - 10000
Integer - 57
Integer - 5011
Integer - 27
Integer - 8000
Integer - 560
Integer - 420
Integer - 467
Integer - 514
Integer - 10000
Integer - 60
Integer - 5317
Integer - 28
Integer - 8000
Integer - 587
Integer - 441
Integer - 490
Integer - 539
Integer - 10000
Integer - 63
Integer - 5632
Integer - 29
Integer - 8000
Integer - 615
Integer - 462
Integer - 513
Integer - 564
Integer - 10000
Integer - 66
Integer - 5957
Integer - 30
Integer - 8000
Integer - 644
Integer - 483
Integer - 537
Integer - 590
Integer - 10000
Integer - 69
Integer - 6290
Integer - 31
Integer - 8000
Integer - 673
Integer - 505
Integer - 561
Integer - 617
Integer - 10000
Integer - 73
Integer - 6632
Integer - 32
Integer - 8000
Integer - 703
Integer - 527
Integer - 586
Integer - 644
Integer - 10000
Integer - 76
Integer - 6982
Integer - 33
Integer - 8000
Integer - 733
Integer - 550
Integer - 611
Integer - 672
Integer - 10000
Integer - 80
Integer - 7342
Integer - 34
[/level info]
[/pvp]
[level property]
Integer - 1
Integer - 99
File Index: look up in ./string.usa.lst - 12
Integer - 173117
Integer - -1
Integer - 0
0x4 - 981668463
Integer - -1
Integer - 1
0x4 - 1065353216
Integer - -1
Integer - 2
0x4 - 1065353216
Integer - -1
Integer - 3
0x4 - 1065353216
Integer - -1
Integer - 4
0x4 - 1065353216
Integer - -1
Integer - 5
0x4 - 981668463
Integer - -1
Integer - 6
0x4 - 1065353216
Integer - -1
Integer - 7
0x4 - 1065353216
Integer - -1
Integer - 8
0x4 - 1065353216
Integer - 13
Integer - 13
0x4 - 981668463
Integer - 0
Integer - 0
0x4 - 1036831949
Integer - 1
Integer - 1
0x4 - 1036831949
Integer - 2
Integer - 2
0x4 - 1036831949
[/level property]
[skill preloading image]
Character/Mage/Effect/MpRegenRateUp.img
[/skill preloading image]
Still quite a bit of work to get it in a usable state, but at least the info is all here so yay. Interesting that there's a field called durability decrease rate, never knew it depended on skills used.
#9
Kevin Wrote:Interesting that there's a field called durability decrease rate, never knew it depended on skills used.

Yup, Greg got a bunch of those numbers a while back on an earlier extraction. I think SSA Wiki still has them if it hasn't been greatly remodeled yet.
#10
@LHC: do you still have the old unpacked archive around?

@Fiel: are these files from after the 5/11 patch? They look like they do, just wanted to confirm.

If so, that would confirm what all of us already knew about the chron 2 sets: they're still untranslated in the data.

I'll upload a textual version of the archive once I have all the string.usa.lst lookups completed. More people looking at it would be great.
#11
@Kevin - I don't know. I just tried connecting to DFO today and had a whole bunch of files to download. The encryption changed to the version I cannot do. So... that's on hold. The date included with the Script.pvf file I unpacked was 4/22/2011. So yeah, that.
#12
Kevin Wrote:@LHC: do you still have the old unpacked archive around?
Yes.
#13
Ok, here it is: http://www.sendspace.com/file/yfqbq4

It's a zip file with a lot of text files inside. Only the *.str files (which are normal text files viewable in a text editor) and all the binary files that have a header of 0xB0D0 have been parsed out.

Folders which I think are of most interest are:
./skill/ - skill stats and values
./equipment/ - equip stats and values
./quest/ - quest text, requirements, rewards
./etc/ - misc pieces of data

Unfortunately there's still some work in decoding what the numbers in each file really mean in terms of the game, but this should be a decent start.

Fiel Wrote:@Kevin - I don't know. I just tried connecting to DFO today and had a whole bunch of files to download. The encryption changed to the version I cannot do. So... that's on hold. The date included with the Script.pvf file I unpacked was 4/22/2011. So yeah, that.
Ah ok thanks. Then the data's pre-act 9 then. Shame they changed the encryption back, would be nice to continually have up-to-date data.
#14
As far as the actual game meanings go, I have most of skills, equips, pots, and a couple other things figured out, but I don't have time for that stuff anymore.


Forum Jump:


Users browsing this thread: 1 Guest(s)