March 1Mar 1 Hi everyone! I was so glad to find this forum because I have been trying to figure out for weeks how to crack a somewhat old and somewhat obscure, and notoriously a little tough game file format in order to get to the dialogue files. This post might be a little long as I give background and explain the difficulty with this file format, so I apologize in advance if it is too much information! A little background, Absolution is one of very few games that uses this file format and every single game file is stuck in this format (in comparison to the older games, which have some proprietary formats but the files are largely pretty easy to explore around in). I have been crawling through the Internet Archive, old forums (Xentax and Zenhax, the archived Hitman forums, Github (Deux Ex Mankind also uses this file format and that was able to be cracked, so I have some hope for this)), and trying pretty much everything I can in order to figure out how to get this to readable files. The solution that was the most obvious when I started my research was using the ZHM Tools, which has been stated to not work for this game (specifically for the ResourceTool that is meant to explicitly unpack .pc_resourcelib files for the newest games) and has no support for it. I have tried to do older versions of this tool from 2021 and they still do not have support for anything but the newer games (the World of Assassination trilogy appears to use the same kind of file format but more sparingly, as it seems far easier to decrypt and have as actual readable files). I may be missing something with this tool due to inexperience with C sharp code but considering the notice for it being broken for Absolution specifically for a long time, I moved onto different pursuits soon after. I have visited every site on the internet that mentions this file format, as it is incredibly tough to crack and irritating to work with, from what I have seen. I reached out on the Hitman Forums, Hitman Reddit, pretty much any place I could possibly think of that would have knowledge on how to get this figured out, but with no success (other than a suggestion for the ZHM Tools, which does not seem to be an avenue with much promise). I then learned of QuickBMS by going through the old Xentax forums, in which there was an archived page that discussed this, as user ninearts (archived version of the post from 2019 linked) cracked a code for extracting the FSB5 banks for the audio, which was huge progress. From there, I continued to look through the forums without much success, until finding this post on the Zenhax forums discussing the Hitman Sniper Challenge (which, for context, was in the same engine as Absolution and used the same file type, as it was a promo for the game) and finding a WIP code by user AnonBaiter (which, self admittedly, I am not super experienced with code - so I am not sure how much use this code has for my request) that claims to have finally cracked it. When I was on the Internet Archive to poke through the old Hitman forums (because many of the posts got deleted, so it's really the only way to find things on there), I stumbled onto the Absolution forums and saw that many people back in the 2010s were also trying to crack this (which makes sense, given the game was released in 2011 and has largely faded from popularity in comparison to before the new games were released). I am very specifically trying to get the dialogue, as the game devs claim it has 300,000 spoken words for the AI dialogue (and 2,000 pages), and that barely anyone has heard all of it because of how much is written there. There was one thread that wanted the exact same thing I am trying to do 13 years later. User Technician Fry (archived post) did an amazingly thorough walkthrough of extracting the files with ninearts's script and opening it in FMOD Designer. The consensus largely in that thread and others I found is that it is immensely hard to unpack because of how much IO Interactive encrypted each file, which is absolutely true. Comparing Absolution's files to the .loc files for the prior 3 games, which also needed converted, it is nigh impossible to read it without decryption, and every file is in this format, instead of formats that are remotely any easier to unpack and read in a text editor. The audio file formatting process is also very long and complicated, with no way to really make it simpler. In the Xentax forum link above, user ninearts also mentions that the files are a little hard to overlap (as all of the audio files are very split up with the game's 5000+ files in the folder where all of the game data is stored), as you only have a 0.4 second overlap and trying to combine all of the files would take a very long time to try and make it cohesive and into .wav format so it is easily listenable without an additional program. I am more than willing to do that in order to get all of this information compiled, but having a transcript/dialogue strings (like you would need for translation) would be much simpler and much less painful to do. There are a few translation patches for Absolution (not as many as prior games, I have extracted all of the dialogue from all of the games before this, so I have used translation files to see where the location for the original dialogue strings are located in the past) so I know that these files SHOULD be able to be accessible (PCGamingWiki link if having the translations would also be helpful) and can be unpacked and modified. As I mentioned earlier, there is a project for DXMD on Github by SeanPesce that managed to figure out a framework, I am not sure if that would also work here given the files seem to work the same (the DXMD engine is a modified version of the one that Absolution is on). I am not sure if the script that extracts the FSB files would be able to be modified to get the dialogue strings (and part of my issue is that there really isn't much information on what kind of files are actually packaged in these .pc_resourcelib files in the first place, so I have no idea where to even start to get the dialogue out in the same way that I have for every game prior to this). All of this to say, I would love to find a way to extract an .xml or .JSON (former because I know that is the format all of the games prior to Absolution use, even if they are translated then to .loc files; latter because from what I understand of the World of Assassination modding tools, the scripts convert into JSON files instead of XML) file from these .pc_resourcelib files. There are also console ports for this game, for the PS2 and Xbox360, which have the respective prefixes there (from what I understand, I have not gotten the Xbox version of this but the PS2 game files are .ps2_resourcelib). From what I know, the Xbox360 ones are slightly harder to crack than the PS2 and PC ones. On top of the fact that just having the script for a game with this advanced of AI dialogue for 2011 would be so nice to have (given most players speed through the game and miss SO much dialogue unless they replay often), the extraction process is complicated for the audio version, which would make having readable dialogue (rather than stitching it together with the audio) much simpler. I do not need to repackage these into any other file format (as I am not using them for translation), I just need them to be readable because well, this is a game that feels extremely underexplored dialogue wise and I would really like to have the dialogue files more accessible for both translators (which, again, old and not super popular game, so not super likely that new translations will be made) and for fans who enjoy the really realistic AI dialogue that is a unique feature of Absolution. As I said earlier, it would be amazing to have these in .xml or .JSON files or in some kind of readable format, and I really do feel the avenue of QuickBMS scripts is what makes the most sense, since there are already multiple scripts out there for other aspects of this file format (even if there is not much research on it) and it can do batch processing, which is absolutely necessary with this many files and the file names being a mishmash of letters and numbers. I'm aware this is a very big ask in general, with how much I have heard of this being an absolute pain to work with (and from my own research, it absolutely has been a bit frustrating to gather a ton of research when no one really gets into how to unpack the files (in terms of what files are actually in each .pc_resourcelib file) or how to really decrypt them) and this being such an obscure format, and I would really appreciate any help. Whether the help is a solution for this via a QuickBMS script (or program I missed/overlooked), tips on how to even remotely start the process making my own code for QuickBMS (which, if I was more knowledgeable with code, would have been probably my first step), or even if anyone has experience with the tools for the Glacier engine enough to be able to find a version that works with this game. I appreciate any assistance at all and thank you for sticking with me for a very long post (as I wanted to make sure all of the information was gathered in one place with how hard it is to find information on this without being on the Wayback Machine for hours). I have attached one of the (longer, as some of them have literally one line of code in the file maximum) .pc_resourcelib files in this Dropbox link, if anyone wants to take a crack at it! This file is from the game's root folder (I am using a Steam install)/runtime/common/pc.layout.config. Thanks for reading, and if anyone helps, thank you SO so much. Edit: There is a Hitman Audio Extractor program, but the issue is that again, I am trying to access the tech files and I believe that there is no download for this available because the page is gone other than in archives, although it seems a version of it exists in the Hitman Audio Tools, which also has had to be archived, but again is focusing more on the sound > written dialogue. Edited March 1Mar 1 by laorill Edited to add a small bit of information at the end
March 2Mar 2 Localization I'll take a look, at first glance it doesn't seem THAT complicated. also some things for next time: Please keep yourself short, if someone is thinking about helping out, there's a good chance of them being deterred by a wall of text, you could've made this way simpler, for example: Hi, I'm trying to extract <bla> from game <bla> (platform(s)) Here are things that I think might be helpful: - <link> <comment as to why> ... Here are things/tools I already tried: <same as above> Here are sample fileS (please always provide more than one)
March 2Mar 2 Localization Did some more research and seems to be a version 2 of the format used in Deus EX: Mankind Divided (which would be version 1)
March 2Mar 2 Author 8 hours ago, NeoGT404 said: I'll take a look, at first glance it doesn't seem THAT complicated. also some things for next time: Please keep yourself short, if someone is thinking about helping out, there's a good chance of them being deterred by a wall of text, you could've made this way simpler, for example: Hi, I'm trying to extract <bla> from game <bla> (platform(s)) Here are things that I think might be helpful: - <link> <comment as to why> ... Here are things/tools I already tried: <same as above> Here are sample fileS (please always provide more than one) Thank you for helping! Here is another sample file, the biggest in the folder, and sorry for my formatting issues! I will keep that in mind going forward! 6 hours ago, NeoGT404 said: Did some more research and seems to be a version 2 of the format used in Deus EX: Mankind Divided (which would be version 1) I see! That is interesting, I didn't even consider looking into different versions of the format. That would rule out using the DXMD tools then, correct?
March 3Mar 3 Localization 19 hours ago, laorill said: I see! That is interesting, I didn't even consider looking into different versions of the format. That would rule out using the DXMD tools then, correct? Yup, but will probably make it easier for me (except if it's like totally different) Update: it's totally different lol but I'm making progress [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all TEXT 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all TEXT 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all TEXT 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all TEXT 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all MRTR 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all MRTN 37 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all TELI 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all PRIM 37 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all MATE 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all MATI 46 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all TEXT 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all PRIM 37 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all PRIM 37 Edited March 3Mar 3 by NeoGT404
March 3Mar 3 Localization Solution Finished! https://github.com/smiRaphi/UniPyX (https://github.com/smiRaphi/UniPyX/commit/1efad76dd9c46be3809473792ef57788446aa90c) You have to give it the .pc_headerlib files and the .pc_resourcelib files have to be in the same directory, the tool will (for most files) also tell you "WARNING: <file> doesn't exist, skipping", this is normal as some header files have info for files that seemingly weren't shipped. You will find your wanted text files in the subfolders in their original form (.teli) & an extracted form (.txt) Edited March 3Mar 3 by NeoGT404
March 3Mar 3 Author 8 hours ago, NeoGT404 said: Yup, but will probably make it easier for me (except if it's like totally different) Update: it's totally different lol but I'm making progress [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all TEXT 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all TEXT 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all TEXT 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all TEXT 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all MRTR 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all MRTN 37 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all TELI 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all PRIM 37 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all MATE 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all MATI 46 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all TEXT 24 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all PRIM 37 [[assembly:/common/globalresources.ini].pc_resourcelibdef](0001).pc_resourcelib DD86AFE034044E63A12E35C2FD7C0025.pc_resourcelib all PRIM 37 Thank you so much!! All of this is so beyond my skill level, I am so impressed that you figured it out! 2 hours ago, NeoGT404 said: Finished! https://github.com/smiRaphi/UniPyX (https://github.com/smiRaphi/UniPyX/commit/1efad76dd9c46be3809473792ef57788446aa90c) You have to give it the .pc_headerlib files and the .pc_resourcelib files have to be in the same directory, the tool will (for most files) also tell you "WARNING: <file> doesn't exist, skipping", this is normal as some header files have info for files that seemingly weren't shipped. You will find your wanted text files in the subfolders in their original form (.teli) & an extracted form (.txt) Maybe a stupid question, but when I am looking at the game folder, there are only 22 headerlib files compared to the 5,905 resource lib files, I am assuming that it doesn't need to be 1:1 with how many files are in each category and just that they have to be in the same folder, right? Thank you SO so so much!! I will report back how it works as I am not super familiar with Python so will be working on getting all of these files translated today!! Thank you SO so much again, I appreciate it so much!!!
March 3Mar 3 Localization Yup, just the same folder and yeah one headerlib file can have entries for a bunch of resource lib files. Happy modding!
March 3Mar 3 Author 1 minute ago, NeoGT404 said: Yup, just the same folder and yeah one headerlib file can have entries for a bunch of resource lib files. Happy modding! Thank you so much!! I figured so but wanted to double check!! Thank you again, I appreciate this so so much!!
March 3Mar 3 Author 53 minutes ago, NeoGT404 said: Yup, just the same folder and yeah one headerlib file can have entries for a bunch of resource lib files. Happy modding! Thank you for all of the help! Unfortunately, I am having an odd error with this code, would you mind helping me further? I'm using Python 3.14 (on Linux, if it makes a difference here at all). I installed the program from the Github link (downloaded the zip and extracted it), opened the command line in that folder, and entered in "python unipyx.py [directory to the folder with the pc.layoutconfig files] [output folder path]" and got this error: Traceback (most recent call last): File "/home/[username]/UniPyX-main/unipyx.py", line 51, in <module> from lib.main import main_extract as extract File "/home/[username]/UniPyX-main/lib/main.py", line 107, in <module> TMP = os.getenv('TEMP').strip('\\') + '\\' ^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'strip' I tried to look into this on my own, and couldn't really see what I was doing wrong. Do I need to specify which hexpat file to use in the command or do you have any idea of what is going wrong here? Do I need to specify more with the input folder so that it grabs every file in there instead of just putting it at the folder (my specific command was "python unipyx.py /home/[username]/Downloads/absolution_files/pc.layoutconfig /home/[username]/Downloads/absolution_files/txtfilesconverted", with my username redacted). I'm sorry for needing help with this, I am just incredibly inexperienced with Python and Python programs so am a little lost here! Thank you again for all the help with making this and any suggestions of how to fix this error!
March 3Mar 3 Localization ooh, yeah it's only written for & tested on windows so that would be the issue, sorry! rewriting it properly for linux would be a pretty big pain especially for dependency downloading
March 3Mar 3 Author 5 minutes ago, NeoGT404 said: ooh, yeah it's only written for & tested on windows so that would be the issue, sorry! rewriting it properly for linux would be a pretty big pain especially for dependency downloading That makes sense! It absolutely would be, I will give this a shot on a Windows machine then, and report back on if it works, thank you again!!
March 4Mar 4 Author 6 hours ago, NeoGT404 said: ooh, yeah it's only written for & tested on windows so that would be the issue, sorry! rewriting it properly for linux would be a pretty big pain especially for dependency downloading So sorry to have tech issues again and need help, I just seriously have no idea what I am doing with Python so I am very lost here. I installed it on Win 11, with the newest version of Python, I installed all of the requirements and it is throwing a fit when I get the message that it is downloading lessmsi, and it reads File "C:\Users\[username]\lib\main.py", line 477 in analyze tret = (tret or trype (tret) ! = bool) and ret UnboundLocalError: cannot access local variable 'ret' where it is not associated with a value I again could not find much online and thank you for providing tech support with this, I just really do not know the first thing about Python so I am running into issues. Thank you for being so patient with me and helping me through this.
March 4Mar 4 Author 15 hours ago, NeoGT404 said: What did you give it as arguments? I typed in "python unipyx.py E:\absolution_files\pc.layoutconfig E:\\absolution_files\txtconverted. Thanks for the reply and furthered help!
March 5Mar 5 Author 10 hours ago, NeoGT404 said: You have to give it a file as input That makes sense, thank you!! It just wasn't super clear in the Readme, as I had assumed that <input> meant it could be either an input file or input directory, so that's on me for not realizing it was written differently to how the output directory part of the command is. Thank you for taking all of this time to help me out here!! Since there are nearly 6000 files in the .pc_resourcelib directory and every file name is 32 characters with random numbers and letters, is there any way to run this program for the entire directory? Or in a big batch somehow? I just cannot imagine how long this would take to convert every file (which is what I am trying to do) one by one with how long it would take to type things out and run the command 5,928 times. I really appreciate you writing this program for me, and I am not trying to constantly ask for more things or have a ton of questions, I just wasn't sure if there was a Python command I could put in in addition to the code you have written for the Usage section on Github to have it scan the entire folder (I have seen people with similar problems say that you can loop after running os.listdir or using pathlib, but again, I am a complete newbie to Python and do not understand it remotely, so these suggestions could be completely wrong), or if a .bat file would work to scan the whole folder and run the program on the whole folder? I just really cannot do this on a file by file basis as it would take forever to type and run the program nearly 6000 times. I'm not sure how complicated it would be to add batch processing to this program, and again, I really do appreciate everything you have already done for me, but I would love any suggestion on how I could run this for the entire folder rather than one on one or if there is any way you could implement scanning the directory and running the directory into the program? Thanks so much!
March 5Mar 5 Localization You just have to run it on the .pc_headerlib files but you can always make a simple batch script: @echo off for %%f in (*.pc_headerlib) do ( echo %%f python <unipyx path> "%%f" ) Edited March 5Mar 5 by NeoGT404
March 5Mar 5 Author 55 minutes ago, NeoGT404 said: You just have to run it on the .pc_headerlib files but you can always make a simple batch script: @echo off for %%f in (*.pc_headerlib) do ( echo %%f python <unipyx path> "%%f" ) Thank you so much, it's working now! Thank you for walking me through it with how many issues I was having, I really appreciate it a lot!! And sorry again for all of the questions! It's also unpacking some of the audio files, I'm so impressed with how above and beyond you went to get this format extracted fully, thank you so much again!
March 10Mar 10 Localization On 3/3/2026 at 4:41 PM, NeoGT404 said: Finished! https://github.com/smiRaphi/UniPyX (https://github.com/smiRaphi/UniPyX/commit/1efad76dd9c46be3809473792ef57788446aa90c) Does the tool also work for Marvel's Guardians of the Galaxy 2021 game files?
March 10Mar 10 Localization @Gynesh Murati Maybe, try it out, if it's a format that's used in any other game, it might be, if it's specific, no
April 12Apr 12 Author If anyone else is needing to extract files from Hitman Absolution, pavledev reached out to me and mentioned that they created a Hitman Absolution Editor, which may be easier to use! It's here.
Create an account or sign in to comment