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

Leaderboard

Popular Content

Showing content with the highest reputation since 08/26/2026 in all areas

  1. The BNK files are compressed with XMemCompress. The LZXNATIVE magic starts at 0x7D0. Everything before it is padding. Drop the contents of the 7-Zip archive into the folder with the BNK files and then run: .\decompress_bnk.ps1 Stuntman Ignition.7z
  2. The progress for the Unreal Engine game loader is that the game boots all the way to the Menu and now I'm just implementing a model viewer to debug assets a lot faster Unreal uses the .xbe to load the models and mesh, I haven't implemented the shaders and such yet, just the mesh building
  3. I'm not sure if this is the right place to post this. it's not a help request or anything like that but I just wanted to share the binary template I created for the SF643D .modelgdb format. I made one for the final game (complete with all parameters) and one for the 2010 prototype (incomplete, covering only the geometry structure). SF643D_010Editor_Templates //The size is huge because it contains numerous node options and sub-options, all with specific identification IDs (as far as I recall, mine are 100% correct; I compared them against the .modelgdb.tex versions "original binary-to-text" conversions left behind in the game). //There are some .modelgdb models that contain "Node_Node" structures. These structures consist of matrix values attached to specific geometry IDs; for instance, a model located at the center of the scene might be moved to a different position based on a Node_Node referencing a specific geometry ID. Only about six models actually use this feature the rest simply use the final pose. I wrote a Noesis plugin to load these models, but the way these matrix-based nodes function makes them a nightmare to handle within a tool like Noesis. Consequently, my Noesis plugin is incomplete, and there are still some vertex formats whose structures I haven't figured out yet. This is the kind of format where it's better to build a specialized tool rather than trying to use Noesis. (If there are any errors or signs of amateurism in the template I created, I apologize; it’s the first template I’ve written that is this complex and large.) //If you want to test a sample here SF3D_modelgdb_sample.zip
  4. The .pck is a ZIP file in disguise. However, two things were changed. 1. Every PK signature (50 4B) is written as OD (4F 44). 2. The zlib header byte 78 is written as 02 Plus one structural change: local file headers are omitted entirely. Entry offsets point straight at the raw deflate payload. The .dir and .tbl files are redundant lookup caches. Use the script attached to extract everything/or just the textures. python zpak_extract.py pack_prog_res.pck # extract everything python zpak_extract.py pack_prog_res.pck -o out --verify # + check every CRC python zpak_extract.py pack_prog_res.pck --list # list, don't extract python zpak_extract.py pack_prog_res.pck --textures # dds/tga/bmp/png/jpg only zpak_extract.py
  5. okay i have made a decoder that extracts SOME textures, now i do not know how to continue about with this... if anyone could take over please? More Samples.rar tpl.py
  6. Hi! here my beta direct Blender script importer APT__Character_Importer_Blender_5_2_v0_1.zip
  7. yea I sorted it out I do Know the unnamed files are likely Audio files?
  8. Interesting. My tool initially failed, but I have added support for it. Here’s a quick ’n dirty script for decrypting the bundles. Let me know how it goes. 👍 python .\holodreams.py "path\to\hololiveDreams\game\folder" "path\to\folder\for\decryption" # Example python .\holodreams.py "D:\Steam\steamapps\common\hololiveDreams" "D:\Steam\steamapps\common\hololiveDreams\decrypted" holodreams.py
  9. The stuff I had figured out is that the XNV might be where the bone data is stored
  10. AAAA THANKS!!! THIS HELPS A BUNCH! I haven't tested it on man game or the other folders since thats 16 gb... but I will inform if anything is weird!
  11. Each bundle uses a unique key derived from a password and its filename. Give the script a try and let me know if you run into any issues. 👍 # Make sure the cryptography package is installed before running the script python -m pip install cryptography python .\decrypt_srwy.py "path\to\folders\with\bundles" decrypt_srwy.py
    • 32 downloads
    • Version 1.0
    A Pague Tale Games Font and Localization Tool - FEARka Tools for editing text and font files from all three A Plague Tale games: Innocence, Requiem and Resonance. It supports .pc and .IGN file export, import and comparison, as well as DPC font extraction, TTF/OTF atlas rebuilding and font import. The package includes separate GUI applications for localization and font editing. Python 3.10 or newer is required. Font atlas rebuilding uses the included msdf-atlas-gen.exe. Testing has been performed with the BIG_FONT, SMALL_FONT and SMALL_FONT_02 mappings, using the included TTF files and their default font sizes. Other mappings, fonts or custom sizes may require additional testing.
  12. No problem at all. The pleasure is all mine!
  13. Hi @Falkrian , thank you so, so much!!!! It worked perfectly, and all the textures are displaying flawlessly. I truly appreciate it from the bottom of my heart! 🙏
  14. Oo, good 👍
  15. I checked the .pak files and found that most use QuickLZ 1.5 level 3 compression. A few are normal ZIP archives under the .pak extension. The technical analysis can be found here. python .\alganon_pak.py "path\to\pak\file" "path\to\extraction\folder"alganon_pak.py
  16. The ZSTD compress algorithm is hide into the exe About the script udpate , i have done an update .. perfectible but it work i haven't share it before because no one have give me a response to test it deeper scripts.npk, shaders and mtlgen can be unpack all .pyc from the script.npk still have a ZSTD compression Once_Human_NPK_2026.7z
  17. just checked and yeah the mercedes.exe is the exact same as his, your TruckRace.exe is an InstallShield 2000 installer which I've now added support for but I can't find anything regarding encryption, I've found the LZSS function but also didn't see anything near it
  18. @UZ.- simple .pak unpacker. Extracted data might be compressed i think, need deep analysis, but .png images not compressed unpack.py
  19. I have some encrypted ones from "Mercedes-Benz Truck Racing". Here you go: SYN_SAMPLES.zip
  20. As promised, here is the marmoset beta design that I've mentioned 🙂
  21. Hi @Hazza12555 Thank you so much for your help! It worked perfectly and extracted all the textures without any errors! I hope you have a great day! You’re very smart! Best regards!
  22. Found another one that's not working, I don't remember which version it's from but also from archive.org for sure nvm, figured it out myself, it's just the name but lowercase also added support for it with the decrypting being done by a C backend so it's WAY faster: https://github.com/smiRaphi/UniPyX/commit/14797a351c0bd8fe11978ee3563ed573a54148f2 Config_00000.zip
  23. LZSS compressed use script to extract content from SYN files from this game syn_extract.py needs Python 3.6+ whole tree - walks *.SYN recursively python syn_extract.py mercedesbenztruckracing_syn extracted one archive; output dir defaults to "extracted" beside the input python syn_extract.py Textures/Textures.SYN explicit destination python syn_extract.py Cockpit/Textures/Textures.SYN /tmp/cockpit-tex syn_extract.py
  24. @DKDave, @wq223 and @Champs: hi! I'm trying to create an Italian localisation for Once Human and I'm currently stuck with the newer script.npk format. I noticed the discussion about COMP_TYPE 4, ZSTD, the 28 B5 2F FD magic number, and Champs' updated BMS script. neox-tools detects my script.npk as NPK Version 2 but cannot unpack it (embedded file names), while older tools don't work correctly either. Does anyone still have the updated BMS script mentioned by Champs, or know where I could find it? I'd be happy to test it on the current Steam version and provide samples if needed. Thanks!
  25. Working on it... But struggling with decompression via noesis. You need to use BMS first to decompress *.XMD. Or maybe i'll figure out. EDiT: Figured out. Now you don't need to decompress model... Here we go... # Script by h3x3r from inc_noesis import * import noesis import rapi import os def registerNoesisTypes(): handle = noesis.register("Deadly Premonition - XMD Mesh", ".xmd") noesis.setHandlerTypeCheck(handle, noepyCheckType) noesis.setHandlerLoadModel(handle, noepyLoadModel) noesis.logPopup() return 1 def noepyCheckType(data): bs = NoeBitStream(data) bs.read(8) CSize = bs.readUInt() Size = bs.readUInt() Buffer = bs.read(CSize) data = rapi.decompInflate(Buffer,Size) bs = NoeBitStream(data) if len(data) < 20: return 0 if bs.readUInt() != 0x33444D58: return 0 return 1 def noepyLoadModel(data, mdlList): bs = NoeBitStream(data) bs.read(8) CSize = bs.readUInt() Size = bs.readUInt() Buffer = bs.read(CSize) data = rapi.decompInflate(Buffer,Size) bs = NoeBitStream(data) baseName = rapi.getExtensionlessName(rapi.getLocalFileName(rapi.getInputName())) ctx = rapi.rpgCreateContext() Underline = "_" # Main Info Sign = bs.read(4) ResourceSize = bs.readUInt() TotalIndexCount = bs.readUInt() TotalElementCount = bs.readUInt() Unknown_2 = bs.readUInt() Reserved0 = bs.read(20) Unknown_3 = bs.readUShort() BoneCount = bs.readUShort() ShapeCount = bs.readUInt() Unknown_4 = bs.readUInt() Unknown_5 = bs.readUByte() Unknown_6 = bs.readUByte() Unknown_7 = bs.readUByte() Unknown_8 = bs.readUByte() Unknown_9 = bs.readUByte() ElementStride = bs.readUByte() NormalSkinStride = bs.readUByte() Unknown_12 = bs.readUByte() Reserved1 = bs.readUInt() BBoxMin = bs.read(12) BBoxMax = bs.read(12) Unknown_13 = bs.readUShort() Unknown_14_Count = bs.readUShort() Unknown_15 = bs.readUInt() Unknown_16 = bs.readUInt() MaterialDefOffset = bs.readUInt() BoneDefOffset = bs.readUInt() ShapeDefOffset = bs.readUInt() Unknown_17 = bs.readUInt() Unknown_18 = bs.readUInt() UnknownDefOffset = bs.readUInt() Reserved2 = bs.read(16) IndexBufferBaseOffset = bs.readUInt() ElementBufferBaseOffset = bs.readUInt() NormalSkinBufferBaseOffset = bs.readUInt() Reserved3 = bs.read(16) Unknown_14_Offset = bs.readUInt() print("Element Stride >",ElementStride,"NormalSkin Stride >",NormalSkinStride) # Material Info bs.seek(MaterialDefOffset, NOESEEK_ABS) MaterialName = bs.readString() rapi.rpgSetMaterial(MaterialName) # Shape Info bs.seek(ShapeDefOffset, NOESEEK_ABS) for i in range(0, ShapeCount): StrPos = bs.tell() ShapeName = bs.readString() bs.seek(StrPos, NOESEEK_ABS) bs.read(16) Unknown_0 = bs.readShort() BoneId = bs.readShort() Unknown_2 = bs.readUInt() Unknown_3 = bs.readUInt() BBoxMin = bs.read(12) BBoxMax = bs.read(12) IndexCount = bs.readUInt() ElementCount = bs.readUInt() IndexOffset = bs.readUInt() * 2 ElementOffset = bs.readUInt() Unknown_4 = bs.readUInt() Reserved = bs.read(8) cPos = bs.tell() bs.seek(ElementBufferBaseOffset + (ElementOffset * ElementStride), NOESEEK_ABS) ElementBuffer = bs.read(ElementCount * ElementStride) if ElementStride == 20: rapi.rpgBindPositionBufferOfs(ElementBuffer, noesis.RPGEODATA_HALFFLOAT, 20, 0) rapi.rpgBindUV1BufferOfs(ElementBuffer, noesis.RPGEODATA_HALFFLOAT, 20, 8) elif ElementStride == 24: rapi.rpgBindPositionBufferOfs(ElementBuffer, noesis.RPGEODATA_FLOAT, 24, 0) rapi.rpgBindUV1BufferOfs(ElementBuffer, noesis.RPGEODATA_HALFFLOAT, 24, 12) bs.seek(NormalSkinBufferBaseOffset + (ElementOffset * NormalSkinStride), NOESEEK_ABS) NormalSkinBuffer = bs.read(ElementCount * NormalSkinStride) if NormalSkinStride == 12: rapi.rpgBindNormalBufferOfs(NormalSkinBuffer, noesis.RPGEODATA_HALFFLOAT, 12, 0) rapi.rpgBindBoneWeightBufferOfs(NormalSkinBuffer, noesis.RPGEODATA_HALFFLOAT, 12, 6, 3) elif NormalSkinStride == 16: rapi.rpgBindNormalBufferOfs(NormalSkinBuffer, noesis.RPGEODATA_HALFFLOAT, 16, 0) rapi.rpgBindBoneWeightBufferOfs(NormalSkinBuffer, noesis.RPGEODATA_HALFFLOAT, 16, 8, 3) bs.seek(IndexBufferBaseOffset + IndexOffset, NOESEEK_ABS) IndexBuffer = bs.read(IndexCount * 2) rapi.rpgSetStripEnder(0xFFFF) rapi.rpgSetName(ShapeName) rapi.rpgCommitTriangles(IndexBuffer, noesis.RPGEODATA_USHORT, IndexCount, noesis.RPGEO_TRIANGLE_STRIP) bs.seek(cPos, NOESEEK_ABS) mdl = rapi.rpgConstructModel() mdlList.append(mdl) return 1No skin/bones/skeleton. Could be done later...
  26. Hey, Have you tried to decompress and/or recompress to see if it works or not? I went with SLPM_66447 because I assumed that is what the topic author is using judging by the screenshot. Could I ask you to share a *.pack file from SLPM_66848 or at least some file that has the compression? I will try to get my hands on SLPM_66848 myself and see if there is any difference. UPDATE #1 I have managed to get my hands on SLPM_66848 and can confirm that there was only one minor change to Capcom's YZ2 compressor. I have managed to extract msg.pack from LINKDATA.AFS and decompressed/recompressed the file with the slightly modified script. The original file and recompressed file are identical. YZ2.py

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.