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.
Zero Tolerance for Disrespect

.pak avatar legends the fighting game

Featured Replies

  • Localization

Avatar Legends the fighting game uses Paks from what seems like a custom engine I believe since they they contains other files inside them I believe DDS and some other things
samples are here from air_temple_island.pak
image.png
https://drive.google.com/drive/folders/1b6K8-WDNQJ0soAJu4PGSlH7SXuo78FPo?usp=sharing

Edited by Sirduckdude
fixed the misclick

Solved by Falkrian

  • Sirduckdude changed the title to .pak avatar legends the fighting game
  • Localization

Game was created on the ABARE Engine and uses 256-byte directory records. Kind of similar to Quake's PAK structure that uses 64-byte directory records iirc.

I have attached a python script that will extract the content from the archives for you. Please use it as follows:

python .\Abare_Engine_PAK.py "path\to\pak\file" -o "path\to\extraction\folder"

I have also attached a 010 Editor binary template for those interested.

image.png

Abare_Engine_PAK.py AvatarLegendsPak.bt

Edited by Falkrian

  • Author
  • Localization
18 minutes ago, Falkrian said:

Game was created on the ABARE Engine and uses 256-byte directory records. Kind of similar to Quake's PAK structure that uses 64-byte directory records iirc.

I have attached a python script that will extract the content from the archives for you. Please use it as follows:

python .\Abare_Engine_PAK.py "path\to\pak\file" -o "path\to\extraction\folder"

I have also attached a 010 Editor binary template for those interested.

image.png

Abare_Engine_PAK.py AvatarLegendsPak.bt

thanks ! any idea on the fighters though when extracted it gives a munged fileimage.png

  • Localization

Munged files are a separate issue to look into. There are clear references of PNG images in them. Just a matter of figuring out how to extract them.

image.png

image.png

I have to leave for work now unfortunately, but I will occasionally remote home and try to figure this out. I encourage everyone to have a go at this!

Edited by Falkrian

  • Localization

OK. I am getting places. There is some palettized compression (proprietary) going on and some other stuff. I am still figuring things out as I go...

Image #1

levels~ba_sing_se~preview~frames~stageframe_bg.png

Image #2

sprites~cabbageguy~idle~stand~frames~cabbagemerchant_idle.png

Edited by Falkrian

  • Author
  • Localization
46 minutes ago, Falkrian said:

OK. I am getting places. There is some palettized compression (proprietary) going on and some other stuff. I am still figuring things out as I go...

Image #1

levels~ba_sing_se~preview~frames~stageframe_bg.png

Image #2

sprites~cabbageguy~idle~stand~frames~cabbagemerchant_idle.png

yea! how are you extracting these images?

  • Localization

I am working on a python script that can fully extract all the images from these files. It is not ready yet, but as soon as it is, it will be released here.

  • Author
  • Localization
19 minutes ago, Falkrian said:

I am working on a python script that can fully extract all the images from these files. It is not ready yet, but as soon as it is, it will be released here.

alrighty thank you!

  • Localization
44 minutes ago, Falkrian said:

I am working on a python script that can fully extract all the images from these files. It is not ready yet, but as soon as it is, it will be released here.

does the tool support localize as well?

  • Localization
47 minutes ago, petermike867 said:

does the tool support localize as well?

There is a pretty big CSV file in there that contains the translation of game text in various languages. It looks like that English, French, Italian, German, Spanish and Brazilian Portuguese are filled in. There are empty rows for Korean, Japanese, Chinese, Simplified Chinese (?), and Russian.

image.png

First I would like to deliver before possibly moving on to other things like localization.

  • Localization
  • Solution

@Sirduckdude I think I am ready to share the scripts that will get you the data you're after and then some. Please know that the scripts might take a while to complete depending on what switches you're using and the amount of munged files in the initial extraction folder.


First it would be good to perform a clean extract of all PAK archive data through pak_extract.py as follows:

python .\pak_extract.py "path\to\data_packages" "path\to\extraction\folder"

Once everything has been extracted then the actual extracting of the images can begin:

# Combination 1: Unpalettized Material Images
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --source-paths --atlas --mask
# -- OR --
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --source-paths --atlas --canvas --mask

# Combination 2: Automatic Default Palette
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --source-paths --atlas --mask
# -- OR --
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --source-paths --atlas --canvas --mask

# Combination 3: Default Palette With Alternative Alpha Curve
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --alpha-curve --source-paths --atlas --mask
# -- OR --
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --alpha-curve --source-paths --atlas --canvas --mask

