Risen 3 (.bin)

How to translate the files of a game
ponaromixxx
Posts: 176
Joined: Tue Sep 30, 2014 5:59 pm

Risen 3 (.bin)

Post by ponaromixxx »

please help with the unpacking w_strings.bin of the Risen 3
ponaromixxx
Posts: 176
Joined: Tue Sep 30, 2014 5:59 pm

Re: Risen 3 (.bin)

Post by ponaromixxx »

aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Risen 3 (.bin)

Post by aluigi »

ponaromixxx
Posts: 176
Joined: Tue Sep 30, 2014 5:59 pm

Re: Risen 3 (.bin)

Post by ponaromixxx »

how to decode files .csv ????
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Risen 3 (.bin)

Post by aluigi »

I have no idea :)
ponaromixxx
Posts: 176
Joined: Tue Sep 30, 2014 5:59 pm

Re: Risen 3 (.bin)

Post by ponaromixxx »

Да емае как интересно вообще раскодировать возможно??
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Risen 3 (.bin)

Post by aluigi »

If you want to edit the files use a hex editor, it's the easiest way.
ponaromixxx
Posts: 176
Joined: Tue Sep 30, 2014 5:59 pm

Re: Risen 3 (.bin)

Post by ponaromixxx »

Я его пробовал Hex editor не поможет он не понимает что там
ponaromixxx
Posts: 176
Joined: Tue Sep 30, 2014 5:59 pm

Re: Risen 3 (.bin)

Post by ponaromixxx »

I also have no idea
michalss
Posts: 320
Joined: Sun Aug 10, 2014 12:49 pm

Re: Risen 3 (.bin)

Post by michalss »

Some research :)

Code: Select all

gar_header {
    uint8_t  magic1[4];  // "GAR5"
    uint32_t unknown;    // 00000020 sizeof(stb_header)?
    uint8_t  magic2[4];  // "STB\x05"
}
stb_header {
    uint32_t source_count;
    uint32_t unknown;   // 00000000
    uint32_t column_count;
    uint32_t row_count;
    uint32_t source_table_offset;
    uint32_t column_names_offset;
    uint32_t column_table_offset;
    uint32_t id_table_offset;
}
// @stb_header.source_table_offset
source_table[stb_header.source_count] {
    filepath {
        uint16_t length;
        uint8_t  buffer[length];  // char[], not 0-terminated
    }
    filetime {  // swapped FILETIME (rounded)
        uint32_t hi;
        uint32_t lo;
    }
}
// @stb_header.id_table_offset
id_table {
    uint32_t size;  // stb_header.row_count * sizeof(uint32_t)
    uint32_t offset;
    // @id_table.offset
    uint32_t ids[stb_header.row_count];  // DJB2 hash?
}   
// @stb_header.column_names_offset
column_names {
    names[stb_header.column_count] {
        uint32_t size;    // includes terminating 0
        uint32_t offset;  // buffer
    }
    uint8_t buffer[];  // char[], 0-terminated
}
string_table[stb_header.column_count] {
    // @column_table[].string_table_offset
    strings {
        int32_t  seq_start[stb_header.row_count];  // index into sequences, -1 = empty
        uint16_t sequences[];                      // indices into symbols, 0-terminated
    }
    // @column_table[].symbol_table_offset
    symbols[] {
        uint16_t child;   // index into symbols
        uint16_t symbol;  // wchar_t
    }
}
// @stb_header.column_table_offset
column_table[stb_header.column_count] {
    uint32_t string_table_size;
    uint32_t string_table_offset;
    uint32_t symbol_table_size;
    uint32_t symbol_table_offset;
}
ponaromixxx
Posts: 176
Joined: Tue Sep 30, 2014 5:59 pm

Re: Risen 3 (.bin)

Post by ponaromixxx »

And you can use this script ???
Ekey
Posts: 1383
Joined: Sat Aug 09, 2014 2:34 pm

