Leaderboard
Popular Content
Showing content with the highest reputation since 10/03/2025 in Posts
-
I have released an early version of the tool that can do just meshes with their material names/skeleton:4 points
-
3 points
-
Those BSTEX files are just containers for PS Vita GXT image files. Here's a file format https://rewiki.miraheze.org/wiki/GXT_Image If you remove manually 32 bytes from BSTEX file in hex editor and change file extension from BSTEX to GXT, you will be able to open them in Scarlet. Unfortunately PVRTII4BPP is not supported by Scarlet, so you will be able to convert only BC/DXT textures this way. While doing research on your samples, I discovered that ImageHeat had a bug while unswizzling 4bpp PS Vita textures. I fixed this bug in v0.26.3, so you can use this version (or newer) to properly view PVRTII4BPP textures:3 points
-
2 points
-
2 points
-
I am updating the Noesis script from this post to handle more versions of the 3D model rsf format. Soon I will release an update to the script. Meanwhile, as a sample, I want to show some extracted models that we were not able to extract with the old script. On the top left corner we find the Orange Bowl stadium from NCAA 08. On the top right corner we see the hologram (a ficticious one) stadium from Madden 13. The low left corner shows the LA Memorial Coliseum from Madden 12 or 13 and finally on the low right corner we find the Louisiana Tech stadium from NCAA 12. All these rsf files come from the PS3 versions of the games with data in big endian. The script can handle data in little endian too, for example rsf files coming from PS Vita games. I am almost 100% sure that the updated script will be able to handle rsf files from NCAA 08 to NCAA 14 and Madden 07 to Madden 17 with no issues.2 points
-
Format: .avi Codec: MV30 Coding program: VirtualDub build 13719/release You can decode it using ffmpeg. Standard videos of the old format.2 points
-
There might be a way to find the password using Cheat Engine. Install Cheat Engine, load the game and open the games process. Click on Memory View, go to Search, Find memory and search for this text - jPGbPK6KENwG9ey If found, the password should be very close to this, 44 char long - M2Q6Dj6a*7NxX|gYHe8UH8o9]3CWDjPGbPK6KENwG9ey2 points
-
Okay I figured out all of the .mdl's thanks to Shak's original response. All of them can be previewed and exported using the Fable 2 Asset Browser now, which is what I was kind of aiming for. I can get the skeletons out, idk if they're necessarily correct or not, but they works so I can only assume it's fine. So I'm going to turn my attention to the .tex file compression and animations. Obviously looks better in blender but yeah. I'm sure everyone gets the point.2 points
-
2 points
-
You can use my latest Fmod Bank Tools - https://www.nexusmods.com/rugbyleaguelive3/mods/2 https://github.com/Wouldubeinta/Fmod-Bank-Tools Just PM me for the bank password.2 points
-
i update my plugin : fmt_DS2_PS3_geo.py *(The uvs file must be located in the same folder as the model, either in the "MeshVolatile" subfolder or next to the model.)2 points
-
2 points
-
2 points
-
2 points
-
It's a program for viewing/editing data from binary files. Some example hex editors are "Hex Workshop", "HxD", "010 Editor" etc. Sorry, but sharing raw game assets is against forum rules (rule 11) https://reshax.com/topic/5-site-rules/ You can't. It was not released yet. But you can build it from the source. There is instruction in readme file on github. Or just wait until new version release.2 points
-
2 points
-
2 points
-
1 point
-
Try this tool, made some adjust to read your file. zstd decompressor.zip1 point
-
Actually your file is a container with a bunch os zstd files. attached the first file decompressed. I did a tool, long time ago, i will search here. head_conor_mcgregor_model_CB540.mcd.zip1 point
-
It's not just 1 block of data, there are multiple compressed ZSTD blocks in your sample file that have to be joined together - e.g. at 0, 0x129b0, 0x31dd0, etc.. It looks as though each file is preceded by the compressed size and anotherr value, except the first block, which looks to be a compressed size of 0x129a0. You might have cut that bit off in your sample. Each block seems to decompress to 0x40000 bytes except for the last one, which is shorter. I guess the header might have some useful info.1 point
-
Hey all, I also recently got interested in modding the original QP Shooting. I'm currently working on a command-line tool that so far allows for extracting and repacking the LAG assets, with decoding and encoding of dialogue/system files also now planned to be implemented. However, it seems after reviewing this thread that I wrongfully assumed that the graphics were red-blue-swapped A16B16G16R16 DDS surfaces rather than a special Luna/LAG image format... so that's probably another thing I need to fix up (although the assets can be modified fine with an editor that supports that DDS format once the header is written, so maybe it is just a slightly tweaked version of DDS). I'll post the GitHub link here when I polish and finish it up : )1 point
-
It uses a 1-byte xor encryption - you can use the attached QuickBMS script to decrypt it. The resulting file is a zip file with audio and other file types in. Hopefully the other files will all be the same. odau.zip1 point
-
@ikskoks Thank you for this script, I also was able to use it successfully. I had a question about the outputted `.kiw` files, there is bytecode in each file that corresponds to in game instructions like character dialogue expressions, choices, background images and music cues. What is the best way to reverse engineer the bytecode in these files? I am not sure of the game engine that made this but are there any existing parsers or scripts for `.kiw` or similar you know of?1 point
-
Awesome man, glad to have helped! If there's any other static meshes you need let me know1 point
-
Tutorial which describes how to export-import Horizon Forbidden West game assets by use of id-daemons HFW import tool: Required programs/tools: id-daemons HFW import tool Blender 3.6 ASCII Import-Export Blender Add-on (HFW) HFW Export-Import Tutorial.pdf1 point
-
Hello! My goal is to replace texts in Unity games, no matter if the new text data is smaller or bigger than the original. I start by believing you can "rebuild" the resources file: partial replacement (because of the varied 00s after the file path. See Knowledge section) + pointer edit but no matter what script I do, the game shows no texts! And that drive me insane the more I work on it! Replacing texts with smaller one (or space only) through Hex Editing will come out fine (Proven by modding SpookWare and Fishlike, even if the edit is in levelX files). So, it has to be something with pointers (Checksum even!) but where? Hex Edit example: Notice the space after the new name? [EDIT] It's possible to make the text a bit longer or shorter but the length of [text + 00s] must be a divisible of 4. If the original text length is 5, the new text should be between 6 and 8. Don't forget to change the text length number! If the text ends with 4 zeroes, the game will crash. (I overlooked this part, this explain why my script didn't crash the game). When the text replacement script is finished, we can add new bio or Google Translated text shenanigans! If you find something, feel free to share! Python Scripts: Unity Text Extractor Script: Extract all texts data into a txt file for view and modification. Only work with the magic word "I2Languages". Unity Text Extractor Script.py Unity Text Extractor Selective Script: Same but only take the text blocks of interested for edit. Create a txt file of text paths list you wish to extract. Unity Text Extractor Selective Script.py Unity Text Replacer Script (Work in progress): This script attempts to replace texts, including editing header and file size number. Use Dungeon Clawler 2024 Demo resources file as base. Unity Text Replacer Selective Script.py Knowledge (so far) UNITY TEXT FORMAT (Little Eudians) (ressource.assets) 4 Bytes = 01 00 00 00 4 Bytes = Number of Something 4 Bytes = 00 00 00 00 4 Bytes = 0B 00 00 00 (Lenght of "I2Languages") 12 Bytes = I2Languages 00 8 Bytes = 00 00 00 00 00 00 00 00 4 Bytes = 01 00 00 00 4 Bytes = Number of Test/Translation Blocks For [Number of Test/Translation Blocks] times { 4 Bytes = Number of Languages (Absent on First Block) 20 Bytes = 00s (Absent on First Block) 4 Bytes = Path Name Lenght X Bytes = Path Name (Has to contain "/", "_" and no Space) 0 - 15 Bytes = 00 (For completing if the text lengh isn't a divisible of 16) (Unsure) If the Interger Division of [Total of the two above] / 16 is 0 {4 Bytes = 00 00 00 00} 4 Bytes = Number of Languages For (Number of Languages) Times { 4 Bytes = Lenght of Text X Bytes = Text [0A are "\n" (Return to Line)] 0-3 Bytes = 00 (For completing if the text lengh isn't a divisble of 4) } } 4 Bytes = Number of Languages 24 Bytes = 00s 4 Bytes = 01 00 00 00 / End Point without the App_Name Name UNITY RESOURCE HEADER (Little Eudian) Found after the huge chuck of indescribable bytes and 00 00 00 00 at the start 24 Bytes { 4 Bytes = Pointer Number 4 Bytes = 00 00 00 00 4 Bytes = Pointer (?) 4 Bytes = 00 00 00 00 4 Bytes = Length of a Data (?) 4 Bytes = A Number Maybe File Type? }1 point
-
Hello, you really should put more effort in your request. People who could help don't have all the time in the world, to unpack a vfs, search for the sggr in question, which samples have the "lod problem", etc, etc. WHY not simply upload the samples in question plus a description what EXACTLY you've done so far to get uvs. Your post here is not very insightful, imho.1 point
-
import struct import os import sys from PIL import Image # Constants for offsets FILE_COUNT_OFFSET = 0x28 FILENAME_TABLE_OFFSET = 0x2C DATA_INDEX_OFFSET = 0x178C # A SINGLE, CORRECT LOOKUP TABLE FOR IMAGE DIMENSIONS BASED ON FILE SIZE. # All files are grayscale (1 byte/pixel). SIZE_TO_DIMENSIONS = { 262144: (512, 512), 524288: (1024, 512), 1048576: (1024, 1024) # Add more entries here if new sizes appear } def extract_grayscale_images(file_path, output_dir): """ Extracts all image files from a given .dat archive, assuming they are raw grayscale pixel data. """ with open(file_path, 'rb') as f: # Read the total number of files in the archive f.seek(FILE_COUNT_OFFSET) file_count = struct.unpack('<I', f.read(4))[0] # Read the filename table f.seek(FILENAME_TABLE_OFFSET) filenames = [] for _ in range(file_count): try: name_len = struct.unpack('<I', f.read(4))[0] filenames.append(f.read(name_len).decode('ascii', errors='replace')) except (struct.error, IndexError): # Stop if the file ends unexpectedly break # Move to the data index table f.seek(DATA_INDEX_OFFSET) print(f"Starting extraction of {len(filenames)} files (all as grayscale)...\n") success_count, skipped_count = 0, 0 for i, filename in enumerate(filenames): try: # Read the offset and size for the current file entry_data = f.read(8) if len(entry_data) < 8: break # Reached end of index offset, size = struct.unpack('<II', entry_data) # Check if we know the dimensions for this file size if size not in SIZE_TO_DIMENSIONS: print(f"[{i+1}/{file_count}] {filename} -> UNKNOWN SIZE ({size} B). Skipping.") skipped_count += 1 continue width, height = SIZE_TO_DIMENSIONS[size] # Read the pixel data current_pos = f.tell() # Save current position in the index f.seek(offset) pixel_data = f.read(size) f.seek(current_pos) # Return to the index # Prepare the output path, preserving directory structure safe_name = filename.replace('.dds', '.png').replace('\\', os.path.sep).strip(os.path.sep) out_path = os.path.join(output_dir, safe_name) os.makedirs(os.path.dirname(out_path), exist_ok=True) # ALWAYS convert as 'L' (grayscale) img = Image.frombytes('L', (width, height), pixel_data) img.save(out_path, 'PNG') print(f"[{i+1}/{file_count}] {filename} -> {out_path} ({width}x{height}, Grayscale)") success_count += 1 except Exception as e: print(f"[{i+1}/{file_count}] {filename} -> CRITICAL ERROR: {e}") skipped_count += 1 print(f"\nFinished! Converted: {success_count}, Skipped: {skipped_count}.") if __name__ == "__main__": if len(sys.argv) < 2: print(f"Usage: python {os.path.basename(__file__)} <file.dat>") sys.exit(1) input_file = sys.argv[1] # Create a more standard output directory name output_dir = os.path.splitext(input_file)[0] + "_extracted_images" print(f"Input file: {input_file}") print(f"Output directory: {output_dir}\n") extract_grayscale_images(input_file, output_dir) This script unpack texture. The file names are given with the .dds extension, but these are not DDS files. There are two types of files: those with [e] in the name build correctly, and those without [e] are strange. That's all I can help with. Script usage: python <scriptname>.py <path to file> e.g., python unpack.py sky.t000 - if it's in the same directory as the script.1 point
-
Hello! I was working on a Python script that replace Sprites data with another for Unity games but Unity has another trick in its sleeve. For those who use AssetStudio, you will extract sprites like this (from Dungeon Clawler 2024 Demo): But with a tweak, I found out Unity uses more data to store RGBA32 sprites! Unity uses an Anisotropic filter to enhance the quality. Something that is difficult to replicate with Python and every sprites doesn't follow the same rule! We have to follow them individually. Another example with Clawcula. Interestingly enough, a partial replacement works and those which lack shearing, like the Logo, are easier to replace. Not every sprites use all "layers" which should make things easier. What I replaced with: And here is the original one: Despise the flaw, it's sufficient replacement. I was close to replace the sprites with Animal Crossing cub villagers without using Unity (after the Unity controversy, which lead me to mod Unity games with Python). Video Example: https://drive.google.com/file/d/18L1NBMWRQjwmCnFElAzJ2ww6KMtV2YE9/view?usp=drive_link If you have information on reproducing correctly their Anisotropic effect, feel free to share! Python Scripts: Unity Image Extractor: This extract all sprite data from resource files. Work on RGBA32 and RGB24. Don't forget to create a new folder, I don't know how to make the script allow you to choose one. Unity Image Extractor Script FINAL.py Unity Image Replacer: This replace all sprites with those from the batch. Although it works for RGBA32 and RGB24, it works better for the latter. Unity Image Replacer Script FINAL.py Unity Ano Simulate (Work in Progress): An attempt to simulate the Anisotropic effect for a bulk. Work best for no shear one. Unity Ano Simulate Script (Bulk) with Shear.py1 point
-
1 point
-
1 point
-
The fonts are the last issue, i dont know where the character map for japanese and english is, i can redo all the pointers to support my text but i assume the charmap is in the fonts correct? that is my latest issue currently. I will link a folder with the decompiled and deswizzled files, although about half have no tile info or are swizzled with a different format, I will also link the decompiled file base as well. for example, most of the character and backround assets use the same texture format, but i dont know what tools or things to use for finding the fonts for the game, i just need the character map so i can remap all the characters to english. Here is the decompiled vers (images + files) : https://www.mediafire.com/file/8i7852px88k3ztv/extract1.zip/file and here is the compiled vers: (files + bms + decompile script): https://www.mediafire.com/file/ycglpfcr47vq6tq/iop.zip/file i have a working reswizzler if needed and i will just attach the tools below. I also need some help with the smaller images as the buttons have to be redone by a pixel guy i know and they are in smaller file formats / not being processed, also some of the title images and other miscellaneous images have different file and palette offsets that need to be found so that i can fully translate everything. Thank you! deswizzlenew.py reswizzlenew.py1 point
-
Good Have you investigated the font for this game? Is it perhaps located within a specific NKT file? Several KONAMI games use this development toolset. Besides NANA, this includes: Gantz: The Game Cy Girls Mahoromatic The file formats are all identical. If I can figure out the textures and fonts, perhaps I could also try to translate this game into my language in the future.1 point
-
I just did it manually using ImageHeat. There's some header data, presumably info for each tile, but it's not 100% clear what all the values mean. So it's not really a proper solution yet for all files that might have different size headers.1 point
-
The initial table at the start is offsets and sizes, as you've guessed. The attached initial QuickBMS script should extract all of the raw files for further analysis. There are no filenames other than what might be in some of the files. However, there are also many compressed files in the extracted "CARC" archives, which I haven't done anything about in my script. The .fsb files are audio banks and can be played directly with Foobar/vgmstream. b10.zip1 point
-
1 point
-
pack_00.itk is compressed. The small one doesn't. char Sign[4]; uint32 DataBaseOffset; uint32 ResourceCount; uint32 TotalFileSize; struct { char Name[64]; uint32 CompFlag; uint32 CompressedSize; uint32 Offset; uint32 DecompressedSize; }Table[ResourceCount]; Seems like compression is LZSS0. Here is decompressed image. Here's bms. You can also use it on unpacked itk files. They have same struct. #################################### # Dino Crisis 3 og xbox *.itk dump # #################################### get BaseFileName basename comType lzss0 idstring "ITK1" get DataBaseOffset uint32 get ResourceCount uint32 get TotalFileSize uint32 for i = 0 < ResourceCount getdstring ResourceName 0x40 get CompFlag uint32 get ZSize uint32 get Offset uint32 get Size uint32 string FileName p= "%s/%s" BaseFileName ResourceName if CompFlag == 0 log FileName Offset Size else clog FileName Offset ZSize Size endif next i1 point
-
You could trick around with the values in the first column here: address 0xae50: 27333 15813 2 1 3 10 33574 15813 4 1 5 10 20698 15679 5 1 0 10 20698 15679 3 6 2 10 50909 15763 2 6 7 10 57821 15714 8 9 10 10 41781 15991 10 9 2 10 53722 15917 11 10 12 10 62936 15979 12 10 2 10 45166 15977 12 13 11 10 10238 15846 11 13 14 10 10238 15846 2 12 15 10 58744 15664 15 12 13 10 58744 15664 2 15 9 10 34447 15579 9 15 16 10 34447 15579 17 18 19 10 address 0xaf10: 62859 15561 19 18 20 10 49943 15669 21 22 23 10 (Column 3 to 5 contain the FIs, btw.)1 point
-
For XNB you can use tools like xnbcli https://github.com/LeonBlade/xnbcli For TTF you can use tools like High-Logic FontCreator https://www.high-logic.com/font-editor/fontcreator For other files it's hard to tell because you didn't upload any samples.1 point
-
Tried this tutorial and tools DRP2LWO but it doesn't work for car models. Is there a free alternative to ZModeler with CRP filter plugin to import car models?1 point
-
with help of @DKDave, we got this bmses. to keep header: # For Honor Math OFFSET = 0 Get FILE_END asize For A = 0 If OFFSET = FILE_END Break Endif Goto OFFSET Get TYPE Long Get SIZE Long Get NAME_SIZE Long GetDString FILENAME NAME_SIZE String FILENAME P "%FILENAME%.%TYPE|x%" XMath SIZE2 "NAME_SIZE + SIZE + 12" Log FILENAME OFFSET SIZE2 Math OFFSET + SIZE2 Next A without header: # For Honor # Without header Math OFFSET = 0 Get FILE_END asize For A = 0 If OFFSET = FILE_END Break Endif Goto OFFSET Get TYPE Long Get SIZE Long Get NAME_SIZE Long GetDString FILENAME NAME_SIZE SavePos OFFSET String FILENAME P "%FILENAME%.%TYPE|x%" Log FILENAME OFFSET SIZE Math OFFSET + SIZE Next A and with some tweaks to get extensions: # For Honor - Extractor with extension mapping # Without header Math OFFSET = 0 Get FILE_END asize For A = 0 If OFFSET = FILE_END Break Endif Goto OFFSET Get TYPE Long Get SIZE Long Get NAME_SIZE Long GetDString FILENAME NAME_SIZE SavePos OFFSET # --- Extension mapping table --- If TYPE == 0x24aecb7c String EXT = ".RAWSKEL" ElIf TYPE == 0x415d9568 String EXT = ".RAWMDL" ElIf TYPE == 0xa2b7e917 String EXT = ".RAWDDS" ElIf TYPE == 0x9c2eff4f String EXT = ".RAWBONE" ElIf TYPE == 0x85c817c3 String EXT = ".RAWMTL" ElIf TYPE == 0x989dc6b2 String EXT = ".RAWMTL_I" ElIf TYPE == 0x953ac29c String EXT = ".RAWCLOTH" Else # fallback: use hex as extension String EXT P ".%TYPE|x%" EndIf # ------------------------------- String FILENAME P "%FILENAME%%EXT%" Log FILENAME OFFSET SIZE Math OFFSET + SIZE Next A1 point
-
I know this is from April but I want to give my two cents on this because I just figured out how to do this myself and I hope this can help other people as well. I'll try and simplify this in a step-by-step format as best as I can. Preliminary requirements Programs you will need include: Ryujinx (or any application that can extract NSP files) RevilLib (for file conversions) Kuriimu2 (for .arc file viewing & exporting) (Optional) Notepad++ or VS Code, I prefer these to create and format .json files in. 1. Getting the extracted files Using Ryujinx is the easiest way to convert the switch rom format (NSP) into something that will be readable by other programs. Right click on the game in the game list>Extract Data>RomFS. It will ask you where you want to output the files, I recommend somewhere you'll easily remember. This will take a few minutes. 2. Locating the desired files After you're done exporting the NSP, open Kuriimu and find the .arc file that you want to open. I haven't (for now) put together a library of monster IDs, but know that large monsters start with "em_xxx" in their file IDs, and small monsters are "ems_xxx". This is where the model and texture files for whatever monster you have selected will be (generally). The "mot" folder has the .lmt files in it though, so I would recommend exporting those into the same folder as the model and texture files. 3. Converting the .mod file(s) This is by far the easiest step. You can simply drag and drop the .mod file onto the mod_to_gltf batch file in RevilLib's folder and it should automatically convert the .mod file to .glb in the same location where the .mod file is stored. 4. Converting the .lmt files After exporting your .lmt files, make sure that your .mod file is in the same location. This will speed up the rest of this process, and is also necessary for the spike batching we're about to do. In the same folder as the .lmt and .mod files, create a .json file (I usually just name it "batch.json). Open it up in your text editor of choice, and now I will quickly explain how the spike batching works. 4.1. Spike Batching Here is an example of my code (which exports the Rathian animations): [ [ "em001_00.glb", "em001_00_0.lmt", "em001_00_1.lmt", "em001_00_2.lmt", "em001_00_3.lmt", "em001_00_4.lmt" ] ] The .json file reads from its root directory, so there is no need to link to individual file paths. Thankfully, this program will also automatically group all the animations together, so when you view them in Blender (using the action viewer, in the dope sheet), it is nice and consolidated. What this does is pretty obvious, but we are just telling the program that the .glb file is the model we want to use with the animations, and the .lmt files are the animations that we are assigning to the model. When you are done with this file, drag and drop it onto the lmt_to_gltf batch file (located in the RevilLib folder, same as mod_to_gltf), and you should have the .glb file containing the animations in your root folder. It will have "out" at the end of the filename, if it isn't clear to you which one it is. 5. Importing to Blender Because I use Blender, that is the program that I will refer to in this step. It's really simple to do this because Blender, thankfully, has .gltf and .glb file-reading built-in, so import the xxx_out.glb file that we just got and everything should import correctly, animations and all. The textures are another beast, but I'm willing to explain those as well if needed.1 point
-
public static Byte[] iDecrypt(Byte[] lpBuffer) { Byte bTemp = lpBuffer[lpBuffer.Length - 1]; for (Int32 i = 0; i < lpBuffer.Length; i++) { bTemp = (Byte)(lpBuffer[i] ^ (87 * i + 85)); lpBuffer[i] = (Byte)(bTemp ^ 0xAA); } return lpBuffer; } Just drag and drop those dat files🙂 IKV.DatDecryptor.zip1 point
-
why don't you just connect the vertices in a 3d editor. the plugin opens the models, that's all you need. the rest you can work on yourself1 point
-
Tool v1.2 posted. Work is not finished, i'm looking into getting custom characters now. Also maybe i can get real hairs later. Textures not supported yet, but they can be extracted with tools for other frostbite games.1 point
-
1 point
-
not quite sure about uvs, try ofs 17 for U and ofs 21 for V, (all as Short) sample for 4e153346.SGGR1 point
-
my plugin for vfs work with your file EDIT: and i made preview plugin for *.sggr fmt_sggr.py (*.pvr its image, use pvrTexTool)1 point
ResHax.com: Empowering Curious Minds in the World of Reverse Engineering
Delving into the Art of Code Unraveling: ResHax.com - Your Gateway to the Thrilling World of Reverse Engineering, Where Curiosity Meets Innovation!