Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.

Risen 3 (.bin)

Featured Replies

  • Author
  • Localization

ponaromixxx, posted Sun Oct 12, 2014 1:13 pm (872)


please help with the unpacking w_strings.bin of the Risen 3
  • Author
  • Localization

ponaromixxx, posted Sun Oct 12, 2014 7:07 pm (885)


how to decode files .csv ????
  • Author
  • Localization

aluigi, posted Mon Oct 13, 2014 1:08 am (889)


I have no idea :)
  • Author
  • Localization

ponaromixxx, posted Mon Oct 13, 2014 10:03 am (890)


?? ???? ??? ????? ????? ???????? ??????????
  • Author
  • Localization

aluigi, posted Mon Oct 13, 2014 11:37 am (892)


If you want to edit the files use a hex editor, it's the easiest way.
  • Author
  • Localization

ponaromixxx, posted Mon Oct 13, 2014 2:18 pm (894)


? ??? ?????? Hex editor ?? ??????? ?? ?? ???????? ?? ?
  • Author
  • Localization

ponaromixxx, posted Thu Oct 16, 2014 10:40 am (939)


I also have no idea
  • Author
  • Localization

michalss, posted Sun Oct 19, 2014 8:22 am (1044)


Some research :)

Code:
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;
}
  • Author
  • Localization

ponaromixxx, posted Sun Oct 19, 2014 8:52 am (1048)


And you can use this script ???
  • Author
  • Localization

Ekey, posted Sun Oct 19, 2014 9:03 am (1050)


It's not script, just structure of localization file for devs.
  • Author
  • Localization

aluigi, posted Sun Oct 19, 2014 3:38 pm (1059)


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:
#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
  • Author
  • Localization

ponaromixxx, posted Mon Oct 20, 2014 11:02 am (1085)


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:
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
  • Author
  • Localization

aluigi, posted Tue Oct 21, 2014 10:47 am (1099)


@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.
  • Author
  • Localization

michalss, posted Thu Oct 23, 2014 10:26 am (1148)


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.
  • Author
  • Localization

michalss, posted Mon Nov 10, 2014 12:52 pm (1695)


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
  • Author
  • Localization

bioshock, posted Tue Jan 05, 2016 4:54 pm (10727)


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!
  • Author
  • Localization

bioshock, posted Sat Mar 05, 2016 6:26 pm (11800)


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!!!??????
  • Author
  • Localization

bioshock, posted Sun Mar 13, 2016 4:24 pm (11950)


up!
  • Author
  • Localization

NicoDE, posted Wed Jan 31, 2018 11:08 pm (32088)


It took a while :)

The source code can be found on GitHub and Windows binaries at the World of Risen forum.
Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.