Page 1 of 2 12 LastLast
Results 1 to 10 of 20

Thread: Yserbius file format documentation

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1

    Question Yserbius file format documentation

    I've spent my evenings this week figuring out the file formats. I've had success deciphering the easy ones: the palette files (TITLPAL, PALETTE), image files (IMAGES, MAIN.TSU, TITLIMG, and WALLS), and text files (HELP and RESOURCE.040). I have my suspicions about what other files contain (most of the RESOURCE files are map scripts, RESOURCE.035 is map data, RESOURCE.038 items, etc.) and I'd like to touch base with other people who have worked on the file formats before I spend hours duplicating someone else's effort. Stepping through DOS assembly is fun, but it's also a huge time sink.

    I saw PatchX's discussions from back in 2006 about reading the map scripts, and I've emailed him, but I don't know if he still checks his yserbius@gmail.com address. If anyone is in touch with him, I'd really appreciate it if you would connect us! Likewise, if you or anyone you know has spent time playing with the game formats, I'd appreciate the chance to share notes.

    In the meantime, I'm going to continue working on the data formats. I'll post my results in this thread.
    Last edited by ZaneDubya; 06-23-2016 at 06:24 PM.

  2. #2
    I should be studying for the bar - but hey, that's 6 weeks away! Plenty of time to spend on retro data formats.

    I had some success in extracting item data from RESOURCE.038. The file is very lightly scrambled: each 16bit value is shifted left 6 bits, rolling over to the right without the carry bit. Once decrypted, each item entry is 46 bytes. The first 24 bytes is an ASCII name string, followed by 2b icon index, followed by 2b item type (0x0C is quest items, at least). Not sure what the rest of the data is, and it looks like the buy/sell price data is in another file.

    I am uploading the binary item data here in the hopes that someone might want to go through it and figure out what the other data in each item entry means.

    https://github.com/ZaneDubya/Yserbiu...ee/master/Data
    Attached Files Attached Files
    Last edited by ZaneDubya; 06-15-2016 at 01:45 AM.

  3. #3
    Found the price data in RESOURCE.039 and uploaded it to https://github.com/ZaneDubya/Yserbiu...ee/master/Data. The format is very simple: 2b buy price, followed by 2b sale price. 1024 bytes. I'm pretty sure the rest of RESOURCE.039 is more item data, but that will have to wait - it's back to studying for the bar for me.
    Last edited by ZaneDubya; 06-14-2016 at 11:48 PM.

  4. #4
    Making some progress on the map format! I've figured out walls and doors and now I'm working on events.
    Screen Shot 2016-06-16 at 10.35.57 AM.jpg

  5. #5
    The map files (from RESOURCE.035) are being successfully read, and I've posted renderings of the maps at https://github.com/ZaneDubya/Yserbiu...ee/master/Maps.

    And I know what every value in that file is, with the exception of the final offset (in the bottom right of the following image):

    Not quite sure what that is; it's likely the index of a per-level test that is run when attempting to exit the tile or when performing an action on the tile.

  6. #6
    Having decoded the map files, I'm now working on map scripting. These are the scripts associated with Map 1: Dungeon Entrance. While not all the functions have been decoded yet, I've made good progress:
    Code:
    TOMINES_01:
    0000                          BEGIN
    0003                          GoMap(03, FD, 02, 01)
    001E                          RETURN
    
    TOTREAS_02:
    0000                          BEGIN
    0003                          GoMap(02, 10, 04, 01)
    001E                          RETURN
    
    TOSOLDQU_03:
    0000                          BEGIN
    0003                          GoMap(01, 0F, 06, 01)
    001E                          RETURN
    
    EXITDUNG_04:
    0000                          BEGIN
    0003                          ExitDungeon()
    000B                          RETURN
    
    DOORMESA_05:
    0000                          BEGIN
    0003                          ShowMessage(03FC) = The gateway leads to THE MINES.
    0010                          RETURN
    
    DOORMESB_06:
    0000                          BEGIN
    0003                          ShowMessage(041C) = The gateway leads to THE HALL OF DOORS.
    0010                          RETURN
    
    DOORMESC_07:
    0000                          BEGIN
    0003                          ShowMessage(0444) = The gateway leads to THE SOLDIERS  QUARTERS.
    0010                          RETURN
    
    DOORMESD_08:
    0000                          BEGIN
    0003                          ShowMessage(0471) = The gateway is the DUNGEON EXIT.
    0010                          ax = CheckState2(02, 6A)
    0023 74 1A                    jz 0x3f
    0025                          ShowMessage(0492) = Hail, conquering HERO OF YSERBIUS!
    0032                          ShowMessage(04B5) = All of Twinion bows to your prominence!!
    003F                          RETURN
    
    TELEPORT_09:
    0000                          BEGIN
    0003                          GoMap(00, 5D, 01, 33)
    001D                          RETURN
    
    TELEMESS_0A:
    0000                          BEGIN
    0003                          ShowMessage(04DE) = There is a teleport in the west wall.
    0010                          RETURN
    
    DOORMESS_0B:
    0000                          BEGIN
    0003                          ax = CheckLevel(0014)
    0011 75 03                    jnz 0x16
    0013 E9 09 01                 jmp 0x11f
    0016                          ax = CheckState(02, 78, 01)
    002A 75 2E                    jnz 0x5a
    002C                          ShowMessage(0504) = This room contains the gateway to the Labyrinth.
    0039                          ax = SetExitability(01)
    0044                          ax = GetNextTile(ax)
    004C                          Move(ax, stk[0], stk[1])
    0057 E9 C3 00                 jmp 0x11d
    005A                          ax = HasItem(FB)
    0068 75 03                    jnz 0x6d
    006A E9 A3 00                 jmp 0x110
    006D                          ShowMessage(0535) = The Thieves' Key unlocks this door!
    007A                          ShowMessage(0559) = This room contains the gateway to the Labyrinth.
    0087                          SetState(02, 78, 01)
    009C                          RemoveItem(FB)
    00A8                          RemoveItem(D2)
    00B4                          RemoveItem(D3)
    00C0                          RemoveItem(D9)
    00CC                          RemoveItem(E1)
    00D8                          RemoveItem(E2)
    00E4                          RemoveItem(F8)
    00F0                          ax = SetExitability(01)
    00FB                          ax = GetNextTile(ax)
    0103                          Move(ax, stk[0], stk[1])
    010E EB 0D                    jmp 0x11d
    0110                          ShowMessage(058A) = The Thieves' Key is needed to unlock this door.
    011D EB 37                    jmp 0x156
    011F                          ShowMessage(05BA) = The Thieves' Key is needed to unlock this door.
    012C                          ShowMessage(05EA) = Only heroes of the twentieth level or higher may venture beyond this door.
    0139                          ax = SetExitability(00)
    0143                          ax = GetNextTile(ax)
    014B                          Move(ax, stk[0], stk[1])
    0156                          RETURN
    
    PRTYPORT_0C:
    0000                          BEGIN
    0003                          ax = CheckLevel(0014)
    0011 74 0F                    jz 0x22
    0013                          ShowMessage(0635) = Good Journeys, brave hero.
    0020 EB 27                    jmp 0x49
    0022                          ShowMessage(0650) = Only heroes of the twentieth level or higher may venture beyond this door.
    002F                          GoMap(00, 02, 01, 01)
    0049                          RETURN
    
    NOJOIN_0D:
    0000                          BEGIN
    0003                          TileIsNoJoinArea()
    000B                          RETURN
    
    03FC: The gateway leads to THE MINES.
    041C: The gateway leads to THE HALL OF DOORS.
    0444: The gateway leads to THE SOLDIERS  QUARTERS.
    0471: The gateway is the DUNGEON EXIT.
    0492: Hail, conquering HERO OF YSERBIUS!
    04B5: All of Twinion bows to your prominence!!
    04DE: There is a teleport in the west wall.
    0504: This room contains the gateway to the Labyrinth.
    0535: The Thieves' Key unlocks this door!
    0559: This room contains the gateway to the Labyrinth.
    058A: The Thieves' Key is needed to unlock this door.
    05BA: The Thieves' Key is needed to unlock this door.
    05EA: Only heroes of the twentieth level or higher may venture beyond this door.
    0635: Good Journeys, brave hero.
    0650: Only heroes of the twentieth level or higher may venture beyond this door.
    Last edited by ZaneDubya; 06-19-2016 at 03:44 PM.

  7. #7
    This is great work! I'll admit that I've started gaming in Elder Scrolls Online and that's really sapped my interest for any other game right now!

  8. #8
    @Reonis I've heard a good deal about ESO, but have not played it.

    I've completed disassembling the Yserbius map scripts - there are two or three functions remaining that I do not know the purpose of, but I can at least recognize the signatures of these. I've uploaded all the disassembled scripts to https://github.com/ZaneDubya/Yserbiu...ee/master/Maps.

    So here's where I am right now: I have extracted and deciphered the maps, map scripts, quest state flags, graphics, and palettes. This is exciting, but I'm still missing the meat of the game: combat statistics (for monsters, items, spells, skills, etc), character progression statistics (dexterity, hits, mana, skill points, etc at each level for each combination of class and guild), item data, and portraits. I'll keep poking around in the files, but it would be really helpful to know if anyone else has already figured these things out.
    Last edited by ZaneDubya; 06-20-2016 at 04:34 AM.

  9. #9
    I've identified the character progression statistics in RESOURCE.039. X-Elf's post from 2011, containing XP data for the first ten levels for all guilds, was extremely helpful in both locating and verifying the data. While fishing around in the same file, I discovered that it also contains the initial statistics for each combination of race and guild! So, with a little parsing and pattern matching to figure out what the data actually holds (for example, which fields are strength, which are skills, etc), I should have character progression 100% figured out.

    I also identified what I believe to be either monster or encounter statistics in RESOURCE.036! I'm nowhere near ready to start reading this file, but that's another big step forward.

    Item data is in RESOURCE.038. Again, not sure exactly how the data in this file maps to the data you see in the game, but at least I know what the file is.

    There are only three kinds of data in the resource files that I have not yet identified: 2252b at the end of RESOURCE.036, 300 6 byte structs in RESOURCE.037, and 313 8b structs in RESOURCE.037. Once I have identified how this data is used, I'll settle into attempts at deciphering. I'd really appreciate the help of any Yserbius veterans in this task, if we still have any active on the board.

  10. #10
    I figured out how to unscramble RESOURCE.037 properly - the file has 300x6b structs that I don't yet understand, but the following 288 structs are spell data! For each 8b entry, the format is 2b mana cost, 2x1b flags of some variety, and then 2x2b offsets (for a damage causing spell, the offset is damage. Not sure about other types yet!).

    What's even more interesting is - viewing the raw data - it appears that a level 2 control spell is exactly equal in effectiveness to a level 1 control spell (same offsets, but more mana!), and you can achieve the maximum control power (offset 0x05) at level 11 control and only 100 mana, which is as effective as level 12 control at 250 mana.

    Please note that I am only spit-balling here, based on the data I'm seeing in the resource files. I may well be wrong. Choose not to max out your spells at your own peril. Injuries, maiming, and perhaps even your untimely demise may be the result of listening to these maunderings. Your faithful party members may abandon your corpse!
    Last edited by ZaneDubya; 06-21-2016 at 12:06 PM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •