Black Desert Online Modding Tools (1 Viewer)

Miau Lightouch

Potential Patron
Joined
Dec 13, 2016
just wondering how do you determine the MODDED_BYTES in META_INJECTOR,
because there's a new localization release in Taiwan, and that server could be provided international service.
close beta will start tomorrow, I want to try some experiment modify with this game.
 

BlackFireBR

Content Creator
Joined
Sep 2, 2013
just wondering how do you determine the MODDED_BYTES in META_INJECTOR,
because there's a new localization release in Taiwan, and that server could be provided international service.
close beta will start tomorrow, I want to try some experiment modify with this game.
Actually, it can be any value that doesn't produce a valid match in the FOLDER_NAMES and FILE_NAMES strings.
The idea is to break the index so the game has to took somewhere else.
As long as you don't put a index that it result in a valid path, it should work.
Example:
Instead of being
FILE_NUM = 0
FOLDER_NUM = 0
FOLDER_NAME[FOLDER_NUM] = "character/"
FILE_NAME[FILE_NUM] = "multiplemodeldesc.xml"

Actual path: "character/multiplemodeldesc.xml"

if you change FOLDER_NUM to 1 for example, it would result:
FOLDER_NAME[FOLDER_NUM] = "luacscript/"
FILE_NAME[FILE_NUM] = "multiplemodeldesc.xml"

Actual path: "luacscript/multiplemodeldesc.xml"

So since there is no "multiplemodeldesc.xml" under "luacscript/", the game looks in the root folder.
 

Miau Lightouch

Potential Patron
Joined
Dec 13, 2016
!!!
so, if game can't find the file in paz package, it would search and read the file in root folder?
it's really make mod easier, thank you.
 

moka

Vivacious Visitor
Joined
Jun 27, 2012
Does multiplemodeldesc work again? I would like to change the kibelius shoes with puff mini or lumik shoes for my Sorc.

I wish they would let people have bonus xp set effect with different costume parts.
 

BlackFireBR

Content Creator
Joined
Sep 2, 2013
Does multiplemodeldesc work again? I would like to change the kibelius shoes with puff mini or lumik shoes for my Sorc.

I wish they would let people have bonus xp set effect with different costume parts.
Last time I checked (long long time ago) it didn't work, and I do see any reason why it would be back working again. Unfortunately multiplemodeldesc editing is not possible anymore.
 

Miau Lightouch

Potential Patron
Joined
Dec 13, 2016
seems could decode like quickbms and get a good performance.
now, I will re-implement this base on your meta explorer.

thanks for your source code, that's awesome.

IB0zMOQ.png
->
j4qT35U.png


and... why skip 256000 bytes? it work on any release, weird.
 

BlackFireBR

Content Creator
Joined
Sep 2, 2013
seems could decode like quickbms and get a good performance.
now, I will re-implement this base on your meta explorer.

thanks for your source code, that's awesome.

IB0zMOQ.png
->
j4qT35U.png


and... why skip 256000 bytes? it work on any release, weird.
How did you do that? Can you teach me? Do you know how to decrypt bytes like quickbms using C?
The 256k bytes I skipped it's because I cannot make any sense of any of those bytes. If I use the same decryptio key, it doesn't give me anything and if I read them as integers, they only give me negative numbers.
Some guy said here they are half precision floats, but I haven't tried that yet and I'm not sure they will give the the same file structure as my "FileBlock" structure.
 

Miau Lightouch

Potential Patron
Joined
Dec 13, 2016
it's not a well decrypt function implement, just for experiment.

note that the input file is dump from encrypted part of meta file.

