Fix v10 bfres that have more than 64 boolean bits to load. Keep original bind indices on replace if possible.
This will fully fix and support v10 bfres by loading all possible boolean bits for the shader options. Previously would only load the first 64 bits using a uint64 value rather than checking for multiple when value is larger.
This commit is contained in:
parent
7e5b80e575
commit
6088d66e4a
Binary file not shown.
@ -890,6 +890,7 @@ namespace Bfres.Structs
|
|||||||
{
|
{
|
||||||
List<FSHP> Matches = shapes.Where(p => String.Equals(p.Text,
|
List<FSHP> Matches = shapes.Where(p => String.Equals(p.Text,
|
||||||
ImportedObjects[i].ObjectName, StringComparison.CurrentCulture)).ToList();
|
ImportedObjects[i].ObjectName, StringComparison.CurrentCulture)).ToList();
|
||||||
|
ImportedObjects[i].BoneIndex = 0;
|
||||||
|
|
||||||
if (Matches != null && Matches.Count > 0)
|
if (Matches != null && Matches.Count > 0)
|
||||||
{
|
{
|
||||||
@ -902,6 +903,11 @@ namespace Bfres.Structs
|
|||||||
if (settings.LimitSkinCount)
|
if (settings.LimitSkinCount)
|
||||||
ImportedObjects[i].VertexSkinCount = ((FSHP)Matches[0]).VertexSkinCount;
|
ImportedObjects[i].VertexSkinCount = ((FSHP)Matches[0]).VertexSkinCount;
|
||||||
|
|
||||||
|
//Keep original bone mapping by default
|
||||||
|
//Only do this for original boneset for now
|
||||||
|
if (!settings.ImportBones)
|
||||||
|
ImportedObjects[i].BoneIndex = ((FSHP)Matches[0]).BoneIndex;
|
||||||
|
|
||||||
if (settings.UseOriginalAttributes)
|
if (settings.UseOriginalAttributes)
|
||||||
{
|
{
|
||||||
AttributeMatcher.Add(ImportedObjects[i].ObjectName, Matches[0].vertexAttributes);
|
AttributeMatcher.Add(ImportedObjects[i].ObjectName, Matches[0].vertexAttributes);
|
||||||
@ -1325,23 +1331,14 @@ namespace Bfres.Structs
|
|||||||
else
|
else
|
||||||
shape.VertexSkinCount = obj.GetMaxSkinInfluenceCount();
|
shape.VertexSkinCount = obj.GetMaxSkinInfluenceCount();
|
||||||
|
|
||||||
if (shape.VertexSkinCount == 0 && obj.boneList.Count > 0)
|
|
||||||
{
|
|
||||||
int boneIndex = Skeleton.bones.FindIndex(x => x.Text == obj.boneList[0]);
|
|
||||||
if (boneIndex != -1)
|
|
||||||
shape.BoneIndex = boneIndex;
|
|
||||||
}
|
|
||||||
else if (shape.VertexSkinCount == 1 && shape.BoneIndices.Count > 0)
|
|
||||||
{
|
|
||||||
int boneIndex = shape.BoneIndices[0];
|
|
||||||
shape.BoneIndex = boneIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
shape.CreateNewBoundingBoxes(this);
|
shape.CreateNewBoundingBoxes(this);
|
||||||
shape.OptmizeAttributeFormats();
|
shape.OptmizeAttributeFormats();
|
||||||
shape.SaveShape(IsWiiU);
|
shape.SaveShape(IsWiiU);
|
||||||
shape.SaveVertexBuffer(IsWiiU);
|
shape.SaveVertexBuffer(IsWiiU);
|
||||||
|
|
||||||
|
if (shape.Shape != null)
|
||||||
|
shape.Shape.BoneIndex = (ushort)shape.BoneIndex;
|
||||||
|
|
||||||
if (IsWiiU)
|
if (IsWiiU)
|
||||||
{
|
{
|
||||||
shape.ShapeU.SubMeshBoundingIndices = new List<ushort>();
|
shape.ShapeU.SubMeshBoundingIndices = new List<ushort>();
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user