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.

(3DS) Shantae and the Pirate's Curse *.vol file

Featured Replies

Hi, can someone please help me with the .vol file froen_Global.zipm Shantae and the Pirate's Curse on 3DS? It seems to be a type of compressed file. I would really appreciate any help.

Solved by BloodRaynare

  • Supporter

Try this QuickBMS script that I made myself (well not really. I kinda took some bits from the aluigi's scooby_looney.bms script then adapt it accordingly):
 

## Shantae and the Pirate's Curse *.vol extractor script by BloodRaynare
## For use with QuickBMS

log MEMORY_FILE 0 0

ComType deflate

get SIGN long
if SIGN == 0xd177f050
	callfunction COMP_VARIANT 1
else
	callfunction UNCOMP_VARIANT 1
endif

startfunction COMP_VARIANT
	get DUMMY long  # 0x0101
	get ZSIZE long
	get SIZE long
	savepos OFFSET
	clog MEMORY_FILE OFFSET ZSIZE SIZE
	
	get SIGN long MEMORY_FILE
	get DUMMY long MEMORY_FILE
	get DUMMY long MEMORY_FILE
	get FILES long MEMORY_FILE
	get OFFSET long MEMORY_FILE
	goto OFFSET MEMORY_FILE
	xmath NAME_OFF "OFFSET + (FILES * 0x18)"
	for i = 0 < FILES
		get CRC long MEMORY_FILE
		get DUMMY long MEMORY_FILE
		get OFFSET long MEMORY_FILE
		get ZERO long MEMORY_FILE
		get ZERO long MEMORY_FILE
		get SIZE long MEMORY_FILE
	
		savepos TMP MEMORY_FILE
		goto NAME_OFF MEMORY_FILE
		get NAME string MEMORY_FILE
		savepos NAME_OFF MEMORY_FILE
		goto TMP MEMORY_FILE
	
		log NAME OFFSET SIZE MEMORY_FILE
	next i
endfunction

startfunction UNCOMP_VARIANT
	get DUMMY long
	get DUMMY long
	get FILES long
	get OFFSET long
	goto OFFSET
	xmath NAME_OFF "OFFSET + (FILES * 0x18)"
	for i = 0 < FILES
		get CRC long
		get DUMMY long
		get OFFSET long
		get ZERO long
		get ZERO long
		get SIZE long
	
		savepos TMP
		goto NAME_OFF
		get NAME string
		savepos NAME_OFF
		goto TMP
	
		log NAME OFFSET SIZE
	next i
endfunction

Edited by BloodRaynare

  • Author

Thank you. But when I run the script, it doesn't output any files. Am I doing something wrong?
pic1.thumb.png.98df8a5fbbefe8c8f1bb650aa9766fa3.pngpic2.png.ffdc41964057aabc91cab4f9a197fd7c.png

It looks like you're still using the scooby_looney script in your image above.  However, the script by BloodRaynare doesn't work either as the file table is 0x14 bytes per entry instead of 0x18.  Try this one - it works on your sample, that is the only one I have from that game:

# Shantae and The Pirate's Curse (3DS)
# VOL extract
# QuickBMS script by DKDave, 2025


Comtype deflate

Goto 8
Get ZSIZE Long
Get SIZE Long

CLog MEMORY_FILE 0x10 ZSIZE SIZE

Goto 0x0c -1
Get FILES Long -1
Get ENTRY Long -1

For A = 0 < FILES
    Goto ENTRY -1
    Get MISC1 Long -1
    Get NAME_OFF Long -1
    Get OFFSET Long -1
    Get JUNK Long -1
    Get SIZE Long -1
    Goto NAME_OFF -1
    Get FILENAME String -1

    Log FILENAME OFFSET SIZE -1

    Math ENTRY + 0x14
Next A

 

 

 

  • Supporter
  • Solution

 

57 minutes ago, DKDave said:

It looks like you're still using the scooby_looney script in your image above.  However, the script by BloodRaynare doesn't work either as the file table is 0x14 bytes per entry instead of 0x18.  Try this one - it works on your sample, that is the only one I have from that game:

# Shantae and The Pirate's Curse (3DS)
# VOL extract
# QuickBMS script by DKDave, 2025


Comtype deflate

Goto 8
Get ZSIZE Long
Get SIZE Long

CLog MEMORY_FILE 0x10 ZSIZE SIZE

Goto 0x0c -1
Get FILES Long -1
Get ENTRY Long -1

For A = 0 < FILES
    Goto ENTRY -1
    Get MISC1 Long -1
    Get NAME_OFF Long -1
    Get OFFSET Long -1
    Get JUNK Long -1
    Get SIZE Long -1
    Goto NAME_OFF -1
    Get FILENAME String -1

    Log FILENAME OFFSET SIZE -1

    Math ENTRY + 0x14
Next A

 

 

 

Hmmm, my script did work actually, but because I tested it with the files from the cart/physical version
@katashi Did you files come from the eshop version? It seems there are file format changes between the releases.
PC version went through with the same thing too (vol format is different between Steam and GOG version).

Edited by BloodRaynare

  • Author
4 hours ago, BloodRaynare said:

 

Hmmm, my script did work actually, but because I tested it with the files from the cart/physical version
@katashi Did you files come from the eshop version? It seems there are file format changes between the releases.
PC version went through with the same thing too (vol format is different between Steam and GOG version).

Solved, I have successfully extracted it. Thank you very much.

7 hours ago, BloodRaynare said:

 

Hmmm, my script did work actually, but because I tested it with the files from the cart/physical version
@katashi Did you files come from the eshop version? It seems there are file format changes between the releases.
PC version went through with the same thing too (vol format is different between Steam and GOG version).

It's always a pain when there are different versions of formats for the same game.  So there are several valid scripts, just have to choose the correct one.

 

 

Create an account or sign in to comment

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.