September 7, 2025Sep 7 Hello, can anyone check these file formats to see if you can extract anything from them? I’ve already tried without any luck, but I figured some of you might know. This link contains the dump I created, so you can skim through the files and take a look. If possible, could you also suggest or maybe even create any plugins or tools that might help open them? https://drive.google.com/drive/folders/1kqHk6ULPWuRH6yAyc3tQuH_Vlivf8ysB?usp=drive_link
September 13, 2025Sep 13 Localization WMA is an audio file format (Windows Media Audio) and can be played by VLC. SFD seems to be a font file but FontForge can't open it ARK files seems to be archive containers that contain inside them another ARK files and another files Edit: SFD is a video file format that can be played by VLC too Here is a python script with batch file to extract the contents of the ARK files, drag and drop one or more ARK files onto the batch (.bat) file Also an ARK.hexpat file you can use in ImHex ARK_File_Parser.rar ARK.rar Edited September 13, 2025Sep 13 by haruse31
September 13, 2025Sep 13 Author 8 hours ago, haruse31 said: WMA is an audio file format (Windows Media Audio) and can be played by VLC. SFD seems to be a font file but FontForge can't open it ARK files seems to be archive containers that contain inside them another ARK files and another files Edit: SFD is a video file format that can be played by VLC too Here is a python script with batch file to extract the contents of the ARK files, drag and drop one or more ARK files onto the batch (.bat) file Also an ARK.hexpat file you can use in ImHex ARK_File_Parser.rar 1.14 kB · 1 download ARK.rar 435 B · 1 download Okay, thank you. Is there any way to open the formats contained in the exported .ARK files? It’s difficult to figure out where the models and textures are because the files are scattered everywhere, almost like an infinite loop. This image shows just some of the several formats found in the exported .ARK files. Edited September 13, 2025Sep 13 by Ad_lolz
September 13, 2025Sep 13 Localization 2 hours ago, Ad_lolz said: Okay, thank you. Is there any way to open the formats contained in the exported .ARK files? It’s difficult to figure out where the models and textures are Textures seem to be TCF files. Models are probably XCF I dont know how to reverse PS2/XBOX textures and models
September 13, 2025Sep 13 Author 27 minutes ago, haruse31 said: Textures seem to be TCF files. Models are probably XCF I dont know how to reverse PS2/XBOX textures and models Darn, thank you though! 👍
September 13, 2025Sep 13 Supporter room.xmf (needs a suiting PS2 tri strips algorithm): or simply smaller sub meshes: Tyler, head: Edited September 13, 2025Sep 13 by shak-otay
September 14, 2025Sep 14 Author 4 hours ago, shak-otay said: room.xmf (needs a suiting PS2 tri strips algorithm): or simply smaller sub meshes: Tyler, head: That's interesting, What program are you using to view the models, and how did you convert the file to an obj?
September 14, 2025Sep 14 Supporter Here's a link to hex2obj and some explanation. After inserting suiting parameters for a model into the app you'll get the obj file by File\SaveAs mesh.
January 18Jan 18 Author As of now, I haven’t made much progress with textures and related stuff. If anyone comes across this post, I’d really appreciate any help. I noticed that the company (Genuine Games) that developed Fight Club (2004) also worked on 50 Cent: Bulletproof, so I figured using the 50 Cent: Bulletproof .ARK QuickBMS script on the Fight Club .ARK files might get me somewhere but no luck. It just sends me into a spiral of file types nested inside other files.😵 Edited January 18Jan 18 by Ad_lolz
January 19Jan 19 Supporter 14 hours ago, Ad_lolz said: As of now, I haven’t made much progress with textures and related stuff. You should specify what you're talking about? PS2 or XBOX? .tex or .xtf? (Dunno, what haruse31 meant with .TCF) xtf Quote Texture Format .xtf - (Xbox Texture File is the Xbox Equivalent to the VTF. Includes Preload Image as holdover till full res image is loaded from HDD) For .xtf I can't confirm this, though: Quote Noesis - (Noesis is a multitool program that just about anything from viewing .xtf textures to mocap "Motion capture" animations.) IrfanView: Edited January 19Jan 19 by shak-otay
January 19Jan 19 Author 6 hours ago, shak-otay said: You should specify what you're talking about? PS2 or XBOX? I’d say Xbox, because it’s generally easier to work with and usually has higher-quality models than the PS2 versions. But honestly, any platform would be good it still shows that progress is being made. Edited January 19Jan 19 by Ad_lolz
January 19Jan 19 Localization 2 hours ago, Ad_lolz said: I’d say Xbox, because it’s generally easier to work with and usually has higher-quality models than the PS2 versions. But honestly, any platform would be good it still shows that progress is being made. I extracted the original Xbox version, and it seems more or less the same as what you uploaded via Google Drive. I've attached a work-in-progress Noesis plugin for the .xcf models, though I'm not sure about the triangle layouts. There seem to be inverted and missing triangles, especially on the torsos. fmt_fight_club_xcf.py
January 20Jan 20 Localization The attached Noesis plugin should work on the .xtf textures. The colours might still need some tweaking, as they look a bit greyed out. The section after the header might be a colour palette, though I don't know how to parse it. fmt_fight_club_xtf.py
January 20Jan 20 Supporter 5 hours ago, jmancoder said: I extracted the original Xbox version, and it seems more or less the same as what you uploaded via Google Drive. I've attached a work-in-progress Noesis plugin for the .xcf models, though I'm not sure about the triangle layouts. There seem to be inverted and missing triangles, especially on the torsos. OK, I think I found the problem. Mesh6 has 3 blocks of faces, you are reading only the 1st one(because the other meshes have only 1, so some meshes have more entries in face info(each entry is 0x18 bytes). Now, in mesh header you can see the face entry count, it is after "face_info_off = bs.readInt()". Here is mesh6 header and those bytes are 03 00 00 00: 01 00 00 00 04 00 00 00 FF FF FF FF FF FF FF FF F0 0A 00 00 03 00 00 00. I modified your script, here is it and a screenshot(I added some prints here and there too): fmt_fight_club_xcf.py
January 20Jan 20 Supporter 5 hours ago, jmancoder said: The attached Noesis plugin should work on the .xtf textures. The colours might still need some tweaking, as they look a bit greyed out. The section after the header might be a colour palette, though I don't know how to parse it. Yes, there are two types at offset 0x34: 1 = Diffuse, 4 = Normal map. So Diffuse has a palette at 0x80, you can do this: from inc_noesis import * def registerNoesisTypes(): handle = noesis.register("Fight Club Textures (Xbox)", ".xtf") noesis.setHandlerTypeCheck(handle, noepyCheckType) noesis.setHandlerLoadRGBA(handle, noepyLoadRGBA) return 1 def noepyCheckType(data): bs = NoeBitStream(data) return bs.readBytes(8) == b"\x58\x54\x46\x5F\x30\x30\x30\x30" def noepyLoadRGBA(data, texList): bs = NoeBitStream(data) # name bs.seek(0x08) tex_name = bs.readString() # size + type bs.seek(0x30) w = bs.readUShort() h = bs.readUShort() tex_type = bs.readUInt() # 1 = diffuse, 4 = normal # offsets bs.seek(0x40) img_off = bs.readUInt() pal_off = bs.readUInt() # ------------------------- # DIFFUSE (8bpp + palette) # ------------------------- if tex_type == 1: # read index buffer bs.seek(img_off) idx_buf = bs.readBytes(w * h) # read palette (BGRA) bs.seek(pal_off) pal_buf = bs.readBytes(4 * 256) # decode palette img_buf = rapi.imageDecodeRawPal(idx_buf, pal_buf, w, h, 8, "b8g8r8a8") # unswizzle img_buf = rapi.imageFromMortonOrder(img_buf, w, h, 4) tex = NoeTexture(tex_name, w, h, img_buf, noesis.NOESISTEX_RGBA32) texList.append(tex) return 1 # ------------------------- # NORMAL MAP (RGBA) # ------------------------- elif tex_type == 4: bs.seek(img_off) raw = bs.readBytes(w * h * 4) raw = rapi.imageFromMortonOrder(raw, w, h, 4) tex = NoeTexture(tex_name, w, h, raw, noesis.NOESISTEX_RGBA32) texList.append(tex) return 1 print("Unknown texture type:", tex_type) return 0 It is based in other script for xbox textures that we made before. Palette and image data have the same format so there you go 😉
January 22Jan 22 Author Wow, that’s sick! I was looking through the Fight Club dump and noticed file types like .xmf, .col, and .wpf. I’m not sure if they contain models or textures, though I wouldn’t really know since I’ve never tried extracting Xbox files to this extent 🤷♂️ These file types can usually be found in the Arena files located in the Levels folder in the Fight Club dump. I decided to parse the env.ark file located in the Arena5a (shown below). From what I can tell, these files (the xmf files) might be models, but I’m not entirely sure. By the way, these files were found in the env.ark files located in Arena5a (located in the levels file in the fight club dump) after parsing both ark files (Arena51 and env.ark) with the ARK Parser sorry, if this doesn't sound smooth i've tried to word it as good as I can https://drive.google.com/drive/folders/1zOhUsewuQdKHEXqBjA4cafODG9X2lBRG https://drive.google.com/drive/folders/12E6-jgNubHw7RyKyxKKw76RO3Clu30kL?usp=sharing These are the folders I was referring to: env and Arena5a There are more file types inside Arena5a, I just uploaded the env file separately. Edited January 22Jan 22 by Ad_lolz
January 22Jan 22 Author On 9/13/2025 at 1:55 PM, shak-otay said: room.xmf (needs a suiting PS2 tri strips algorithm): or simply smaller sub meshes: Tyler, head: I forgot about this post, but I guess that answers my question. I’m just wondering if there’s an easier way to do this without digging through hex and all that 🤔?I’ve been trying to reverse engineer an XMF file, but I keep running into index mismatches (vertex chaos) no matter what I change in the python script. it's getting kind of tideous trying to find the correct offset Edited January 22Jan 22 by Ad_lolz
January 22Jan 22 Supporter 1 hour ago, Ad_lolz said: I forgot about this post, but I guess that answers my question. I’m just wondering if there’s an easier way to do this without digging through hex and all that 🤔?I That was about PS2. Quote it's getting kind of tideous trying to find the correct offset If there doesn't exist a profund analysis already it always starts with getting the parameters for the first sub mesh. This may be very tedious, yes. But then it's a matter of getting the idea, i.e. VIF tags for PS2, or, for different platforms/formats some other signature before the vertex block. Or, if you're lucky, you'll find some "magic table" containing offsets and/or counts for all the sub meshes.
January 22Jan 22 Localization Solution 16 hours ago, Ad_lolz said: I forgot about this post, but I guess that answers my question. I’m just wondering if there’s an easier way to do this without digging through hex and all that 🤔?I’ve been trying to reverse engineer an XMF file, but I keep running into index mismatches (vertex chaos) no matter what I change in the python script. it's getting kind of tideous trying to find the correct offset Try the attached script for XMF files. I also adjusted the XCF script to read the triangles strips a bit differently, though both mesh types still have some random edges. There were also some DX textures in the level archive, so I added support for them to the XTF script. fmt_fight_club_xcf.py fmt_fight_club_xmf.py fmt_fight_club_xtf.py Edited January 22Jan 22 by jmancoder
February 11Feb 11 Author Okay, so I found another file type 😵. It seems that the .xdf files store some models, based on the names and sizes of the files in the provided link (https://drive.google.com/drive/folders/1CTF2GbJZbRh-Uzeta4foSbszrtfpTYOb?usp=sharing). I’ve noticed that most of these files are located within the level.ark files. If anyone can find a Noesis plugin online, please let me know I’ve looked everywhere and couldn’t find anything. 👎
February 11Feb 11 Localization 16 hours ago, Ad_lolz said: Okay, so I found another file type 😵. It seems that the .xdf files store some models, based on the names and sizes of the files in the provided link The attached Noesis plugin should work. I think either the triangles strips or normals are slightly incorrect in the script, but I don't know enough about old packed mesh formats to fix that. fmt_fight_club_xdf.py
Create an account or sign in to comment