# Combination 4: Every Available Palette
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --source-paths --atlas --mask
# -- OR --
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --source-paths --atlas --canvas --mask

# Combination 5: Every Available Palette With Alternative Alpha Curve
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --alpha-curve --source-paths --atlas --mask
# -- OR --
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --alpha-curve --source-paths --atlas --canvas --mask

Explanation of what the switches mean:

--auto-palette | Automatically finds the relevant SPRBIN palette
--all-palettes | Exports every available colour variant for each type-3 image. Type-6 images are exported once because they already contain final RGBA colours
--source-paths | Organizes output using the original source paths embedded in the MUNGED files.
--atlas        | Adds the reconstructed packed atlas as an .atlas.png. For type 3, this is the unpalettized material data
--mask         | Extracts companion _mask.munged images separately as .mask.png variants. It does not merge them into the main image
--canvas       | Places the sprite on its original full-size canvas instead of exporting only the cropped area
--alpha-curve  | Applies the game shader’s alternative alpha curve to type-3 images, improving some soft edges. It does not affect type-6 images
--raw          | Exports the original compressed pixel data and related technical files for debugging. This is not needed for extraction

Type-3 images are images that use palette and shader data to create the final colours
Type-6 images are images that already store RGBA pixels and do not need a palette

Here are some screenshots of the extracted PNG images after running Combination 5 (Excluding --canvas switch) for some time:

image.png

image.png

Please let me know if there are any issues.

pak_extract.py munged_extract.py

Edited by Falkrian

  • Author
  • Localization
1 hour ago, Falkrian said:

@Sirduckdude I think I am ready to share the scripts that will get you the data you're after and then some. Please know that the scripts might take a while to complete depending on what switches you're using.


First it would be good to perform a clean extract of all PAK archive data through pak_extract.py as follows:

python .\pak_extract.py "path\to\data_packages" "path\to\extraction\folder"

Once everything has been extracted then the actual extracting of the images can begin. Extraction of the images is done as follows:

# Combination 1: Unpalettized Material Images
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --source-paths --atlas --mask
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --source-paths --atlas --canvas --mask

# Combination 2: Automatic Default Palette
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --source-paths --atlas --mask
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --source-paths --atlas --canvas --mask

# Combination 3: Default Palette With Alternative Alpha Curve
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --alpha-curve --source-paths --atlas --mask
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --alpha-curve --source-paths --atlas --canvas --mask

# Combination 4: Every Available Palette
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --source-paths --atlas --mask
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --source-paths --atlas --canvas --mask

# Combination 5: Every Available Palette With Alternative Alpha Curve
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --alpha-curve --source-paths --atlas --mask
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --alpha-curve --source-paths --atlas --canvas --mask

For those wanting to know what each switch does:

--auto-palette | Automatically finds the relevant SPRBIN palette
--all-palettes | Exports every available colour variant for each type-3 image. Type-6 images are exported once because they already contain final RGBA colours
--source-paths | Organizes output using the original source paths embedded in the MUNGED files.
--atlas        | Adds the reconstructed packed atlas as an .atlas.png. For type 3, this is the unpalettized material data
--mask         | Extracts companion _mask.munged images separately as .mask.png variants. It does not merge them into the main image
--canvas       | Places the sprite on its original full-size canvas instead of exporting only the cropped area
--alpha-curve  | Applies the game shader’s alternative alpha curve to type-3 images, improving some soft edges. It does not affect type-6 images
--raw          | Exports the original compressed pixel data and related technical files for debugging. This is not needed for extraction.

Here is a screenshot of running combination 5 :

image.png

pak_extract.py munged_extract.py

Omg HUGE thanks!

1 hour ago, Falkrian said:

@Sirduckdude I think I am ready to share the scripts that will get you the data you're after and then some. Please know that the scripts might take a while to complete depending on what switches you're using and the amount of munged files in the initial extraction folder.


First it would be good to perform a clean extract of all PAK archive data through pak_extract.py as follows:

python .\pak_extract.py "path\to\data_packages" "path\to\extraction\folder"

Once everything has been extracted then the actual extracting of the images can begin:

# Combination 1: Unpalettized Material Images
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --source-paths --atlas --mask# -- OR --
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --source-paths --atlas --canvas --mask

# Combination 2: Automatic Default Palette
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --source-paths --atlas --mask# -- OR --
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --source-paths --atlas --canvas --mask