Re: Risen 3 (.bin)

Post by Ekey »

It's not script, just structure of localization file for devs.
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Risen 3 (.bin)

Post by aluigi »

Just for fun, the following is a simple adapting of the information provided by michalss to bms (yeah quickbms can handle many C and pseudo-code structures):

Code: Select all

#gar_header {
    uint8_t  magic1[4];  // "GAR5"
    uint32_t unknown;    // 00000020 sizeof(stb_header)?
    uint8_t  magic2[4];  // "STB\x05"

#stb_header {
    uint32_t source_count;
    uint32_t unknown;   // 00000000
    uint32_t column_count;
    uint32_t row_count;
    uint32_t source_table_offset;
    uint32_t column_names_offset;
    uint32_t column_table_offset;
    uint32_t id_table_offset;

// @stb_header.source_table_offset
#source_table[stb_header.source_count] {
goto source_table_offset
for i = 0 < source_count
    #filepath {
        uint16_t length;
        uint8_t  buffer[length];  // char[], not 0-terminated
    #filetime {  // swapped FILETIME (rounded)
        uint32_t hi;
        uint32_t lo;
next i

// @stb_header.id_table_offset
#id_table {
goto id_table_offset
    uint32_t size;  // stb_header.row_count * sizeof(uint32_t)
    uint32_t offset;
    // @id_table.offset
    uint32_t ids[row_count];  // DJB2 hash?

// @stb_header.column_names_offset
#column_names {
goto column_names_offset
    #names[stb_header.column_count] {
for i = 0 < column_count
        uint32_t size;    // includes terminating 0
        uint32_t offset;  // buffer
next i
    uint8_t *buffer #[];  // char[], 0-terminated

// @stb_header.column_table_offset
goto column_table_offset
#column_table[stb_header.column_count] {
for i = 0 < column_count
    uint32_t string_table_size;
    uint32_t string_table_offset;
    uint32_t symbol_table_size;
    uint32_t symbol_table_offset;

    savepos TMP
#string_table[stb_header.column_count] {
    // @column_table[].string_table_offset
    goto string_table_offset
    #strings {
        int32_t  seq_start[row_count];  // index into sequences, -1 = empty
        do
            uint16_t sequences  #[];                      // indices into symbols, 0-terminated
        while sequences != 0

    // @column_table[].symbol_table_offset
    goto symbol_table_offset
    #symbols[] {
        uint16_t child;   // index into symbols
        uint16_t symbol;  // wchar_t
    #}

next i
ponaromixxx
Posts: 176
Joined: Tue Sep 30, 2014 5:59 pm

Re: Risen 3 (.bin)

Post by ponaromixxx »

But look what I got, I mixed the first and the last script code and quickbms campaign realized that it is in the archive on the command line issued by how many languages ​​packed well, or reaped here who can finalize ???? if possible !!!

Code: Select all

idstring "GAR5"
get DUMMY long
getdstring STB_SIGN 3
get VER byte
get FILES long
get ZERO long
get STRINGS long
get DUMMY long
get NAME_OFF long
get STR_OFF long
get INFO_OFF long
get DATA_OFF long

goto STR_OFF
for i = 0 < STRINGS
    get STRSZ long
    get OFFSET long

    savepos TMP
    goto OFFSET
    getdstring STR STRSZ
    goto TMP
    print "%STR%"
next i

goto NAME_OFF
for i = 0 < FILES
    get NAMESZ short
    getdstring NAME NAMESZ
    get TSTAMPH long
    get TSTAMPL long
    putarray 0 i NAME
next i

goto INFO_OFF
for i = 0 < FILES
    get SIZE long
    get OFFSET long
    getarray NAME 0 i
    log NAME OFFSET SIZE
next i


