Harry Potter and the Order of the Phoenix ".rpk"

Extraction and unpacking of game archives and compression, encryption, obfuscation, decoding of unknown files
Puterboy1
Posts: 382
Joined: Wed Sep 12, 2018 2:22 am

Harry Potter and the Order of the Phoenix ".rpk"

Post by Puterboy1 »

Who can take a look at these?
GHFear
Posts: 290
Joined: Fri Mar 30, 2018 2:48 am

Re: Harry Potter and the Order of the Phoenix ".rpk"

Post by GHFear »

Put the rpk files in the folder with the "EXTRACT, quickbms and scripts files" and click EXTRACT and it will auto extract all rpk files.
:)

It might end with an error, but you get all the files.
Puterboy1
Posts: 382
Joined: Wed Sep 12, 2018 2:22 am

Re: Harry Potter and the Order of the Phoenix ".rpk"

Post by Puterboy1 »

GHFear wrote:Put the rpk files in the folder with the "EXTRACT, quickbms and scripts files" and click EXTRACT and it will auto extract all rpk files.
:)

It might end with an error, but you get all the files.


Good, now if I can find a way of extracting the .sdt files from this game with proper file names.
AlphaTwentyThree
Posts: 909
Joined: Sat Aug 09, 2014 11:21 am

Re: Harry Potter and the Order of the Phoenix ".rpk"

Post by AlphaTwentyThree »

I just wrote a better-working extractor for those files. Updates:
- decompresses rpk into memory and extracts it in one step
- correct names
- no error termination

Code: Select all

# Harry Potter games (2008 and newer)
# *.rpk/*.str.* extractor

# (c) 2022-02-07 by AlphaTwentyThree of Zenhax
# script for QuickBMS http://quickbms.aluigi.org

getDstring TEST 4
if TEST == "MRTS" || TEST == "STRM"
   get SIZE asize
   putVarChr MEMORY_FILE SIZE 0
   log MEMORY_FILE 0 0
   append
   log MEMORY_FILE 0 SIZE
   append
else
   comtype dk2
   endian big
   get ZSIZE asize
   goto 2
   get SIZE long
   putVarChr MEMORY_FILE SIZE 0
   log MEMORY_FILE 0 0
   append
   clog MEMORY_FILE 0 ZSIZE SIZE
   append
   endian little
endif
goto 0 MEMORY_FILE
getDstring TEST 4 MEMORY_FILE
get FSIZE long MEMORY_FILE
getDstring TEST 4 MEMORY_FILE
if TEST == "AGRP"
   endian big
endif
goto 8 MEMORY_FILE
callfunction getFields 1

startfunction getFields
   getDstring IDENT 4 MEMORY_FILE # PRGA
   if IDENT != "PRGA" && IDENT != "AGRP"
      cleanexit
   endif
   get PRGA_SIZE long MEMORY_FILE
   getDstring DUMMY 4 MEMORY_FILE # RDHG
   get DUMMY long MEMORY_FILE # 14
   get DUMMY long MEMORY_FILE # 10
   get NAMEPOS long MEMORY_FILE
   get DUMMY long MEMORY_FILE # 10
   xmath FILES "(PRGA_SIZE - 0x1c) / 0x28"
   for i = 0 < FILES
      getDstring DUMMY 0x18 MEMORY_FILE
      get OFFSET long MEMORY_FILE
      get SIZE long MEMORY_FILE
      get NAMEPOS long MEMORY_FILE
      get ZERO long MEMORY_FILE
      savepos MYOFF MEMORY_FILE
      goto NAMEPOS MEMORY_FILE
      get NAME string MEMORY_FILE
      goto MYOFF MEMORY_FILE
      log NAME OFFSET SIZE MEMORY_FILE
   next i
   callfunction getFields 1
endfunction