textools / xivmoddingframework Goto Github PK
View Code? Open in Web Editor NEWLicense: GNU General Public License v3.0
License: GNU General Public License v3.0
The presence of such a temp file prevents textools from being able to recover via the help menu.
Recovery could first purge the temp file and perform the cleanup again, and offer to start over if during the cleanup phase any errors are encountered when offsets are validated (assuming they are).
Should use Path.GetDirectoryName
instead of substring in https://github.com/TexTools/xivModdingFramework/blob/1235f17/xivModdingFramework/SqPack/DataContainers/IndexFile.cs#L525
Doc: https://docs.microsoft.com/en-us/dotnet/api/system.io.path.getdirectoryname?view=netframework-4.7
The new Fat Cat Loungewear is the games first Body+Hands gear, and is not being handled correctly, the item is listed under Category "Unknown" and displays no materials or model as it defaults to dwn.
In the following code, shouldn't
uncompLength = dealing with last part ? mipLength % 16000 : 16000
have been
uncompLength = dealing with last part && mipLength % 16000 != 0 ? mipLength % 16000 : 16000
instead? Otherwise, the last part of each mipmap would end up being omitted.
xivModdingFramework/xivModdingFramework/Textures/FileTypes/DDS.cs
Lines 526 to 554 in 12efd03
This mod has consecutive sqblocks where (size=16b, unk=0, compressed=0 decompressed=16000), and while I'm not sure if the above is the cause (can't think of a reason why would these empty blocks be placed consecutive), thought that it might worth sharing this issue.
Enter the name of the partition and load the model and textures.
Loading either the model or textures gets you an error window.
"There was an error reading the MDL file."
"Source array was not long enough. Check srcIndex and length, and the array's lower bounds."
*Indexes are fine and confirmed with two different users the item will not load correctly.
...
General preview of item.
Racial Model export (for non existent) racial models I suspect is simply a function of matrix math - as we've not actually done that yet, as I'm aware of.
The general function should be:
These transformations need only be applied to the position coordinates of each vertex, indices and other values are by nature unaffected.
The current shared model check function only scans the known item list for material variants. It should also check the IMC file for unused IMC variants and add those into the list as dummy NPC items.
With the introduction of the TTModel class and SQLite DB output, we now have more options to manipulate and output Shape data. A question or two needs to be answered first though, then some extensive work done for sorting out the I/O of the data.
Does SE actually use the Shape Data for anything other than Position data?
Reading Custom Data back in:
This is however complicated by the fact that Shape Parts are stored at the Mesh Group level, not at a Per-Part level. This means we need to further...
End 3DS max Scene would likely look like...
Hi! I'm your friendly neighbourhood developer who works on tools that can use TTMPs (namely Heliosphere)!
I am curious as to what led to the adoption of using sqpack internally for modpacks and if it can be removed in a new TTMP version. In terms of pros and cons, I can only think of cons, so I'd love to learn more about why it's in use.
However, as far as I understand, even for modifying the game files, TexTools can take tex files, models, etc. and directly modify the game files without going through an intermediary sqpack first. This makes it appear to me that there is actually no reason to continue storing modpacks in sqpack! Again, if I'm wrong, please let me know.
However, for anyone who makes tools working with modpacks, sqpack is an absolute curse for them. There's no single point of truth, no spec, and every implementation of the format will be slightly different and cause incompatibilities. This creates a high barrier to entry for any tools wanting to work on modpacks, as they must first have/create a sqpack decoder! In addition, TexTools does several things wrong when writing sqpacks (which I can't blame whoever implemented - it's a tricky and annoying format), which leads to even a "correct" reader having to make itself work differently to accommodate.
For users, sqpacks generated by TexTools have poor compression (DEFLATE on 16kb discrete chunks - also bad (de)compression time, which leads to poorer UX) and exact duplicates of files (making the size problem worse). They're also completely opaque; the user can't see (or edit) what's actually in the modpack without TexTools.
It would be nice if TTMP3 could be a normal ZIP file or like tar.zst or anything standard. Take a look at something like what Penumbra uses (PMP). It just has the files in folders and has a JSON file pointing to them and which game path they affect. This is much more approachable for developers and users. It should also be easier for TexTools, since it can completely drop the use of sqpack, have fewer bugs with modpacks, and get better compression. It could even deduplicate files (although TexTools could be doing that with sqpack anyway) and get a better compression ratio. If TTMP3 used something like a ZStandard-compressed tar file, it could achieve great compression with really fast decompression, improving UX!
To someone like me who didn't make TexTools, I can't see any reason that it uses sqpack, considering that alternatives like Penumbra don't need it at all. However, there could be things I don't know, so I'd love to have a conversation if that's the case. Either way, working to remove sqpack from modpacks could help everyone in the modding scene.
We need to introduce binary file injection/partial file support for files. The current thought on how to best do this is as follows.
Binary Files on consideration for user editing:
Things to consider:
Now that we have an SQL Cache to store the data in, and users creating custom file paths in FFXIV's file system, we need to create a proper file dependency tree to make mod and modlist exporting and validation sane.
In primary, two functions are needed:
These functions need to handle all the resolution necessary to identify all the children/parents of a file. To this end, the Cache should store the downward facing/child files of each file, so that upward scans can become possible via checking the cache.
Top down at each level dependency search for items should look like:
Real files are in [], folder structure helpers are in italics
Item Set =>Slot => [EQP]/[EQDP] Binary Entries => [MDL Files]/[IMC Binary Entries] => [MTRL Files] => [TEX Files]
Each entry at each level is guaranteed capable of resolving both its own downward facing and equivalent level entries easily given no data other than only its path::binary_offset, as follows
Upward facing entries are more complex, ergo why we cache things.
Not entirely related, but an in-game FFXIV "Item" is defined as a [Set + Slot + IMC Variant] (+ player racial information)
Ergo the game process of resolving an item is
-> Resolve Set
-> Resolve Slot
-> Check EQDP Entry for Racial MDL to Use
-> Check IMC Entry for MTRL Folder
-> Check MDL for MTRL File Name
-> Check MTRL for TEX to use.
-> Check EQP & IMC for part hiding information.
-> Render Model
The [Set + Slot + IMC Variant] information for each equippable item in game is defined in Items.exd - Changing this data however does NOT change the visible model/etc. in game because the data is actually supplied directly via the server in the packets to the client when a new model appears nearby. The client side Items.EXD version is only checked when using the Preview/Try on windows (which do not interact with the server)
Now that MDL writing is slowly getting more sane, it likely makes sense at some point for us to just completely remove the higher LoD entries from the MDL file on import. This has a few benefits.
while using xivModdigFramework to export some furniture to .obj I got lots of exceptions saying "Source array was not long enough. Check srcIndex and length, and the array's lower bounds". Problem seems originated from bad offset configuration. Some models can't be read normally, such as "Grade 3 Picture Frame" or “Tier 3 Aquarium”. And a lot of models have texture linking problems such as "Indoor Oriental Garden". Only those has only one texture or meshgroup things seems to be correct and normal.
Textools also impacted by this issue. These things I mentioned above could not be opened in textools either, and those have texture linking problems were displayed as black squares.
Actions list was previously sorted into multiple blocks so that as many actions were listed as possible,
after 6.4 Target to Attack 1 has moved from nearer to the bottom to right up top, and Target to Bind 1 is offset to the right within the list, suspected change to offsets and datalength increase required. Resolved in 6.4 fixes branch so far.
Online Status has a similar issue, the list no longer in the arrangement it was previously, and "Playing triple triad" offset center, also suspecting offset and datalength change required. Resolved in 6.4 fixes branch so far.
New raid related earrings (anabaseios/ascension) cannot be loaded, due to the material being beyond the readable stream.
This is because the material set appears to either be set wrong in the game data, or SE has intentionally started using Diffuse/Specular for some types of Earrings.
This is a game bug, the game data includes Normal/Multi for these earings, but the material set is configured incorrectly for Diffuse/Specular.
Status list doesn't populate at all, no fix found so far.
Introduction of FBX Support
The current JSON modlist files should be converted to SQLite or other, actually efficient datastores. With users sometimes reaching over 20,000 active mod entries, reading and writing a potentially 10mb+ json file becomes exceedingly slow.
Additionally, we should take the opportunity to stop storing disabled mods in the DAT files, and create a proper Modpack Ordering system potentially.
Some analysis will be necessary to determine appropriate structures and UIs to make the system function smoothly and match user expectations.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.