#stb_header {
    uint32_t source_count;
    uint32_t unknown;   // 00000000
    uint32_t column_count;
    uint32_t row_count;
    uint32_t source_table_offset;
    uint32_t column_names_offset;
    uint32_t column_table_offset;
    uint32_t id_table_offset;

// @stb_header.source_table_offset
#source_table[stb_header.source_count] {
goto source_table_offset
for i = 0 < source_count
    #filepath {
        uint16_t length;
        uint8_t  buffer[length];  // char[], not 0-terminated
    #filetime {  // swapped FILETIME (rounded)
        uint32_t hi;
        uint32_t lo;
next i

// @stb_header.id_table_offset
#id_table {
goto id_table_offset
    uint32_t size;  // stb_header.row_count * sizeof(uint32_t)
    uint32_t offset;
    // @id_table.offset
    uint32_t ids[row_count];  // DJB2 hash?

// @stb_header.column_names_offset
#column_names {
goto column_names_offset
    #names[stb_header.column_count] {
for i = 0 < column_count
        uint32_t size;    // includes terminating 0
        uint32_t offset;  // buffer
next i
    uint8_t *buffer #[];  // char[], 0-terminated

// @stb_header.column_table_offset
goto column_table_offset
#column_table[stb_header.column_count] {
for i = 0 < column_count
    uint32_t string_table_size;
    uint32_t string_table_offset;
    uint32_t symbol_table_size;
    uint32_t symbol_table_offset;

    savepos TMP
#string_table[stb_header.column_count] {
    // @column_table[].string_table_offset
    goto string_table_offset
    #strings {
        int32_t  seq_start[row_count];  // index into sequences, -1 = empty
        do
            uint16_t sequences  #[];                      // indices into symbols, 0-terminated
        while sequences != 0

    // @column_table[].symbol_table_offset
    goto symbol_table_offset
    #symbols[] {
        uint16_t child;   // index into symbols
        uint16_t symbol;  // wchar_t
    #}

next i
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Risen 3 (.bin)

Post by aluigi »

@michalss
You already did something on the format, do you want to finish the work on the script?
I don't know what should be the output because it's not a file to extract.
michalss
Posts: 320
Joined: Sun Aug 10, 2014 12:49 pm

Re: Risen 3 (.bin)

Post by michalss »

i wont be able to finnish it, coz it is not my work. I allready ask for help but that person left the scene and he is not interested anymore about R3 game.
tehasut
Posts: 5
Joined: Sat Nov 01, 2014 11:02 am

Re: Risen 3 (.bin)

Post by tehasut »

There's a w_strings.bin to csv tool.

http://forum.worldofplayers.de/forum/th ... st23606794
michalss
Posts: 320
Joined: Sun Aug 10, 2014 12:49 pm

Re: Risen 3 (.bin)

Post by michalss »

There is also complte source for convertor from bin to CSV wirtten in C++, for me i dont know much C++ but for someone who got skill this will be easy enought to write repacker :) or is someone make complete template for 010 or QBMS ill make repacker from there :D

https://dl.dropboxusercontent.com/u/38234344/r3l10n.zip
bioshock
Posts: 8
Joined: Tue Jan 05, 2016 4:40 pm

Re: Risen 3 (.bin)

Post by bioshock »

tehasut wrote:There's a w_strings.bin to csv tool.

http://forum.worldofplayers.de/forum/th ... st23606794




Hi, i need help with the packing w_strings.csv to w_strings.bin of the Risen 3,
or any edit way to edit this string file,So long he did not do it
Thanks!
bioshock
Posts: 8
Joined: Tue Jan 05, 2016 4:40 pm

Re: Risen 3 (.bin)

Post by bioshock »

bioshock wrote:
tehasut wrote:There's a w_strings.bin to csv tool.

http://forum.worldofplayers.de/forum/th ... st23606794




Hi, i need help with the packing w_strings.csv to w_strings.bin of the Risen 3,
or any edit way to edit this string file,So long he did not do it
Thanks!


There is no way!!!??????