# Combination 3: Default Palette With Alternative Alpha Curve
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --alpha-curve --source-paths --atlas --mask# -- OR --
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --alpha-curve --source-paths --atlas --canvas --mask

# Combination 4: Every Available Palette
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --source-paths --atlas --mask# -- OR --
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --source-paths --atlas --canvas --mask

# Combination 5: Every Available Palette With Alternative Alpha Curve
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --alpha-curve --source-paths --atlas --mask# -- OR --
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --alpha-curve --source-paths --atlas --canvas --mask

Explanation of what the switches mean:

--auto-palette | Automatically finds the relevant SPRBIN palette
--all-palettes | Exports every available colour variant for each type-3 image. Type-6 images are exported once because they already contain final RGBA colours
--source-paths | Organizes output using the original source paths embedded in the MUNGED files.
--atlas        | Adds the reconstructed packed atlas as an .atlas.png. For type 3, this is the unpalettized material data
--mask         | Extracts companion _mask.munged images separately as .mask.png variants. It does not merge them into the main image
--canvas       | Places the sprite on its original full-size canvas instead of exporting only the cropped area
--alpha-curve  | Applies the game shader’s alternative alpha curve to type-3 images, improving some soft edges. It does not affect type-6 images
--raw          | Exports the original compressed pixel data and related technical files for debugging. This is not needed for extraction

Type-3 images are images that use palette and shader data to create the final colours
Type-6 images are images that already store RGBA pixels and do not need a palette

Here are some screenshots of the extracted PNG images after running Combination 5 (Excluding --canvas switch) for some time:

image.png

image.png

Please let me know if there are any issues.

pak_extract.py munged_extract.py

Thank you so much!!

  • Author
  • Localization
11 minutes ago, Falkrian said:

You are very welcome my friend!

Please do let me know if there are any issues.

alright!

1 hour ago, Falkrian said:

You are very welcome my friend!

Please do let me know if there are any issues.

how do you use the script? like what do you put it into? im sorry if my question sounds stupid im new to modding

  • Localization
5 hours ago, nuggetman said:

how do you use the script? like what do you put it into? im sorry if my question sounds stupid im new to modding

There are no stupid questions so do not worry.

Make sure you've got Python 3.10 or higher installed on your system. You can download Python from the official website. Make sure that Python is added to your PATH environment variables. There is a little checkbox you need to tick during installation.

Once installed, open up an instance of Windows PowerShell and follow the instructions in my previous post. 😉

Hiya! So I noticed the script only extracts scripts and sprites, with no support for other files or paths starting with "!src/", only data from "srcdata" paths. Are there plans to extract all other files in working condition?

Specifically, the FMOD FSB5 audio and sound files; I did manage to extract those audio files via other methods (from azula.pak in particular), but they do not play in foobar2000/vgmstream whatsoever.

Here are some observations I managed to make:

- The FSB5 files all have a codec value of 16 (not 0-3 standard FMOD)

- Audio data is NOT encrypted (verified entropy, patterns match real audio)

- File paths say .ogg, but containers are FSB5

- Each file has 1 sample; sizes range from ~10KB to 22KB

- Tried AES decryption (from the engine.ini from an early build of the game), XOR, raw PCM, Vorbis - nothing works

Does anyone have any ideas on what the proper extraction solution might be?

Edited by MaxNicoNatsu23
re-wording

  • Localization

Hey,

I am still working on adding support for FSB and CTSBIN and some other stuff. Apologies if you were expecting a full dump. I just wanted to post what I had ready yesterday. 😓

Edited by Falkrian

  • Localization
5 minutes ago, TesterOfTester said:

is it possible to recompress the files back to .pak after editing them for the purposes of making mods?

The script can be extended with repacking/rebuilding capabilities. It will be added, but I currently have no ETA on when.

2 hours ago, Falkrian said:

Hey,

I am still working on adding support for FSB and CTSBIN and some other stuff. Apologies if you were expecting a full dump. I just wanted to post what I had ready yesterday. 😓

Ayy, thanks for the reply! And yeah, no worries at all; the progress you have already made is a big step forward either way; no rush - whenever you get around to it. 😄

I'm more than happy to share all the rough scripts and rough research I did regarding the FSB5 extraction. I also noticed that all FSB5 files have codec=16 (non-standard FMOD), just in case that comes up later.

And yeah, your work is deffo appreciated!

  • Localization