Code:
// ice cipher source: http://www.darkside.com.au/ice/index.html
#include "ice.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main (){

    FILE *fp, *fout;

    int count = 7730712; // copy from folder/file name size
    int count2 = 0;
    fp = fopen("filename.dat","rb"); // encrypted filename block (I dump to a file for test.)
    fout = fopen("output.dat", "wb"); // the file to write out the decrypted text to file.
    uint8_t *ctext = (uint8_t *) malloc(count); // alloc to meet our need.
    uint8_t *ptext = (uint8_t *) malloc(count);


    if (fp==NULL) {
        perror ("Error opening file");
    }
    else {
        // count2 is the real bytes count that program read out, but should be same as "count".
        count2 = fread(ctext, 1, count, fp);
    printf ("Total number of bytes read: %d\n", count2);

    const uint8_t *s = "\x51\xF3\x0F\x11\x04\x24\x6A\x00"; // it's a magic, you know.

    ICE_KEY *ik = ice_key_create(0); // init the key
    ice_key_set(ik, s); // set the key

    long cuts = count2/8;
    while (cuts--){
        ice_key_decrypt(ik, ctext, ptext); // key, in (encrypted text), out (decrypted text)
        ctext +=8;
        ptext +=8;
    }

    ptext -= count2; // reset the pointer back to the begining.

    fwrite(ptext, 1, count, fout);
    fclose(fout);
    fclose(fp);
}
 
Last edited:

BlackFireBR

Content Creator
Joined
Sep 2, 2013
it's not a well decrypt function implement, just for experiment.

note that the input file is dump from encrypted part of meta file.

Code:
// ice cipher source: http://www.darkside.com.au/ice/index.html
#include "ice.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main (){

    FILE *fp, *fout;

    int count = 7730712; // copy from folder/file name size
    int count2 = 0;
    fp = fopen("filename.dat","rb"); // encrypted filename block (I dump to a file for test.)
    fout = fopen("output.dat", "wb"); // the file to write out the decrypted text to file.
    uint8_t *ctext = (uint8_t *) malloc(count); // alloc to meet our need.
    uint8_t *ptext = (uint8_t *) malloc(count);


    if (fp==NULL) {
        perror ("Error opening file");
    }
    else {
        // count2 is the real bytes count that program read out, but should be same as "count".
        count2 = fread(ctext, 1, count, fp);
    printf ("Total number of bytes read: %d\n", count2);

    const uint8_t *s = "\x51\xF3\x0F\x11\x04\x24\x6A\x00"; // it's a magic, you know.

    ICE_KEY *ik = ice_key_create(0); // init the key
    ice_key_set(ik, s); // set the key

    long cuts = count2/8;
    while (cuts--){
        ice_key_decrypt(ik, ctext, ptext); // key, in (encrypted text), out (decrypted text)
        ctext +=8;
        ptext +=8;
    }

    ptext -= count2; // reset the pointer back to the begining.

    fwrite(ptext, 1, count, fout);
    fclose(fout);
    fclose(fp);
}
This is gold! I'm re-making all my tools to use that. I've always wanted to know how to do exactly that.
Maybe you can give me a hand understanding those 256000 bytes that they simply don't make any sense to me.
Thanks for the code, again.
 

Miau Lightouch

Potential Patron
Joined
Dec 13, 2016
This is gold! I'm re-making all my tools to use that. I've always wanted to know how to do exactly that.
Maybe you can give me a hand understanding those 256000 bytes that they simply don't make any sense to me.
Thanks for the code, again.
that's help you? awesome.
i'm glad you enjoy it.

CB in Taiwan would end in next wed, so I will take a look for that 256000 bytes after cb end.
before the end, I want to play this game first.
 

HappyWaff1e

Potential Patron
Joined
Jun 20, 2016
anyone know the "pbw_00_??_XXXX" file for the Christmas outfit for tamer?
mainly the main outfit but the shoes and helm would be nice too :D
 

HappyWaff1e

Potential Patron
Joined
Jun 20, 2016
Dont worry found it :P
its pbw_10_ub_0011.pac (upper body), pbw_10_lb_0011.pac (lower body), pbw_10_foot_0011.pac (foot) and pbw_10_hel_0011.pac (helmet)
 

Shadowtrance

Potential Patron
Joined
Jul 27, 2016
Is it possible to extract items from a specific path with file extractor?
For example if i wanted all item/weapon/armor icons from ui_texture\icon\new_icon\06_pc_equipitem\00_common and the subfolders, would that be possible? Rather than extracting everything...
 

Miau Lightouch

