Black Desert Online Modding Tools (3 Viewers)

Garkin

Avid Affiliate
Joined
Dec 28, 2016
What are you using to extract the file before using it with your tool?
Not sure what you mean.
Language data are stored here: <game folder>\ads\languagedata_??.loc. I made tools to convert .loc files to .txt and back, project page is here: AMGarkin/BDOcrypt

I'm using it as a part of my other project AMGarkin/BDO-GuildQuestMod - it will open .loc file, replace texts used for guild quests, so guild officer can see objectives before he accept it.

preview1.jpg

preview2.jpg
 

UndercoverPervert

Content Creator
Joined
Aug 9, 2016
Aha, so it's not related to the game files.
The .loc files in the game's archives are still double encrypted (every file is encrypted, then there's a header check to see if it's compressed to run it through decompression if it is, and for loc files only you need to decrypt with ICE again, that last part is an exception for those localization files, it's currently not handled by the library and I'm not sure if it would be, it is however handled by a tool I'm working on).

They did replace the large spreadsheet-like file they used though with smaller BSS files for every sheet that file used to have, need to figure out how to convert those.
 
Last edited:

UndercoverPervert

Content Creator
Joined
Aug 9, 2016
After checking the extracted bss files with a hex editor I did see some readable text, so the files are to be extracted like any other, I've implemented your conversion code into the tool I'm working on, it works, but the result isn't very clean, a bunch of nulls and other unicode chars inbetween some strings, I'm not seeing anything in your code to handle those so I'm guessing the conversion of the loc files has the same "issue". I'd assume those might be some characters with special behavior in-game like setting colors, showing certain icons, etc, wouldn't know for sure without testing.
 

Garkin

Avid Affiliate
Joined
Dec 28, 2016
After checking the extracted bss files with a hex editor I did see some readable text, so the files are to be extracted like any other, I've implemented your conversion code into the tool I'm working on, it works, but the result isn't very clean, a bunch of nulls and other unicode chars inbetween some strings, I'm not seeing anything in your code to handle those so I'm guessing the conversion of the loc files has the same "issue". I'd assume those might be some characters with special behavior in-game like setting colors, showing certain icons, etc, wouldn't know for sure without testing.
BSS files stored in PAZ archives have different format. I belive that they are much closer to old "datasheets.bexcel" file, so there should be header with information like column/row count and each cell should have information about content lenght and maybe cell type.
 

Garkin

Avid Affiliate
Joined
Dec 28, 2016
BSS files stored in PAZ archives have different format. I belive that they are much closer to old "datasheets.bexcel" file, so there should be header with information like column/row count and each cell should have information about content lenght and maybe cell type.
For my Guild Quest Mod I need to know what are conditions to finish quests (how many mobs to kill or how many resources to gather). It was originally in database file "datasheets.bexcel", but now it is in "guildquest.bss". I'm able to read all data including questID, condition script, itemID for rewards etc, but it still not complete. If you're interested just in reading and not modifying, here is guldquest.bss template for 010 Editor:
Code:
LittleEndian();

typedef struct {
    SetBackColor( cDkAqua );
    int64 len;
    SetBackColor( cLtGreen );
    wchar_t text[len] <optimize=false>;
} TEXT;

typedef struct {
    int32 val1;
    char  val2;
    int32 val3;

    if (val3 == 0) {
        int32 val4;
        int32 val5;
    }

    int32 val6;

    if (val6 != 0) {
        int32 val7;
        int32 val8;
    }

    int32 val9;
    int32 val10;

    if (val6 == 0) {
        if (val9 == 2) {
            int32 val11;
        } else if (val9 == 3) {
            int32 val11;
            int32 val12;
        } else {
            if (val9 != 0 && val9 != 1) {
                Printf( "Unknown val9 (%d)\n", val9);
            }
        }
    } else {
        int32 val11;
        char  val12;
    }
} BINDATA;

typedef struct {
    SetBackColor( cLtBlue );
    int32 costItemID; // 0x00000001 = itemID: 1 = silver coins
    SetBackColor( cDkBlue );
    int32 costItemCount1; // 0x00007530 = 30000
    SetBackColor( cNone );
    BINDATA unknownData[1] <optimize=false>;
} COST;

