This iteration of pactool won't support that, my remake sometime in the future will. I'm currently trying to figure out of the cut data myself.
The structure so far is 1 byte to indicate how many cut "groups" there are and then each group has 1 byte to define how many "positions" there are 4 floats (4 bytes each) long, with current research it seems that the "positions" are actually defining a normalized angle with the last 3 values, the first value is still somewhat of a mystery, in-game the values seem to create "infinite" planes where on one side the mesh stays and on the other it is cut, when "positions" intersect they're no longer "infinite", so with multiple planes you can define different shapes to generate a cut for a very specific area.
I've also confirmed that the bounding box defined right before the cut data (6 floats, lowest X/Y/Z followed by highest X/Y/Z in the mesh, pactool does not update this, which is why cuts don't change with meshes that are supposed to have smaller/bigger boxes, if you do update it, the cut changes).
Also the "groups" cut meshes defined in partcutdesc, a "(Basic)CutType" group has two roles, first it defines a list of files to cut by other meshes, but the group itself can also define whether the listed meshes should cut others, assigned by the "Relation", for example meshes listed in "Underwear" have a relation to cut "Nude" which lists the characters' bodies, I believe that the order of the cuts listed in the relation correlates to the index of the "groups" defined in the pac data.
This iteration of pactool won't support that, my remake sometime in the future will. I'm currently trying to figure out of the cut data myself.
The structure so far is 1 byte to indicate how many cut "groups" there are and then each group has 1 byte to define how many "positions" there are 4 floats (4 bytes each) long, with current research it seems that the "positions" are actually defining a normalized angle with the last 3 values, the first value is still somewhat of a mystery, in-game the values seem to create "infinite" planes where on one side the mesh stays and on the other it is cut, when "positions" intersect they're no longer "infinite", so with multiple planes you can define different shapes to generate a cut for a very specific area.
I've also confirmed that the bounding box defined right before the cut data (6 floats, lowest X/Y/Z followed by highest X/Y/Z in the mesh, pactool does not update this, which is why cuts don't change with meshes that are supposed to have smaller/bigger boxes, if you do update it, the cut changes).
Also the "groups" cut meshes defined in partcutdesc, a "(Basic)CutType" group has two roles, first it defines a list of files to cut by other meshes, but the group itself can also define whether the listed meshes should cut others, assigned by the "Relation", for example meshes listed in "Underwear" have a relation to cut "Nude" which lists the characters' bodies, I believe that the order of the cuts listed in the relation correlates to the index of the "groups" defined in the pac data.
[0-9]{2} ([A-F0-9]{2} ){3}C[A-F0-9]{1} ([A-F0-9]{2} ){3}4[A-F0-9]{1} ([A-F0-9]{2} ){3}C[A-F0-9]{1} ([A-F0-9]{2} ){3}4[A-F0-9]{1} ([A-F0-9]{2} ){3}4[A-F0-9]{1} ([A-F0-9]{2} ){3}4[A-F0-9]{1} ([A-F0-9]{2})
header
00 B8 40 8F C1 30 2A 5A 41 2D B2 5D C1 B8 40 8F 41 CB 21 EF 42 12 A5 2A 41 06
groin cut
04 5A 5E 02 C1 00 00 80 BF 0C 3F 4B BA EE 2E BC 38 8E C0 E0 C2 3D 82 E6 34 3C 32 76 3F 86 55 8C BE 98 74 02 C1 00 00 80 3F 4D 3A 42 BA 2A 89 5D 39 9C 0A C1 42 00 00 00 00 6E 4D 7E BF DE 74 EB 3D
left leg
05 BC 4F 6F C1 97 1D 56 BF 92 76 33 3E 0A F5 04 BF DB 75 C6 C0 D1 96 7F BF F1 FA 67 3D 82 D1 EE B1 92 E0 E0 C2 FB C3 75 34 3C 32 76 3F 86 55 8C BE AB C2 F3 C1 24 F0 7F 3F FC 06 DC BB 75 7F AB BC C8 E5 8C 41 00 00 00 00 00 00 80 BF D7 C5 03 34
right leg
05 AD 75 C6 C0 D1 96 7F 3F F1 FA 67 3D 82 D1 EE B1 D7 4F 6F C1 97 1D 56 3F 92 76 33 3E 0A F5 04 BF 90 E0 E0 C2 AC 0C 92 33 3C 32 76 3F 86 55 8C BE A2 9D F7 C1 00 00 80 BF E7 27 F3 39 D8 52 7A AE C8 E5 8C 41 00 00 00 00 00 00 80 BF D7 C5 03 34
second groin cut
04 FE 7C C5 C2 00 00 00 00 05 8C 76 3F 2B D9 89 BE F3 3C 96 42 00 00 00 00 58 FF 7F BF 6E 6C 93 3B B7 8C 3C 41 DA 20 7B BF 3F 1F 45 BE 66 47 CF 3C B7 8C 3C 41 DA 20 7B 3F 3F 1F 45 BE 66 47 CF 3C
right breast
05 34 98 BD C1 CC 28 36 3F 44 C2 D7 3D AE D6 31 BF D4 FE 09 C3 DD 5D C7 BE 4F CB 6B 3F 85 7D 16 3B C0 91 6B 42 AA F2 11 BF 35 40 E1 BE 06 A0 31 3F 26 8B F9 42 DD 5D C7 3E 4F CB 6B BF 84 7C 16 BB 4D C8 CB C1 C2 A2 26 3F EB FC 8B 3E 98 4C 35 3F
left breast
05 31 91 B2 C1 96 40 36 BF 88 4C C9 3D 21 02 32 BF EB 3B 0A C3 28 EF C3 3E 66 83 6C 3F 34 08 E9 B4 56 70 3E 42 AB E8 1B 3F 89 EC BB BE AC FF 33 3F A5 99 F0 42 C0 77 E3 BE B0 AC 64 BF 7D 87 8C BD F2 0E 06 C2 F7 E5 20 BF 39 60 A7 3E 36 AD 34 3F
<Relation CutType="Lowerbody">
<Cut>Underwear</Cut>
<Cut>Nude</Cut>
<Cut>UnderUp</Cut>
</Relation>
yneg mag neg body always invisible
yneg mag pos plane moves up body, "below" plane is visible
ypos mag neg plane moves up body, "above" plane is visible
ypos mag pos body always visible
n/n -> p/n direction -1 * y -> p position n * n * -1 -> n
n/p -> p/p direction -1 * y -> p position n * p * -1 -> p
p/n -> n/p direction -1 * y -> n position p * n * -1 -> p
p/p -> n/n direction -1 * y -> n position p * p * -1 -> n
xneg mag neg plane moves camera left; vertices camera left of plane are visible
xneg mag pos plane moves camera right; vertices camera left of plane are visible
xpos mag neg plane moves camera right; vertices camera right of plane are visible
xpos mag pos plane moves camera left; vertices camera right of plane are visible
zneg mag neg plane moves towards front of body; vertices in front of plane are visible
zneg mag pos plane moves towards back of body; vertices in front of plane are visible
zpos mag neg plane moves towards back of body; vertices behind plane are visible
zpos mag pos plane moves towards front of body; vertices behind plane are visible
I forgot to reply to this sooner, yes I've seen pacs with higher group count than relation count, my theory is that it loops back, so if there are 3 items and 4 groups, by index it would go 0 1 2 and then back to 0, your example above seems to match up to that, where the "groin cut" is the first cut and the "second groin cut" is the fourth, in theory both of these would correlate to relation index 0. I could still be wrong but it seemed to correlate with most cuts, I need to do a bunch more testing myself but I've been both busy and a little sick so I haven't gotten around to it.Your hypothesis on there potentially being a correlation from the cut type index of the relation to the cut group index is interesting. With the above example, we have two groin cuts (first and fourth), which would seem pretty needless unless they are meant to cut different things (nude vs underwear, for example). However, the Lowerbody relation only lists three cuts:
I forgot to reply to this sooner, yes I've seen pacs with higher group count than relation count, my theory is that it loops back, so if there are 3 items and 4 groups, by index it would go 0 1 2 and then back to 0, your example above seems to match up to that, where the "groin cut" is the first cut and the "second groin cut" is the fourth, in theory both of these would correlate to relation index 0. I could still be wrong but it seemed to correlate with most cuts, I need to do a bunch more testing myself but I've been both busy and a little sick so I haven't gotten around to it.
I don't believe this is possible, so your cuts need to be conservative, only cut what's absolutely necessary (as in, what would actually end up clipping) that way if a part of the mesh needs to cut to prevent other clipping, it won't leave areas with "gaps", though this would be exceedingly rare either way, take mystic as an example, her arms are cut on many outfits, and then the sleeves/gloves of many of those outfits are cut by her gauntlets, at no point is the arm under actually going to appear again because it's always covered by something, this is only going to be relevant if you're trying to "un-cut" for a translucent texture mesh, and technically there is a way to do this, but it's currently blocked due to armor swapping, I am looking into ways to only allow this with limited capacity that would be useful for actual mods but not for people who want every outfit for free.- Would be cool if I could "erase" a partcut with another partcut. Not sure if this is possible or not, so hiding part of some underwear may reveal the underwear's own cuts into the body.
Not with this version of pactool. For now you can find a pac file with as many meshes as you'd like to have (trial and error with i3dconverter preview, or with OpenBD right click -> properties) and import into it.Hi, is it possible atm somehow to add extra objects/models with additional material to the PAC scene?
Currently, if I understant it correct, if we have only one source obj in PAC file, we only able to replace it with a new one