Sunday at 08:28 PM2 days 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 thingssamples are here from air_temple_island.pak https://drive.google.com/drive/folders/1b6K8-WDNQJ0soAJu4PGSlH7SXuo78FPo?usp=sharing Edited yesterday at 04:17 AM1 day by Sirduckdude fixed the misclick
Yesterday at 05:22 AM1 day 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.Abare_Engine_PAK.py AvatarLegendsPak.bt Edited yesterday at 05:22 AM1 day by Falkrian
Yesterday at 05:42 AM1 day 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.Abare_Engine_PAK.py AvatarLegendsPak.btthanks ! any idea on the fighters though when extracted it gives a munged file
Yesterday at 05:47 AM1 day 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.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 yesterday at 06:30 AM1 day by Falkrian
Yesterday at 01:42 PM1 day 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 #1Image #2 Edited yesterday at 01:49 PM1 day by Falkrian
Yesterday at 02:28 PM1 day 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 #1Image #2yea! how are you extracting these images?
Yesterday at 03:21 PM1 day 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.
Yesterday at 03:40 PM1 day 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!
Yesterday at 04:06 PM1 day 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?
Yesterday at 05:20 PM1 day 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.First I would like to deliver before possibly moving on to other things like localization.
Yesterday at 07:32 PM1 day 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 --maskExplanation 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 paletteHere are some screenshots of the extracted PNG images after running Combination 5 (Excluding --canvas switch) for some time:Please let me know if there are any issues.pak_extract.py munged_extract.py Edited yesterday at 08:27 PM1 day by Falkrian
Yesterday at 08:47 PM1 day 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 --maskFor 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 :pak_extract.py munged_extract.pyOmg 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 --maskExplanation 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 paletteHere are some screenshots of the extracted PNG images after running Combination 5 (Excluding --canvas switch) for some time:Please let me know if there are any issues.pak_extract.py munged_extract.pyThank you so much!!
Yesterday at 08:52 PM1 day Localization You are very welcome my friend!Please do let me know if there are any issues.
23 hours ago23 hr Author Localization 11 minutes ago, Falkrian said:You are very welcome my friend!Please do let me know if there are any issues.alright!
22 hours ago22 hr 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
16 hours ago16 hr 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 moddingThere 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. 😉
7 hours ago7 hr 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 worksDoes anyone have any ideas on what the proper extraction solution might be? Edited 7 hours ago7 hr by MaxNicoNatsu23 re-wording
6 hours ago6 hr 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 5 hours ago5 hr by Falkrian
5 hours ago5 hr is it possible to recompress the files back to .pak after editing them for the purposes of making mods?
5 hours ago5 hr 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.
3 hours ago3 hr 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!
3 hours ago3 hr 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 filesWAV converted through embedded vgmstream-cliLocalization:CSV files containing game textPalettes:RGBA palette dataPNG palette overviewCSV for individual palette colour valuesTables:Symbols: Named IDs used by the SPRBIN scriptFrames: Main sprite-frame records and source image pathsFrames Extra: Additional values attached to individual framesFrame Placement: Objects or sprite positions associated with framesStates: Animation or behavior-state recordsState Strings: Strings inside of compiled state dataPairs: Pairs of unidentified values stored in the frame and state dataPalette Records: Details about embedded colour palettes and the images that use themDependencies: External asset paths referenced by the SPRBINSPRBIN_Extractor.7z Edited 3 hours ago3 hr by Falkrian
3 hours ago3 hr 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
59 minutes ago59 min 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 --maskExplanation 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 paletteHere are some screenshots of the extracted PNG images after running Combination 5 (Excluding --canvas switch) for some time:Please let me know if there are any issues.pak_extract.py munged_extract.pythis is what im suppose to do right? or am i missing something?
58 minutes ago58 min Localization Just now, nuggetman said: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