typedef struct {
    SetBackColor( cLtBlue );
    int32 rewardItemID1; // 0x0000012E = itemID: 302 = Guild Skill Experience (1000)
    SetBackColor( cDkBlue );
    int32 rewardItemCount1; //0x00000001 = 1
    SetBackColor( cNone );
    BINDATA unknownData[1] <optimize=false>;
} REWARDS;

int CalcNumRewards(){
    local int counter = 0;
    local int x = 0;
    local int64 currPos = FTell();

    while (true) {
        x = ReadInt(currPos + counter * 50 + 25);
        counter++;
        if (x == 0) {
            break;
        }
    }
    return counter;
}

typedef struct {
    //script
    SetBackColor( cLtBlue );
    int32 questID; // 0x000000C9 = 201 = http://bdocodex.com/us/guildquest/201/
    TEXT conditionScript[1] <optimize=false>; // gatheritem(4006,0,700);
    TEXT conditionText[1] <optimize=false>; // Gather Rough Stone;
    SetBackColor( cNone );
    int16 unknownVal1; // 0x0001 ??

    //texts
    TEXT description[2] <optimize=false>;
    TEXT iconPath[1] <optimize=false>;
    SetBackColor( cNone );
    int32 unknownVal2; // 0x00000078 = 120 ??

    //cost
    COST cost[1] <optimize=false>;

    //rewards
    local int numRewards = CalcNumRewards();
    REWARDS rewards[numRewards] <optimize=false>;
} QUEST;

SetBackColor( cLtBlue );
int32 questCount;

QUEST quest[questCount] <optimize=false>;
 

Garkin

Avid Affiliate
Joined
Dec 28, 2016
Do you have a general struct for those bss files or is every file different?
It seems that each bss file is different.
Unfortuantelly I don't have backup of old datasheets.bexcel. There should be hint what is the meaning of unidentified numbers in bss files.
 

Kurylenko

Avid Affiliate
Joined
Jul 18, 2013
Trying to convert Mystic's Banha outfit to DAE but I keep getting these error messages no matter which female bones I try.

31777bb8e6a28b002925646691d7c010.png
 
R

rakka1988

It seems that each bss file is different.
Unfortuantelly I don't have backup of old datasheets.bexcel. There should be hint what is the meaning of unidentified numbers in bss files.
here is a copy from july 2017: MEGA

btw .loc file has been updated with new encryption this week, any leads?
 

Garkin

Avid Affiliate
Joined
Dec 28, 2016
here is a copy from july 2017: MEGA

btw .loc file has been updated with new encryption this week, any leads?
Hm, in which version it was updated? NA/EU version is still the same (AMGarkin/BDOcrypt works correctly).

EDIT: BSS files in PAZ archives have different format now, but LOC files are still the same.
 
Last edited:

Pouzo

Potential Patron
Joined
Oct 28, 2017
Hello, does anyone have a method for reading the BSS files located in gamecommondata\binary\{localization} ?
 

Garkin

Avid Affiliate
Joined
Dec 28, 2016
Hello, does anyone have a method for reading the BSS files located in gamecommondata\binary\{localization} ?
All I can read are texts at the end of that BSS file - there is always:
1 byte type (0x00 = UTF-8, 0x01 = UTF-16)
4 bytes length in bytes
text
Example:
Code:
00-11 00 00 00-50 43 5F 56 43 45 5F 31 57 61 72 72 69 6F 72 5F 31
0x00 - text in UTF-8
0x00000011 - 17 bytes long
text = PC_VCE_1Warrior_1

Or:
Code:
01-3A 00 00 00-49 00 63 00 6F 00 6E 00 2F 00 51 00 75 00 65 00 73 00 74 00 2F 00 30 00 5F 00 47 00 75 00 69 00 6C 00 64 00 5F 00 43 00 6F 00 6D 00 62 00 61 00 74 00 2E 00 64 00 64-00 73 00
0x01 - text in UTF-16
0x0000003A - 58 bytes long
text = Icon/Quest/0_Guild_Combat.dds
(each character is stored in 2 bytes, so 29 characters, 58 bytes)
 

Pouzo

Potential Patron
Joined
Oct 28, 2017
Ah thanks, do you think you could make a simple way just to read the end of the bss files for now in a txt or something like this? I can see the end of the files in hex editor but its pretty hard to read, I've been using your BDOcrypt thank you for that.
 

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.