Potential Patron
Joined
Dec 13, 2016
the first 4 bytes you call "DUMMY" means "client version", and updater check this number every time.
you can check the latest version, just pickup the URI from service.ini and append "client_version", then paste in browser.

ex.
http://dn.blackdesert.com.tw/UploadData/client_version (<-this is Taiwan version)

first line is latest client version, but second line still need more research.

it can decide to recover backup or not.
 

Miau Lightouch

Potential Patron
Joined
Dec 13, 2016
and... the pad00000.meta structure changed or your document wrong?
the structure in bms script can't match your explain.
each folder use reading order instead of FOLDER_NUM in folder name block to match each FOLDER_NUM of fileblock.

maybe the FOLDER_NUM, SUBFOLDER_COUNT in folder name block is for other purpose?
 
K

kinami37

hello, i just found this and thought it could help me fix BDO graphic issues (the grass pop in and low quality shadows)

Sadly after extracting all .xml and giving them all a quick look,
i didnt find anything :(

Anyone have any information for me?

Anyone working on something like this? where would I need to look for that kind of stuff.

/edit

also any idea where to find grass / environment textures?

grass texture would be important

/edit got grass texture so nvm.

But what to do with .Luac files?
 
Last edited by a moderator:

Kitty Ears

Swell Supporter
Joined
Apr 13, 2016
hello, i just found this and thought it could help me fix BDO graphic issues (the grass pop in and low quality shadows)

Sadly after extracting all .xml and giving them all a quick look,
i didnt find anything :(

Anyone have any information for me?

Anyone working on something like this? where would I need to look for that kind of stuff.

/edit

also any idea where to find grass / environment textures?

grass texture would be important

/edit got grass texture so nvm.

But what to do with .Luac files?

Pop in and shadow quality are not something I think can be fixed with mods. It is something caused by the engine. Te developers have mentioned it a few times. It is something they are supposedly working on... but have yet to improve. :(
 

Miau Lightouch

Potential Patron
Joined
Dec 13, 2016
I had re-wrote the meta injector, need some one test it. ( the cb in Taiwan is already end)

but it would be a small different between meta injector.

1. just place mod file in Root folder
2. extract this program in Root folder
3. before open the official launcher, run "bdp.exe" and follow the instruction on the screen.
4. when launcher patch finished, press any key to continue "bdp.exe"
5. when you saw the patch result, press any key to exit, and start the game.

if it doesn't work,
1. set "emulate = false" in "BDP_BACKUP\configure.txt" and try again.
2. or restore "BDP_BACKUP\pad00000.meta" to "Paz\pad00000.meta" and report this program doesn't work.
 

Attachments

bdp_01.zip
56.7 KB · Views: 196

Kitty Ears

Swell Supporter
Joined
Apr 13, 2016
I had re-wrote the meta injector, need some one test it. ( the cb in Taiwan is already end)

but it would be a small different between meta injector.

1. just place mod file in Root folder
2. extract this program in Root folder
3. before open the official launcher, run "bdp.exe" and follow the instruction on the screen.
4. when launcher patch finished, press any key to continue "bdp.exe"
5. when you saw the patch result, press any key to exit, and start the game.

if it doesn't work,
1. set "emulate = false" in "BDP_BACKUP\configure.txt" and try again.
2. or restore "BDP_BACKUP\pad00000.meta" to "Paz\pad00000.meta" and report this program doesn't work.

Curious, what is your version suppose to do differantly? Thanks :)
 

Miau Lightouch

Potential Patron
Joined
Dec 13, 2016
my goal is let meta injector can load *ALL* file, not only 3d model and texture, especially the sound mod like japanese voice pack. And I merge external tool that original meta injector used into my program, to improve performance, all localization version compatible, and code in my way.

Actually, do the same thing as meta injector do, but I think it's a minor improvement.

TL;DR:
1. real parse the index
2. no dependency need
3. all version compatible *technically*
4. fewer line of code
 

Users who are viewing this thread

Top


Are you 18 or older?

This website requires you to be 18 years of age or older. Please verify your age to view the content, or click Exit to leave.