August 11, 2025Aug 11 Localization A few moths ago, I took a break from the Front Mission games just to poke around the the PS2 entries of Armored Core and made a surprisingly rapid amount of progress on their model file formats. The last hurdle I've been experiencing for most of this time is face formation- meshes are composed of either a triangle list (for FX spawn points) or multiple triangle strips. The strips are a problem as it's not clear where one should end and another should begin. I've tried looking in the model file for a flag but found nothing that stood out, then shifted to studying the verts and UVs in hopes they they contain some sort of "rhythm" to no real success. using UVs or the distance between points to determine face formation still yields "bad" faces. I've poked around a few PS2 topics here and it sounds like this is the best I can hope for but would like a second opinion before going forward. File, meshes, and tmr.7z Edited August 12, 2025Aug 12 by Greg accidental post
August 14, 2025Aug 14 Supporter I made a script for Noesis but it creates a lot of extra faces. This is a very common problem when you try to autogenerate faces in some PS2 modes, I hate that...
August 14, 2025Aug 14 Author Localization Thanks for the reply. I've shifted to studying the extra faces and have noticed the following characteristics so far - impossible UVs, not forming connections at their hypotenuse either in terms of vert or UV coordinates, bridge large gaps, form at the "seams" of connected faces, etc. It may be possible to filter them out with a long enough chain of if-statements though partial filtering I'm currently performing results in an index error when I try to import the model. I'll report back with the results.
August 18, 2025Aug 18 Author Localization I should probably go over the file formats as I did with the Front Mission games. Barring Armored Core: Last Raven, the Armored Core games share a simple, near identical file structure. The model file header is as follows: 01-?? 00 00 00 . . . . FF FF FF FF 00 00 00 00 01-?? 00 00 00 . . . . EE EE EE EE 00 00 00 00 Bytes 4-7 are the model file size. ACN is unique in that it uses both headers and not just the first. Models with the second header are compressed but can be accessed through eeMemory. I don't know the range of the first byte but haven't found any need to narrow it down. I had hoped the first byte denoted the type of model (scenery, weapon, etc) but that isn't the case. The mesh headers are as follows: . 80 00 00 00 40 02-3E 30|31 12 04 00 00 00 00 00 00 . 80 00 00 00 40 02-3E 30|31 12 04 00 00 00|01 00 00 00 . 80 00 00 00 40 02-3E 30|31 12 04 00 00 00|01 00 00 00 The first bye is the number of verts. Every game between AC2 and ACLR uses the second, "double header." Vertices, normals, and UVs are all neatly ordered floats that directly proceed each mesh header. As I said before, ACLR's format is different. So much so I held off doing more work on it until I figured out face generation for the previous entries. ACLR, like ACN, is also compressed (I think LZS?) and I believe its model file header is 19 08 00 10 XX XX XX XX . . . . XX 00 XX 00, where the XXs denote random byte values. Verts seem to be either shorts or floats, I didn't figure out the mesh header. I found all of this by forming vert clouds out of long, rhythmic stretches of bytes in eeMemory and searching until I found shapes that looked "intentional" in all of that mess before narrowing things down. Once I knew where the verts were, finding the UVs and normals was easy as they were right next to each other. Finally, finding the headers involved investigating where files and vert data seemed to start and end, then seeing if there was a pattern to the bytes that could be found at these points. All techniques either learned on my own or were taught by some of the vets, here. The model headers seem to cover the whole gamut of model types in each game, leading to thousands of files. I've attached the scripts I used to extract model files from each games .bin, a script to further screen out duplicate model files, and my unfinished model file converter. Scripts.7z Edited August 18, 2025Aug 18 by Greg
August 31, 2025Aug 31 Author Localization I've found the source of those index errors, it's the last face of the seventh mesh. It's complete garbage possessing both "bad" verts and UVs, something I didn't think was possible for the first and last face of a mesh. I doublechecked the bytes in the model file and the coordinates are definitely correct, though I'm confused as to what purpose they serve. Mesh 7.7z
September 1, 2025Sep 1 Author Localization I've altered the conversion script and it's now filtering out faces with bad UVs without issue. "Bad" faces generally come in pairs but the first face of the pair doesn't always possess bad UVs, this results in the unintentional deletion of a face that was meant to exist along with the second face. This would make my approach to filtering a waste of time if not for the fact that the bad faces possessing good UVs seem to consistently share an edge with two other faces, something that can likewise be tested for and filtered out. After filtering faces both by their UVs and verts, most of the bad faces should be eliminated. New Armored Core Model Converter.7z
September 7, 2025Sep 7 Author Localization It appears I was too optimistic - my method of filtering out non-manifold geometry still resulted in good faces getting deleted. I'm not giving up just yet, though. Edited September 7, 2025Sep 7 by Greg
September 27, 2025Sep 27 Author Localization I'm giving up. The more I investigate different models, the more edge cases I find that I'm not sure how filter out without damaging the mesh. It may just be impossible to do this through coding. Definitely better than nothing, though.
October 4, 2025Oct 4 Author Localization Alright, here are the finalized scripts for Armored Core 2 through Nine Breaker. I'll take a look at Last Raven after I finally finish the the Front Mission games. Completed Scripts.7z
October 5, 2025Oct 5 On 10/4/2025 at 6:29 PM, Greg said: Alright, here are the finalized scripts for Armored Core 2 through Nine Breaker. I'll take a look at Last Raven after I finally finish the the Front Mission games. Completed Scripts.7z 1.87 kB · 1 download ive been looking into last raven, how did you extract the .DAT and .BIN files of the rom?
October 5, 2025Oct 5 Author Localization Mount the rom, open it in file explorer, and copy the the AC.bin file to somewhere else.
October 5, 2025Oct 5 Just now, Greg said: Mount the rom, open it in file explorer, and copy the the AC.bin file to somewhere else. yeah , i meant actually unpacking them
October 5, 2025Oct 5 5 minutes ago, AexaDev said: yeah , i meant actually unpacking them oh i see now, it looks like youre looking for the header of the models and getting those off the main files Edited October 5, 2025Oct 5 by AexaDev
December 22, 2025Dec 22 Author Localization Looks like I have a little more work to do- while searching for information on the fsliblzs compression format the last three games use, I stumbled across something tangentially related that implied the 3D offsets and rotations for each object in a model file were stored within said file. I assumed they would be kept with the animation data or something and thus never bothered to look. With this new information, I went back and modified my script to group the meshes into their proper objects, having discovered that the first lines after the file header are a list of object start points and mesh counts. With this, I can actually apply the offsets and rotations to each object, rather than having them dumped at the origin. I think this highlighted section that directly proceeds the object list is what I'm looking for but I'm not sure how I would test this mathematically- I just don't know what to do with these bytes. Armored Core 2 Model Converter.py ZCH-GR1 Sample.7z Edited December 22, 2025Dec 22 by Greg Bad image quality.
December 23, 2025Dec 23 Supporter fsliblzs decompression FromSoftwareLzss-V2.zip Edited December 23, 2025Dec 23 by Rabatini
December 24, 2025Dec 24 Author Localization Made some progress on ACLR in the mean time, doesn't seem that complicated. ACLR Sample.7z
January 7Jan 7 Author Localization A lot has happened. The transforms for each mesh have been figured out with the help of Ricardo and NatsuDragneelTheFireDragon and after nearly a year, I've found the draw flag to eliminate the bad faces. As it turns out, Natsu is quite the AC fan themselves and has gone far beyond both my efforts and goals in reversing the format, so I'm leaving the rest in their more capable hands. I've attached the newest revision of my scripts and notes on the model format used by Armored Core 2 through Nine Breaker. Scripts and Notes.7z Edited January 7Jan 7 by Greg
Create an account or sign in to comment