Jump to content

DragonRaja png files QuickBMS


Finn

Recommended Posts

Hello guys

I'm trying to extract some files from DragonRaja using the script posted on legacy

The script works for all files except model file, I would like some help as I don't understand much about extracting files

I am attaching the script file DragonRajaUnpacker.bms and the file miscs.png and I will be uploading models.png to the gdrive (the file is large)

The unpacker works on the miscs.png file, but it does not work on the models.png file

I would like some help getting DragonRajaUnpacker to work correctly

Below is the error

bms_error.png.0c458abfc6664d174e64c5a54b1adf70.png

models.png (gdrive) - archive is located in DragonRajaGame\Azure\Output\package, models.png & models.pk1.png

DragonRajaUnpacker.bms

Spoiler
# Dragon Raja png Archives Unpacker by Bigchillghost
# script for QuickBMS http://quickbms.aluigi.org

idstring "\xEF\x23\xCA\x4D"
get EndOfFile long
set Version long 0
set EntrySize long 0x114
get Skip long
if Skip == 0x56A089B7
	math Skip = 0x110
else
	idstring "\xB7\x89\xA0\x56"
	math Version = 1
	math EntrySize = 0x118
	math Skip = 0x114
endif
math EndOfFile - Skip
goto EndOfFile
get Offset long
math Offset ^ 0x62A4F9E1
math Skip - 0xC
goto Skip 0 SEEK_CUR
get FileCount long

print "Preprocessing entries. This might take a while for large archives..."

goto Offset
comtype zlib
set Size long FileCount
math Size * EntrySize
putvarchr MEMORY_FILE Size 0
log MEMORY_FILE 0 0
append
set i long 0
for i = 0 < FileCount
	get ZSize long
	get Unknown long
	math ZSize ^ 0x62A4F9E1
	savepos Offset
	clog MEMORY_FILE Offset ZSize EntrySize
	goto ZSize 0 SEEK_CUR
next i
append

get Path basename
string Path + \
goto 0 MEMORY_FILE

for i = 0 < FileCount
	getdstring RelName 0x100 MEMORY_FILE
	set Name string ""
	string Name p "%s%s" Path RelName
	get Skip long MEMORY_FILE
	get Offset long MEMORY_FILE
	if Version == 1
		get Skip long MEMORY_FILE
	endif
	get Size long MEMORY_FILE
	get ZSize long MEMORY_FILE
	get Skip long MEMORY_FILE
	if ZSize == Size
		log Name Offset Size
	else
		goto Offset
		set RelOffset long Offset
		get Signature long
		if Signature == 0xF92D6B5C
			comtype lz4
			get isCompressed short
			get maxCapacity long
			get dstCapacity long
			get OffsetCount long
			set j long 0
			for j = 0 < OffsetCount
				get OffsetArray[j] long
			next j
			set chunkCount long OffsetCount
			math chunkCount - 1
			math j = 0
			#putvarchr MEMORY_FILE2 Size 0
			log MEMORY_FILE2 0 0
			append
			do
				math Offset = OffsetArray[j]
				math j + 1
				set ZipSize long OffsetArray[j]
				math ZipSize - Offset
				math Offset + RelOffset
				if chunkCount == j
					set UnzipSize long dstCapacity
				else
					set UnzipSize long maxCapacity
				endif
				if UnzipSize != ZipSize
					clog MEMORY_FILE2 Offset ZipSize UnzipSize
				else
					log MEMORY_FILE2 Offset UnzipSize
				endif
			while j < chunkCount
			append
			log Name 0 Size MEMORY_FILE2
		else
			math Signature & 0xFF
			if Signature == 0x78
				comtype zlib
			elif Signature == 0x5D
				comtype lzma
			else
				print "Address %Offset|hex%: unknown compression!"
				break
			endif
			clog Name Offset ZSize Size
		endif
	endif
next i


 

 

I would be grateful if I could receive any help, thanks.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...