Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 10/21/2025 in all areas

  1. 2 points
  2. Let's just say Im remaking a certain game. But in VR
    2 points
  3. 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. The updated script will probably handle rsf files from other EA games released between 2006 and 2016.
    2 points
  4. Hello guys, I need help to the correct read UV`s and Textures, from the Reckless Racing game. Earlier, durik256 helped me read the mesh format and some UV data from the *.sggr format, but to this day I haven’t been able to figure out the UV scaling and materials. Here’s the link to the discussion: https://reshax.com/topic/1067-reckless-racing-ios-vfs-files/ Below is the Noesis script for reading the mesh data. Script have two problems: - Sometimes the script reads the LOD versions of the mesh models. - It also doesn’t read the UV scale, and the mesh isn’t split by materials. I’m asking for your help in updating this script. from inc_noesis import * def registerNoesisTypes(): handle = noesis.register("Reckless Racing", ".sggr") noesis.setHandlerTypeCheck(handle, noepyCheckType) noesis.setHandlerLoadModel(handle, noepyLoadModel) return 1 def noepyCheckType(data): if data[:4] != b'\x4D\x3C\x2B\x1A': return 0 return 1 def noepyLoadModel(data, mdlList): bs = NoeBitStream(data) ctx = rapi.rpgCreateContext() ofs_res = data.find(b'#RES') if ofs_res != -1: bs.seek(ofs_res + 44) unk, vnum, zero = bs.read('3I') skip = 12 if unk == 4368 else 0 vbuf = b'' vbuf, uvbuf = b'', b''#bs.read(vnum*24) for x in range(vnum): bs.seek(2,1) vbuf += bs.read(2) bs.seek(2,1) vbuf += bs.read(2) bs.seek(2,1) vbuf += bs.read(2) bs.seek(5,1)#4 uvbuf += bs.read(2) bs.seek(2,1) uvbuf += bs.read(2) bs.seek(1,1)#2 bs.seek(skip,1)#12+ rapi.rpgBindPositionBuffer(vbuf, noesis.RPGEODATA_SHORT, 6) rapi.rpgBindUV1Buffer(uvbuf, noesis.RPGEODATA_USHORT, 4) u0, inum, u1 = bs.read('3I') ibuf = bs.read(inum * 2) rapi.rpgCommitTriangles(ibuf, noesis.RPGEODATA_USHORT, inum, noesis.RPGEO_TRIANGLE) try: mdlList.append(rapi.rpgConstructModel()) except: mdlList.append(NoeModel()) return 1
    1 point
  5. 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.zip
    1 point
  6. @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
  7. Awesome man, glad to have helped! If there's any other static meshes you need let me know
    1 point
  8. 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 Note: for the moment, the latest import tool (h2_pc_mi_07.exe) is available only on ResHax Discord Server here: https://discord.com/channels/1170343009833979924/1370794201570349267/1390413624761254029 Blender 3.6 ASCII Import-Export Blender Add-on (HFW) HFW Export-Import Tutorial.pdf
    1 point
  9. Sorry, my bad, now i see, list look similiar how my old
    1 point
  10. Hello, here the decompressor, it´s a custom lzss. LZSS_DGirl-ps2.7z
    1 point
  11. 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
  12. 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
  13. 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
  14. It seems like at 0x24 is vert count(4F8=1272), then at 0x40 is a pointer to vertices(0x70780). After that a line of zeros and then other block of vertices, maybe other facel?(I don't know why are 2 faces). But vert count is taking that line of zeros. I tried to ignore that line and then including that line but is the same result. The only differenece is that large triangle that goes to the floor. So it both cases is a mess, lol. Oh, probably after pointer to vertices, are pointers to Normals(0x44), Uvs(0x48) and vertex colors(0x4C). I don't understand, this is so werird...
    1 point
  15. Oh man, I'm interested in this. I hack the N64 AKI Wrestling games, and wondered if there was anything for Def Jam Vendetta. Where can I find this Byte Map tool?
    1 point
  16. Version 0.0.0.1

    4 downloads

    Extremely early version of tool, can export a good portion of models in game, some will fail due to version (investigating if this is due to them being old files, or if the game genuinely has a different code path for them, as I can only see 1 in the exe). Some will also fail due to WIP issues with mapping LOD indices (errors or corrupt mesh output) Drag and drop Alan Wake 2's folder onto the exe/pass it via CLI and it will export all binfbx files in the archives. Currently only exports models with material names/skeleton, references to textures and other data is a heavy work in progress, but I felt it was best to get an early version out that can at least export mesh info. Requires Cast plugin to import into Blender/Maya for now, more formats will be supported later: https://github.com/dtzxporter/cast Janitor.CLI.7z
    1 point
  17. I have released an early version of the tool that can do just meshes with their material names/skeleton:
    1 point
  18. 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.)
    1 point
  19. *(I think you should mention the author.)
    1 point
  20. So I was wrong, Conker's Eyes don't rely on a shader to make them look correct, the eyes have 3 UV channels for the Pupil, Highlight, and the Eye Lids. I just recently implemented the Multi UV Channel support
    1 point
  21. (just my old plugin that was made from example files of another theme) fmt_kn5.py *(don't support encryption)
    1 point
  22. I checked jmox files but mesh needs transformation... Here's quick sum up content of *.pack archives. main = ? > mixed mdc = jmox > models cars mde = jmox > models environment so = xvs > sounds lm = jtex > textures prb = jtex > textures gin = jtex > textures
    1 point
  23. 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 yourself
    1 point
  24. 2 downloads

    This is attachment from ZenHAX posted by petventh in topic: JX3 HD Remake ??3 (.dat files)
    1 point
  25. not quite sure about uvs, try ofs 17 for U and ofs 21 for V, (all as Short) sample for 4e153346.SGGR
    1 point
  26. 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
  27. this one is for decipher Coalesced.*
    1 point
  28. Maybe I didn’t quite understand your goal, but you can’t just take files from the game and compile them back into the game.) Edit: ah, I read a few posts above, you need to compile Asset Studio, not the game files.
    1 point
  29. Hello Everyone! So i'm back, i'm taking some time to explain the way i made things working. Who knows, it may give some insights? So let's begin (I'll try to update a bit this post to make a cleaner tutorial. first, i'm giving the .rar with the updated .exe and extra files to make things running the easy way, i'll update a bit later my git to create a fork of the original source code) So... let's begin! ___ ➡️The Easy Path : 1. Download the MK11PackageExtractor.rar 2. Extract the content in your MK11 folder (from steam, whatever, it's just the base : DriverLetter:\yourpathtothegame\Mortal Kombat 11\ 3. ⬇️ ➡️Drag your .xxx files out of assets folder (the ones you want) - copy them... it's better for your game can still run XD - and drop them at the same level of your MK11PackageExtractor.exe. ➡️Clic on decompress.bat and you can check the extraction in the created "output" folder with your "NameOfExtractedPackage". (It's a loop fetching your .xxx files) (careful, it only works for XXX files, though the source code implemented the feature, I don't know why PSF isn't working. But it doesn't matter because PSF are not compressed like .XXX so Ravioli Game Tools can do the job without problem) 4. In "NameOfExtractedPackage", you may find a ".upk" at its base. There, you can use Ravioli Game Extractor to check the information within and perform a clean extraction of the files. Most of the time, the sound format is .wem, so unless you use vgstream in foobar2000, you'd have to convert the file to listen to the file. ____ ➡️The Dev Path : (long term solution) - I haven't posted the things on github yet - so forget the part i'm giving my updated code, yet, i'm sharing what you need in order to perform the compiling To get the code working, get your dev tool (i'm using VS Code - it's free). ✅1. Download Mingw64 - i think latest version - to get the compiler working ✅2. IntelliSense being deprecated, use the last version at disposal (the time i'm writing, it's C / C++) ✅2. Clone the original git (The one who belongs to thethiny), or mine if you want the modifications used to make the code working ✅3. 3 steps : ↪️You'll need to add libraries in some headers, cstdint for most, fstream for a few ↪️in MK11file.h, i added the XXX hex code to focus on XXX files PFS = 0x0008u, 🆙 XXX = 0x0040u, OODLE = 0x0100u ↪️In extract.cpp, modify the algorithm so the compression flag for .xxx files can ALSO be applied while using oodle. Why? Because otherwise, .xxx files can't be checked with oodle compression, in other words : it won't work and you'll get an error. With so little documentation, i had to fetch things by myself, it's all because of an hex code for .xxx files not being taken into account, that's strange when you think of it because the original program should check the .xxx files 😄 ⏹️4. I added a quick text log to MK11file.cpp to compare file informations in ::validate_header ✅5. In Tasks.json, you'll need to help setting up the compiler path to create the file. I'm really not an expert in this part so i'm just focusing on MK11PackageExtrator.exe (or rename the file if you like) - This is the part most would prefer my task.json if you want a faster working thing. Here is maybe the most important part : "tasks": [ { "type": "shell", "label": "C/C++: g++.exe build active file", "command": "Driver:\\pathtomingw64\\msys64\\ucrt64\\bin\\g++.exe", //replace Driver:\\pathtomingw64 with your folder to mingw64 "args": [ "-g", "${workspaceFolder}/src/extract.cpp", "${workspaceFolder}/src/implementations/*.cpp", "-o", "MK11PackageExtractor.exe", "-std=c++11", "-I", "${workspaceFolder}/src/headers" ], "options": { "cwd": "${workspaceFolder}" }, "problemMatcher": [ "$gcc" ], "group": "build" }, ✅✅6. Use g++, not gcc (there are errors of compilation in gcc) ✅7. for Visual Studio Code, the part if you want to get a faster compilation : Ctrl + Shift + B while targetting main.cpp Once again, i'm a total newb in C++, i'm not even a senior developper, i just know how to thinker some stuff and that's it. 😄Oh and i forgot, the dev didn't add the required .dll for the .exe to work with .xxx, I had to fetch them but you're lucky, they're part of the .rar so you don't have to do the same i did🙂 Happy extracting! 😄 PS : i'm not english native speaker, forgive my bad way of explaining the technical stuff 🔲PS2 : Edit, because i like to manage several projects at the same time : Pushed a mod on Nexus for Mass Effect (i think i'll prefer hanging to less sites than too many, Nexus is a bit much above github), made new music extracts + edits, creating fly camera scripts... -. I still haven't pushed the code modifications on github for MK11 😅 I'll make a fork of the original code, then put all my modifications + a clean release when possible! MK11PackageExtractor.rar
    1 point
  30. I Have The 3D Models And The Script And I Can Publish This ;D
    0 points
×
×
  • Create New...