RSDK Unpacker

Discussion in 'Engineering & Reverse Engineering' started by Glitch, Dec 1, 2012.

  1. Glitch

    Glitch

    Tech Member
    162
    3
    18
    It seems that mediafire deleted my original rsdk unpacker links. The program has been requested so I'm reposting here:
    rsdkunpack
    Source
    I might get around to cleaning up my packer source and releasing that later.
     
  2. How about uploading them to the wiki? :P
     
  3. Sweet. :D Now to peek inside the rsdk file and see all the shiny objects.
     
  4. Azu

    Azu

    I must be stupid. Member
    RSDK unpacker? For the engine the was never released?
     
  5. Sappharad

    Sappharad

    Oldbie
    1,363
    30
    28
    It's just a repost of the Data.rsdk unpacker that he released last December to unpack Sonic CD.
     
  6. Xeeynamo

    Xeeynamo

    Member
    29
    1
    3
    London
    Swords of Calengal
    And now make Metal Sonic playable decently >:[
    http://www.youtube.com/watch?v=mbTM-B5yqLs&list=UU9sj8a4jADi20xRBLZfg5Pg&index=3
     
  7. Andrew75

    Andrew75

    Technical Artist Member
    1,958
    26
    28
    Project AXSX(Sonic Xtreme) + Misc Projects
    Some ideas.
    When metal jumps would love to see him do the electrocution attack.
    Spin dash for the jet attack. ( although it would be cool to be able to pull that off while running somehow.)
    running than rolling could also make a nice use for the electrocution attack animation.
     
  8. Xeeynamo

    Xeeynamo

    Member
    29
    1
    3
    London
    Swords of Calengal
    I was working long time ago on it, but I had some problems with collisions and I drop everything =\. The lastest "version" of animation kit supports all Sonic moveset for Metal Sonic, this thanks to a tool that I made for RSDK .ANI files
     
  9. Arique

    Arique

    How do I Sonic? Member
    Epic bump, but just asking for curiosity sake: Does this unpacker work with the Sonic 1 remake that was released today? Because I've tried everything and I'm having no luck.

    EDIT: Let me rephrase this a bit: Sonic CD's RSDK unpacks perfectly fine, but Sonic 1's RSDK refuses to unpack. Can we get an updated version that is compatible with Sonic 1?
     
  10. Cinossu

    Cinossu

    Administrator
    2,824
    14
    18
    London, UK
    Sonic the Hedgehog Extended Edition
    Ha ha, this was one of the first things I tried once I downloaded it; seems they've updated the format a bit. Until someone cracks it, we're out of luck.
     
  11. You-Are-Pwned

    You-Are-Pwned

    Member
    75
    8
    8
    From the first sight, the RSDK decryption algorithm is a different and a more complex one in Sonic 1, comparing to Sonic CD 2011.

    By the way, while looking for stuff in the binary of Sonic 1, I found this in the code. It may be related to decryption, but I'm not sure:

    Code (Text):
    1. /Users/Stephen/Desktop/sonic 1/05-10-13-international/Sonic1/Sonic1/RetroEngine/TextureLoader.c
     
  12. Sappharad

    Sappharad

    Oldbie
    1,363
    30
    28
    Here is a half-assed RSDKvB unpacker that I threw together in an hour:
    http://projects.sappharad.com/tools/RSDKvB_unpacker.zip

    It will unpack all of the files in a Data.rsdk that don't have the encryption flag set in the file table. Ogg vorbis files will be named with an .ogg extension, everything else with bin. Real filenames are not available at this time, because everyone is probably interested in the music files anyway.

    This is a command-line tool.

    RSDKvB file format. All numerical values little endian
    Header "RSDKvB" text
    0x6 - 16 bit number of files in archive
    0x8 - Start of files

    Files: (Each entry is 24 bytes)
    0x00-0x10 Filename "hash"
    0x10 - 32-bit offset of file in archive
    0x14 - 32-bit file size which must be & with 0x7FFFFFF. MSB is the encryption flag, if set file is encrypted.

    Enjoy. Feel free to point out any mistakes.
     
  13. Tanks

    Tanks

    Member
    1,030
    0
    16
    Wanted to look at the sprites as well, but this will do for now I guess. :v: Also I can confirm this works with the android release. Just remove the .xmf from Data.rsdk.
     
  14. You-Are-Pwned

    You-Are-Pwned

    Member
    75
    8
    8
    Thanks for the offset locations, I was also wondering about these.

    I'll see what I can do with the MSB encryption.
     
  15. ValleyBell

    ValleyBell

    Tech Member
    240
    11
    18
    researching SMPS sound drivers
    I recently found an alternative RSDK unpacker: Retrun-Sonic.
    It can even repack the archives.

    Support for the S1 remake isn't complete (no de-/encryption, filenames can be generated, although not extracted), but it works quite well so far. And it includes the source code.
     
  16. Sappharad

    Sappharad

    Oldbie
    1,363
    30
    28
    If anyone wants the file paths from Sonic 1, here are 70% of them, in the order they're stored in Data.rsdk.
    Data/Game/CreditsMobile.txt
    Data/Game/GameConfig.bin
    Data/Game/StringList.txt
    Data/Game/SystemText.gif
    Data/Game/Menu/ArrowButtons.png
    Data/Game/Menu/BG1.png
    Data/Game/Menu/Circle.png
    Data/Game/Menu/CWLogo.png
    Data/Game/Menu/DevLogos.png
    Data/Game/Menu/Heading_EN.fnt
    Data/Game/Menu/Heading_EN.png
    Data/Game/Menu/[email protected]
    Data/Game/Menu/Heading_JA.fnt
    Data/Game/Menu/[email protected]
    Data/Game/Menu/Heading_KO.fnt
    Data/Game/Menu/[email protected]
    Data/Game/Menu/Heading_RU.fnt
    Data/Game/Menu/Heading_RU.png
    Data/Game/Menu/[email protected]
    Data/Game/Menu/Heading_ZH.fnt
    Data/Game/Menu/[email protected]
    Data/Game/Menu/Heading_ZHS.fnt
    Data/Game/Menu/[email protected]
    Data/Game/Menu/HelpGraphics.png
    Data/Game/Menu/Intro.png
    Data/Game/Menu/Label_EN.fnt
    Data/Game/Menu/Label_EN.png
    Data/Game/Menu/[email protected]
    Data/Game/Menu/Label_JA.fnt
    Data/Game/Menu/[email protected]
    Data/Game/Menu/Label_KO.fnt
    Data/Game/Menu/[email protected]
    Data/Game/Menu/Label_RU.fnt
    Data/Game/Menu/Label_RU.png
    Data/Game/Menu/[email protected]
    Data/Game/Menu/Label_ZH.fnt
    Data/Game/Menu/[email protected]
    Data/Game/Menu/Label_ZHS.fnt
    Data/Game/Menu/[email protected]
    Data/Game/Menu/PlayerSelect.png
    Data/Game/Menu/Sega.png
    Data/Game/Menu/[email protected]
    Data/Game/Menu/SegaID.png
    Data/Game/Menu/SegaJP.png
    Data/Game/Menu/[email protected]
    Data/Game/Menu/SonicLogo.png
    Data/Game/Menu/Symbols.png
    Data/Game/Menu/Text_EN.fnt
    Data/Game/Menu/Text_EN.png
    Data/Game/Menu/Text_JA.fnt
    Data/Game/Menu/[email protected]
    Data/Game/Menu/Text_KO.fnt
    Data/Game/Menu/Text_KO.png
    Data/Game/Menu/Text_ZH.fnt
    Data/Game/Menu/[email protected]
    Data/Game/Menu/Text_ZHS.fnt
    Data/Game/Menu/[email protected]
    Data/Game/Menu/TimeAttack1.png
    Data/Game/Menu/TimeAttack2.png
    Data/Game/Menu/TimeAttack3.png
    Data/Game/Menu/TimeAttack4.png
    Data/Game/Menu/VirtualDPad.png
    Data/Game/Models/Achievements.bin
    Data/Game/Models/BackArrow.bin
    Data/Game/Models/BGCircle1.bin
    Data/Game/Models/BGCircle2.bin
    Data/Game/Models/BGLines.bin
    Data/Game/Models/Box.bin
    Data/Game/Models/Button.bin
    Data/Game/Models/ButtonH.bin
    Data/Game/Models/Cartridge.bin
    Data/Game/Models/Intro.bin
    Data/Game/Models/JPBox.bin
    Data/Game/Models/JPCartridge.bin
    Data/Game/Models/Leaderboards.bin
    Data/Game/Models/Options.bin
    Data/Game/Models/Package_EU.png
    Data/Game/Models/Package_JP.png
    Data/Game/Models/Package_US.png
    Data/Game/Models/Panel.bin
    Data/Game/Models/TimeAttack.bin
    Data/Music/Boss.ogg
    Data/Music/Continue.ogg
    Data/Music/Credits.ogg
    Data/Music/Drowning.ogg
    Data/Music/Ending.ogg
    Data/Music/FINAL.ogg
    Data/Music/Invincibility.ogg
    Data/Music/LABYRINTH.ogg
    Data/Music/MainMenu.ogg
    Data/Music/MARBLE.ogg
    Data/Music/MenuIntro.ogg
    Data/Music/STARLIGHT.ogg
    Data/Animations/Knuckles.ani
    Data/Animations/Sonic.ani
    Data/Animations/Tails.ani
    Data/Sprites/Players/KTE1.gif
    Data/Sprites/Players/KTE2.gif
    Data/Sprites/Players/KTE3.gif
    Data/Sprites/Players/Sonic1.gif
    Data/Sprites/Players/Sonic2.gif
    Data/Sprites/Players/Sonic3.gif
    Data/Sprites/Players/Tails1.gif
    Data/Sprites/Players/Tails2.gif
    Bytecode/Continue.bin
    Bytecode/Credits.bin
    Bytecode/Ending.bin
    Bytecode/GlobalCode.bin
    Bytecode/LSelect.bin
    Bytecode/SPECIAL.bin
    Bytecode/title.bin
    Bytecode/Zone01.bin
    Bytecode/Zone02.bin
    Bytecode/Zone03.bin
    Bytecode/Zone04.bin
    Bytecode/Zone05.bin
    Bytecode/Zone06.bin
    Data/SoundFX/Global/1Up.wav
    Data/SoundFX/Global/BackButton.wav
    Data/SoundFX/Global/BlueShield.wav
    Data/SoundFX/Global/BonusPoints.wav
    Data/SoundFX/Global/BubbleBounce.wav
    Data/SoundFX/Global/BubbleShield.wav
    Data/SoundFX/Global/Catch.wav
    Data/SoundFX/Global/Charge.wav
    Data/SoundFX/Global/Destroy.wav
    Data/SoundFX/Global/event.wav
    Data/SoundFX/Global/Explosion.wav
    Data/SoundFX/Global/FireDash.wav
    Data/SoundFX/Global/FireShield.wav
    Data/SoundFX/Global/Flying.wav
    Data/SoundFX/Global/Hurt.wav
    Data/SoundFX/Global/InstaShield.wav
    Data/SoundFX/Global/Jump.wav
    Data/SoundFX/Global/LampPost.wav
    Data/SoundFX/Global/Landing.wav
    Data/SoundFX/Global/LightningJump.wav
    Data/SoundFX/Global/LightningShield.wav
    Data/SoundFX/Global/LoseRings.wav
    Data/SoundFX/Global/MenuButton.wav
    Data/SoundFX/Global/release.wav
    Data/SoundFX/Global/Resume.wav
    Data/SoundFX/Global/Ring.wav
    Data/SoundFX/Global/Rolling.wav
    Data/SoundFX/Global/ScoreAdd.wav
    Data/SoundFX/Global/ScoreTotal.wav
    Data/SoundFX/Global/SELECT.wav
    Data/SoundFX/Global/SignPost.wav
    Data/SoundFX/Global/Skidding.wav
    Data/SoundFX/Global/Sliding.wav
    Data/SoundFX/Global/SpecialRing.wav
    Data/SoundFX/Global/SpecialWarp.wav
    Data/SoundFX/Global/Spike.wav
    Data/SoundFX/Global/SpikesMove.wav
    Data/SoundFX/Global/SPRING.wav
    Data/SoundFX/Global/Tired.wav
    Data/SoundFX/Global/Transform.wav
    Data/SoundFX/Stage/BatbrainFly.wav
    Data/SoundFX/Stage/BlockBreak.wav
    Data/SoundFX/Stage/BossHit.wav
    Data/SoundFX/Stage/Breathing.wav
    Data/SoundFX/Stage/Bumper.wav
    Data/SoundFX/Stage/ButtonPress.wav
    Data/SoundFX/Stage/Buzzsaw.wav
    Data/SoundFX/Stage/ChainPull.wav
    Data/SoundFX/Stage/Continue.wav
    Data/SoundFX/Stage/Crusher.wav
    Data/SoundFX/Stage/DrownAlert.wav
    Data/SoundFX/Stage/Drowning.wav
    Data/SoundFX/Stage/ElectricArc.wav
    Data/SoundFX/Stage/Emerald.wav
    Data/SoundFX/Stage/Exit_SS.wav
    Data/SoundFX/Stage/FireBurn.wav
    Data/SoundFX/Stage/FlameThrower.wav
    Data/SoundFX/Stage/FlappingDoor.wav
    Data/SoundFX/Stage/GemBlockSS.wav
    Data/SoundFX/Stage/LargeWall.wav
    Data/SoundFX/Stage/LedgeBreak.wav
    Data/SoundFX/Stage/PushBlock.wav
    Data/SoundFX/Stage/RotateSS.wav
    Data/SoundFX/Stage/Sega.wav
    Data/SoundFX/Stage/SmallFireball.wav
    Data/SoundFX/Stage/Waterfall.wav
    Data/SoundFX/Stage/Waterfall2.wav
    Data/SoundFX/Stage/WaterSplash.wav
    Data/Stages/Continue/128x128Tiles.bin
    Data/Stages/Continue/Backgrounds.bin
    Data/Stages/Continue/CollisionMasks.bin
    Data/Stages/Continue/StageConfig.bin
    Data/Stages/Credits/128x128Tiles.bin
    Data/Stages/Credits/Backgrounds.bin
    Data/Stages/Credits/CollisionMasks.bin
    Data/Stages/Credits/StageConfig.bin
    Data/Stages/Ending/128x128Tiles.bin
    Data/Stages/Ending/Backgrounds.bin
    Data/Stages/Ending/CollisionMasks.bin
    Data/Stages/Ending/StageConfig.bin
    Data/Stages/LSelect/128x128Tiles.bin
    Data/Stages/LSelect/Backgrounds.bin
    Data/Stages/LSelect/CollisionMasks.bin
    Data/Stages/LSelect/StageConfig.bin
    Data/Stages/SPECIAL/128x128Tiles.bin
    Data/Stages/SPECIAL/Backgrounds.bin
    Data/Stages/SPECIAL/CollisionMasks.bin
    Data/Stages/SPECIAL/StageConfig.bin
    Data/Stages/title/128x128Tiles.bin
    Data/Stages/title/Backgrounds.bin
    Data/Stages/title/CollisionMasks.bin
    Data/Stages/title/StageConfig.bin
    Data/Stages/Zone01/128x128Tiles.bin
    Data/Stages/Zone01/Backgrounds.bin
    Data/Stages/Zone01/CollisionMasks.bin
    Data/Stages/Zone01/StageConfig.bin
    Data/Stages/Zone02/128x128Tiles.bin
    Data/Stages/Zone02/Backgrounds.bin
    Data/Stages/Zone02/CollisionMasks.bin
    Data/Stages/Zone02/StageConfig.bin
    Data/Stages/Zone03/128x128Tiles.bin
    Data/Stages/Zone03/Backgrounds.bin
    Data/Stages/Zone03/CollisionMasks.bin
    Data/Stages/Zone03/StageConfig.bin
    Data/Stages/Zone04/128x128Tiles.bin
    Data/Stages/Zone04/Backgrounds.bin
    Data/Stages/Zone04/CollisionMasks.bin
    Data/Stages/Zone04/StageConfig.bin
    Data/Stages/Zone05/128x128Tiles.bin
    Data/Stages/Zone05/Backgrounds.bin
    Data/Stages/Zone05/CollisionMasks.bin
    Data/Stages/Zone05/StageConfig.bin
    Data/Stages/Zone06/128x128Tiles.bin
    Data/Stages/Zone06/Backgrounds.bin
    Data/Stages/Zone06/CollisionMasks.bin
    Data/Stages/Zone06/StageConfig.bin
    Will update again when I have the rest. I figured a proper list might be nice to have for a complete extractor. This was accomplished via brute force, by harvesting the game data for strings and building paths from any it finds. There are some patterns I don't try yet, I believe Stages/Zone-- folders probably have Act/ subfolders that I don't try for yet.
     
  17. Sappharad

    Sappharad

    Oldbie
    1,363
    30
    28
    Just thought I'd mention it here, since nobody has posted about it. The tool that ValleyBell posted on the previous page was updated to support Sonic 1 RSDK files, including encrypted files and filenames are extracted.

    Well done guys.
     
  18. Cinossu

    Cinossu

    Administrator
    2,824
    14
    18
    London, UK
    Sonic the Hedgehog Extended Edition
    .. I don't know if it's just me, but whenever I run this all I get are generated empty folders, with a lot of "Could not open [[folder here]] for writing!"

    Very annoying. Ah well.
     
  19. Tanks

    Tanks

    Member
    1,030
    0
    16
    Yeah... It doesn't seem to work with the android version at all. Can't even get it to extract.
     
  20. Sappharad

    Sappharad

    Oldbie
    1,363
    30
    28
    It worked for me, but I'm on OS X so I had to compile it from source.
    Honestly, aside from the decryption part that ValleyBell wrote, the code is pretty messy and could use a re-write. Looking through the files, I didn't see anything we haven't already found.