The attached script will dump everything that is inside of the .sprbin files. This includes the FSB files. I am cheating a little bit as I am using vgmstream-cli to do the heavy lifting for me. The FSB files are still available raw. Hope you will excuse me. 🥺

python .\SPRBIN_Extractor.py "path\to\folder\with\sprbin\files" "path\to\export\folder"

Full list of resources this is currently extracting:

  • Audio:

    • Raw FSB files

    • WAV converted through embedded vgmstream-cli

  • Localization:

    • CSV files containing game text

  • Palettes:

    • RGBA palette data

    • PNG palette overview

    • CSV for individual palette colour values

  • Tables:

    • Symbols: Named IDs used by the SPRBIN script

    • Frames: Main sprite-frame records and source image paths

    • Frames Extra: Additional values attached to individual frames

    • Frame Placement: Objects or sprite positions associated with frames

    • States: Animation or behavior-state records

    • State Strings: Strings inside of compiled state data

    • Pairs: Pairs of unidentified values stored in the frame and state data

    • Palette Records: Details about embedded colour palettes and the images that use them

    • Dependencies: External asset paths referenced by the SPRBIN

image.png

SPRBIN_Extractor.7z

Edited by Falkrian

YOOOOOOOO omg thank you so much!!!

1 minute ago, Falkrian said:

The attached script will dump everything that is inside of the .sprbin files. This includes the FSB files. I am cheating a little bit as I am using vgmstream-cli to do the heavy lifting for me. The FSB files are still available raw. Hope you will excuse me. 🥺

python .\SPRBIN_Extractor.py "path\to\folder\with\sprbin\files" "path\to\export\folder"

The remaining .ogg files can be found after extracting the .pak files through pak_extract.py.

SPRBIN_Extractor.7z

On 7/27/2026 at 3:32 PM, Falkrian said:

@Sirduckdude I think I am ready to share the scripts that will get you the data you're after and then some. Please know that the scripts might take a while to complete depending on what switches you're using and the amount of munged files in the initial extraction folder.


First it would be good to perform a clean extract of all PAK archive data through pak_extract.py as follows:

python .\pak_extract.py "path\to\data_packages" "path\to\extraction\folder"

Once everything has been extracted then the actual extracting of the images can begin:

# Combination 1: Unpalettized Material Images
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --source-paths --atlas --mask# -- OR --
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --source-paths --atlas --canvas --mask

# Combination 2: Automatic Default Palette
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --source-paths --atlas --mask# -- OR --
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --source-paths --atlas --canvas --mask

# Combination 3: Default Palette With Alternative Alpha Curve
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --alpha-curve --source-paths --atlas --mask# -- OR --
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --auto-palette --alpha-curve --source-paths --atlas --canvas --mask

# Combination 4: Every Available Palette
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --source-paths --atlas --mask# -- OR --
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --source-paths --atlas --canvas --mask

# Combination 5: Every Available Palette With Alternative Alpha Curve
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --alpha-curve --source-paths --atlas --mask# -- OR --
python .\munged_extract.py "path\to\step_one\extraction\folder" "path\to\destination\folder" --all-palettes --alpha-curve --source-paths --atlas --canvas --mask

Explanation of what the switches mean:

--auto-palette | Automatically finds the relevant SPRBIN palette
--all-palettes | Exports every available colour variant for each type-3 image. Type-6 images are exported once because they already contain final RGBA colours
--source-paths | Organizes output using the original source paths embedded in the MUNGED files.
--atlas        | Adds the reconstructed packed atlas as an .atlas.png. For type 3, this is the unpalettized material data
--mask         | Extracts companion _mask.munged images separately as .mask.png variants. It does not merge them into the main image
--canvas       | Places the sprite on its original full-size canvas instead of exporting only the cropped area
--alpha-curve  | Applies the game shader’s alternative alpha curve to type-3 images, improving some soft edges. It does not affect type-6 images
--raw          | Exports the original compressed pixel data and related technical files for debugging. This is not needed for extraction

Type-3 images are images that use palette and shader data to create the final colours
Type-6 images are images that already store RGBA pixels and do not need a palette

Here are some screenshots of the extracted PNG images after running Combination 5 (Excluding --canvas switch) for some time:

image.png

image.png

Please let me know if there are any issues.

pak_extract.py munged_extract.py

image.png

this is what im suppose to do right? or am i missing something?

  • Localization
Just now, nuggetman said:

image.png

this is what im suppose to do right? or am i missing something?

Put both paths in between "" and you should be golden.

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.