// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { ushort numCurve = loader.ReadUInt16(); ushort numKeyShapeAnim = loader.ReadUInt16(); BeginCurve = loader.ReadInt32(); BeginKeyShapeAnim = loader.ReadInt32(); Name = loader.LoadString(); KeyShapeAnimInfos = loader.LoadList <KeyShapeAnimInfo>(numKeyShapeAnim); Curves = loader.LoadList <AnimCurve>(numCurve); BaseDataList = loader.LoadCustom(() => loader.ReadSingles(numKeyShapeAnim - 1)); // Without base shape. }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { ushort numPatAnim = loader.ReadUInt16(); ushort numCurve = loader.ReadUInt16(); BeginCurve = loader.ReadInt32(); BeginPatAnim = loader.ReadInt32(); Name = loader.LoadString(); PatternAnimInfos = loader.LoadList <PatternAnimInfo>(numPatAnim); Curves = loader.LoadList <AnimCurve>(numCurve); BaseDataList = loader.LoadCustom(() => loader.ReadUInt16s(numPatAnim)); }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { ushort numAnimParam = loader.ReadUInt16(); ushort numCurve = loader.ReadUInt16(); ushort numConstant = loader.ReadUInt16(); loader.Seek(2); BeginCurve = loader.ReadInt32(); BeginParamAnim = loader.ReadInt32(); Name = loader.LoadString(); ParamAnimInfos = loader.LoadList <ParamAnimInfo>(numAnimParam); Curves = loader.LoadList <AnimCurve>(numCurve); Constants = loader.LoadCustom(() => loader.ReadAnimConstants(numConstant)); }
void IResData.Load(ResFileLoader loader) { if (loader.ResFile.Version >= 0x02040000) { loader.CheckSignature(_signature); Name = loader.LoadString(); Path = loader.LoadString(); Flags = loader.ReadEnum <ShaderParamAnimFlags>(true); ushort numMatAnim = 0; if (loader.ResFile.Version >= 0x03040000) { FrameCount = loader.ReadInt32(); numMatAnim = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); int numParamAnim = loader.ReadInt32(); int numCurve = loader.ReadInt32(); BakedSize = loader.ReadUInt32(); } else { FrameCount = loader.ReadUInt16(); numMatAnim = loader.ReadUInt16(); unk = loader.ReadUInt32(); int numCurve = loader.ReadInt32(); BakedSize = loader.ReadUInt32(); int padding2 = loader.ReadInt32(); } BindModel = loader.Load <Model>(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(numMatAnim)); ShaderParamMatAnims = loader.LoadList <ShaderParamMatAnim>(numMatAnim); UserData = loader.LoadDict <UserData>(); } else { Flags = loader.ReadEnum <ShaderParamAnimFlags>(true); FrameCount = loader.ReadInt16(); ushort numMatAnim = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); ushort unk = loader.ReadUInt16(); BakedSize = loader.ReadUInt32(); Name = loader.LoadString(); Path = loader.LoadString(); BindModel = loader.Load <Model>(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(numMatAnim)); ShaderParamMatAnims = loader.LoadList <ShaderParamMatAnim>(numMatAnim); } }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); Name = loader.LoadString(); Path = loader.LoadString(); _flags = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); FrameCount = loader.ReadInt32(); ushort numAnim = loader.ReadUInt16(); ushort numCurve = loader.ReadUInt16(); BakedSize = loader.ReadUInt32(); BindModel = loader.Load <Model>(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(numAnim)); Names = loader.LoadCustom(() => loader.LoadStrings(numAnim)); // Offset to name list. Curves = loader.LoadList <AnimCurve>(numCurve); BaseDataList = loader.LoadCustom(() => { bool[] baseData = new bool[numAnim]; int i = 0; while (i < numAnim) { byte b = loader.ReadByte(); for (int j = 0; j < 8 && i < numAnim; j++) { baseData[i++] = b.GetBit(j); } } return(baseData); }); UserData = loader.LoadDict <UserData>(); }
// TODO: Methods to access ShaderParam variable values. // ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); Name = loader.LoadString(); Flags = loader.ReadEnum <MaterialFlags>(true); ushort idx = loader.ReadUInt16(); ushort numRenderInfo = loader.ReadUInt16(); byte numSampler = loader.ReadByte(); byte numTextureRef = loader.ReadByte(); ushort numShaderParam = loader.ReadUInt16(); ushort numShaderParamVolatile = loader.ReadUInt16(); ushort sizParamSource = loader.ReadUInt16(); ushort sizParamRaw = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); RenderInfos = loader.LoadDict <RenderInfo>(); RenderState = loader.Load <RenderState>(); ShaderAssign = loader.Load <ShaderAssign>(); TextureRefs = loader.LoadList <TextureRef>(numTextureRef); uint ofsSamplerList = loader.ReadOffset(); // Only use dict. Samplers = loader.LoadDict <Sampler>(); uint ofsShaderParamList = loader.ReadOffset(); // Only use dict. ShaderParams = loader.LoadDict <ShaderParam>(); ShaderParamData = loader.LoadCustom(() => loader.ReadBytes(sizParamSource)); UserData = loader.LoadDict <UserData>(); VolatileFlags = loader.LoadCustom(() => loader.ReadBytes((int)Math.Ceiling(numShaderParam / 8f))); uint userPointer = loader.ReadUInt32(); }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); if (loader.IsSwitch) { Switch.ModelParser.Read((Switch.Core.ResFileSwitchLoader)loader, this); } else { Name = loader.LoadString(); Path = loader.LoadString(); Skeleton = loader.Load <Skeleton>(); uint ofsVertexBufferList = loader.ReadOffset(); Shapes = loader.LoadDict <Shape>(); Materials = loader.LoadDict <Material>(); UserData = loader.LoadDict <UserData>(); ushort numVertexBuffer = loader.ReadUInt16(); ushort numShape = loader.ReadUInt16(); ushort numMaterial = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); uint totalVertexCount = loader.ReadUInt32(); if (loader.ResFile.Version >= 0x03030000) { uint userPointer = loader.ReadUInt32(); } VertexBuffers = loader.LoadList <VertexBuffer>(numVertexBuffer, ofsVertexBufferList); } }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); if (loader.IsSwitch) { Switch.LightAnimParser.Read((Switch.Core.ResFileSwitchLoader)loader, this); } else { Flags = loader.ReadEnum <LightAnimFlags>(true); ushort numUserData = loader.ReadUInt16(); FrameCount = loader.ReadInt32(); byte numCurve = loader.ReadByte(); LightTypeIndex = loader.ReadSByte(); DistanceAttnFuncIndex = loader.ReadSByte(); AngleAttnFuncIndex = loader.ReadSByte(); BakedSize = loader.ReadUInt32(); Name = loader.LoadString(); LightTypeName = loader.LoadString(); DistanceAttnFuncName = loader.LoadString(); AngleAttnFuncName = loader.LoadString(); Curves = loader.LoadList <AnimCurve>(numCurve); BaseData = loader.LoadCustom(() => new LightAnimData(loader, AnimatedFields)); UserData = loader.LoadDict <UserData>(); } }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { if (loader.ResFile.Version >= 0x02040000) { loader.CheckSignature(_signature); Name = loader.LoadString(); Path = loader.LoadString(); _flags = loader.ReadUInt32(); if (loader.ResFile.Version >= 0x03040000) { FrameCount = loader.ReadInt32(); numBoneAnim = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); int numCurve = loader.ReadInt32(); BakedSize = loader.ReadUInt32(); } else { FrameCount = loader.ReadUInt16(); numBoneAnim = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); ushort numCurve = loader.ReadUInt16(); BakedSize = loader.ReadUInt32(); loader.Seek(4); //padding } BoneAnims = loader.LoadList <BoneAnim>(numBoneAnim).ToList(); BindSkeleton = loader.Load <Skeleton>(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(numBoneAnim)); UserData = loader.LoadDict <UserData>(); } else { _flags = loader.ReadUInt32(); FrameCount = loader.ReadUInt16(); numBoneAnim = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); ushort numCurve = loader.ReadUInt16(); Name = loader.LoadString(); Path = loader.LoadString(); BoneAnims = loader.LoadList <BoneAnim>(numBoneAnim).ToList(); BindSkeleton = loader.Load <Skeleton>(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(numBoneAnim)); } }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); if (loader.IsSwitch) { Switch.VisibilityAnimParser.Read((Switch.Core.ResFileSwitchLoader)loader, this); } else { Name = loader.LoadString(); Path = loader.LoadString(); _flags = loader.ReadUInt16(); ushort numAnim = 0; ushort numCurve = 0; if (loader.ResFile.Version >= 0x03040000) { ushort numUserData = loader.ReadUInt16(); FrameCount = loader.ReadInt32(); numAnim = loader.ReadUInt16(); numCurve = loader.ReadUInt16(); BakedSize = loader.ReadUInt32(); } else { FrameCount = loader.ReadInt16(); numAnim = loader.ReadUInt16(); numCurve = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); BakedSize = loader.ReadUInt32(); int padding2 = loader.ReadInt16(); } BindModel = loader.Load <Model>(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(numAnim)); Names = loader.LoadCustom(() => loader.LoadStrings(numAnim)); // Offset to name list. Curves = loader.LoadList <AnimCurve>(numCurve); baseDataBytes = new List <byte>(); BaseDataList = loader.LoadCustom(() => { bool[] baseData = new bool[numAnim]; int i = 0; while (i < numAnim) { byte b = loader.ReadByte(); baseDataBytes.Add(b); for (int j = 0; j < 8 && i < numAnim; j++) { baseData[i] = b.GetBit(j); } i++; } return(baseData); }); UserData = loader.LoadDict <UserData>(); } }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { if (loader.IsSwitch) { Name = loader.LoadString(); uint CurveOffset = loader.ReadOffset(); uint BaseDataOffset = loader.ReadOffset(); uint KeyShapeAnimInfosOffset = loader.ReadOffset(); ushort numCurve = loader.ReadUInt16(); ushort numKeyShapeAnim = loader.ReadUInt16(); BeginCurve = loader.ReadInt32(); BeginKeyShapeAnim = loader.ReadInt32(); loader.Seek(4); //Padding KeyShapeAnimInfos = loader.LoadList <KeyShapeAnimInfo>(numKeyShapeAnim, KeyShapeAnimInfosOffset); Curves = loader.LoadList <AnimCurve>(numCurve, CurveOffset); BaseDataList = loader.LoadCustom(() => loader.ReadSingles(numKeyShapeAnim - 1), BaseDataOffset); // Without base shape. } else { ushort numCurve; ushort numKeyShapeAnim; if (loader.ResFile.Version >= 0x03040000) { numCurve = loader.ReadUInt16(); numKeyShapeAnim = loader.ReadUInt16(); } else { numCurve = loader.ReadByte(); numKeyShapeAnim = loader.ReadByte(); unk = loader.ReadUInt16(); } BeginCurve = loader.ReadInt32(); BeginKeyShapeAnim = loader.ReadInt32(); Name = loader.LoadString(); KeyShapeAnimInfos = loader.LoadList <KeyShapeAnimInfo>(numKeyShapeAnim); Curves = loader.LoadList <AnimCurve>(numCurve); BaseDataList = loader.LoadCustom(() => loader.ReadSingles(numKeyShapeAnim - 1)); // Without base shape. } }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { PrimitiveType = loader.ReadEnum <GX2PrimitiveType>(true); IndexFormat = loader.ReadEnum <GX2IndexFormat>(true); uint indexCount = loader.ReadUInt32(); ushort numSubMesh = loader.ReadUInt16(); loader.Seek(2); SubMeshes = loader.LoadList <SubMesh>(numSubMesh); IndexBuffer = loader.Load <Buffer>(); FirstVertex = loader.ReadUInt32(); }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { _flags = loader.ReadUInt32(); Name = loader.LoadString(); BeginRotate = loader.ReadByte(); BeginTranslate = loader.ReadByte(); byte numCurve = loader.ReadByte(); BeginBaseTranslate = loader.ReadByte(); BeginCurve = loader.ReadInt32(); Curves = loader.LoadList <AnimCurve>(numCurve); BaseData = loader.LoadCustom(() => new BoneAnimData(loader, FlagsBase)); }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); Name = loader.LoadString(); Flags = loader.ReadEnum <ShapeFlags>(true); ushort idx = loader.ReadUInt16(); MaterialIndex = loader.ReadUInt16(); BoneIndex = loader.ReadUInt16(); VertexBufferIndex = loader.ReadUInt16(); ushort numSkinBoneIndex = loader.ReadUInt16(); VertexSkinCount = loader.ReadByte(); byte numMesh = loader.ReadByte(); byte numKeyShape = loader.ReadByte(); TargetAttribCount = loader.ReadByte(); ushort numSubMeshBoundingNodes = loader.ReadUInt16(); // Padding in engine. Radius = loader.ReadSingle(); VertexBuffer = loader.Load <VertexBuffer>(); Meshes = loader.LoadList <Mesh>(numMesh); SkinBoneIndices = loader.LoadCustom(() => loader.ReadUInt16s(numSkinBoneIndex)); KeyShapes = loader.LoadDict <KeyShape>(); // TODO: At least BotW has more data following the Boundings, or that are no boundings at all. if (numSubMeshBoundingNodes == 0) { // Compute the count differently if the node count was padding. SubMeshBoundings = loader.LoadCustom(() => loader.ReadBoundings(Meshes[0].SubMeshes.Count + 1)); } else { SubMeshBoundingNodes = loader.LoadList <BoundingNode>(numSubMeshBoundingNodes); SubMeshBoundings = loader.LoadCustom(() => loader.ReadBoundings(numSubMeshBoundingNodes)); SubMeshBoundingIndices = loader.LoadCustom(() => loader.ReadUInt16s(numSubMeshBoundingNodes)); } uint userPointer = loader.ReadUInt32(); }
void IResData.Load(ResFileLoader loader) { if (loader.IsSwitch) { Name = loader.LoadString(); uint CurveOffset = loader.ReadOffset(); uint BaseDataOffset = loader.ReadOffset(); if (loader.ResFile.VersionMajor2 == 9) { long unk1 = loader.ReadInt64(); long unk2 = loader.ReadInt64(); } _flags = loader.ReadUInt32(); BeginRotate = loader.ReadByte(); BeginTranslate = loader.ReadByte(); byte numCurve = loader.ReadByte(); BeginBaseTranslate = loader.ReadByte(); BeginCurve = loader.ReadInt32(); int padding = loader.ReadInt32(); BaseData = loader.LoadCustom(() => new BoneAnimData(loader, FlagsBase), BaseDataOffset); Curves = loader.LoadList <AnimCurve>(numCurve, CurveOffset); } else { _flags = loader.ReadUInt32(); Name = loader.LoadString(); BeginRotate = loader.ReadByte(); BeginTranslate = loader.ReadByte(); byte numCurve = loader.ReadByte(); BeginBaseTranslate = loader.ReadByte(); BeginCurve = loader.ReadByte(); loader.Seek(3); Curves = loader.LoadList <AnimCurve>(numCurve); BaseData = loader.LoadCustom(() => new BoneAnimData(loader, FlagsBase)); } }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { if (loader.IsSwitch) { uint SubMeshArrayOffset = loader.ReadOffset(); MemoryPool = loader.Load <MemoryPool>(); long Buffer = loader.ReadOffset(); var bufferSize = loader.Load <BufferSize>(); uint FaceBufferOffset = loader.ReadUInt32(); PrimitiveType = PrimitiveTypeList[loader.ReadEnum <SwitchPrimitiveType>(true)]; IndexFormat = IndexList[loader.ReadEnum <SwitchIndexFormat>(true)]; uint indexCount = loader.ReadUInt32(); FirstVertex = loader.ReadUInt32(); ushort numSubMesh = loader.ReadUInt16(); ushort padding = loader.ReadUInt16(); SubMeshes = loader.LoadList <SubMesh>(numSubMesh, SubMeshArrayOffset).ToList(); uint DataOffset = (uint)BufferInfo.BufferOffset + FaceBufferOffset; //Load buffer data from mem block IndexBuffer = new Buffer(); IndexBuffer.Flags = bufferSize.Flag; IndexBuffer.Data = new byte[1][]; IndexBuffer.Data[0] = loader.LoadCustom(() => loader.ReadBytes((int)bufferSize.Size), DataOffset); } else { PrimitiveType = loader.ReadEnum <GX2PrimitiveType>(true); IndexFormat = loader.ReadEnum <GX2IndexFormat>(true); uint indexCount = loader.ReadUInt32(); ushort numSubMesh = loader.ReadUInt16(); loader.Seek(2); SubMeshes = loader.LoadList <SubMesh>(numSubMesh).ToList(); IndexBuffer = loader.Load <Buffer>(); FirstVertex = loader.ReadUInt32(); } }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { ushort numCurve; ushort numKeyShapeAnim; if (loader.ResFile.Version >= 0x03040000) { numCurve = loader.ReadUInt16(); numKeyShapeAnim = loader.ReadUInt16(); } else { numCurve = loader.ReadByte(); numKeyShapeAnim = loader.ReadByte(); unk = loader.ReadUInt16(); } BeginCurve = loader.ReadInt32(); BeginKeyShapeAnim = loader.ReadInt32(); Name = loader.LoadString(); KeyShapeAnimInfos = loader.LoadList <KeyShapeAnimInfo>(numKeyShapeAnim); Curves = loader.LoadList <AnimCurve>(numCurve); BaseDataList = loader.LoadCustom(() => loader.ReadSingles(numKeyShapeAnim - 1)); // Without base shape. }
void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); byte numVertexAttrib = loader.ReadByte(); byte numBuffer = loader.ReadByte(); ushort idx = loader.ReadUInt16(); uint vertexCount = loader.ReadUInt32(); VertexSkinCount = loader.ReadByte(); loader.Seek(3); uint ofsVertexAttribList = loader.ReadOffset(); // Only load dict. Attributes = loader.LoadDict <VertexAttrib>(); Buffers = loader.LoadList <Buffer>(numBuffer); uint userPointer = loader.ReadUInt32(); }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); Name = loader.LoadString(); Path = loader.LoadString(); _flags = loader.ReadUInt32(); FrameCount = loader.ReadInt32(); ushort numBoneAnim = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); int numCurve = loader.ReadInt32(); BakedSize = loader.ReadUInt32(); BoneAnims = loader.LoadList <BoneAnim>(numBoneAnim); BindSkeleton = loader.Load <Skeleton>(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(numBoneAnim)); UserData = loader.LoadDict <UserData>(); }
void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); Flags = loader.ReadEnum <CameraAnimFlags>(true); loader.Seek(2); FrameCount = loader.ReadInt32(); byte numCurve = loader.ReadByte(); loader.Seek(1); ushort numUserData = loader.ReadUInt16(); BakedSize = loader.ReadUInt32(); Name = loader.LoadString(); Curves = loader.LoadList <AnimCurve>(numCurve); BaseData = loader.LoadCustom(() => new CameraAnimData(loader)); UserData = loader.LoadDict <UserData>(); }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); if (loader.IsSwitch) { Switch.ShapeAnimParser.Read((Switch.Core.ResFileSwitchLoader)loader, this); } else { Name = loader.LoadString(); Path = loader.LoadString(); Flags = loader.ReadEnum <ShapeAnimFlags>(true); ushort numUserData; ushort numVertexShapeAnim; ushort numKeyShapeAnim; ushort numCurve; if (loader.ResFile.Version >= 0x03040000) { numUserData = loader.ReadUInt16(); FrameCount = loader.ReadInt32(); numVertexShapeAnim = loader.ReadUInt16(); numKeyShapeAnim = loader.ReadUInt16(); numCurve = loader.ReadUInt16(); loader.Seek(2); BakedSize = loader.ReadUInt32(); } else { FrameCount = loader.ReadUInt16(); numVertexShapeAnim = loader.ReadUInt16(); numKeyShapeAnim = loader.ReadUInt16(); numUserData = loader.ReadUInt16(); numCurve = loader.ReadUInt16(); BakedSize = loader.ReadUInt32(); } BindModel = loader.Load <Model>(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(numVertexShapeAnim)); VertexShapeAnims = loader.LoadList <VertexShapeAnim>(numVertexShapeAnim); UserData = loader.LoadDict <UserData>(); } }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); Name = loader.LoadString(); Path = loader.LoadString(); Skeleton = loader.Load <Skeleton>(); uint ofsVertexBufferList = loader.ReadOffset(); Shapes = loader.LoadDict <Shape>(); Materials = loader.LoadDict <Material>(); UserData = loader.LoadDict <UserData>(); ushort numVertexBuffer = loader.ReadUInt16(); ushort numShape = loader.ReadUInt16(); ushort numMaterial = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); uint totalVertexCount = loader.ReadUInt32(); uint userPointer = loader.ReadUInt32(); VertexBuffers = loader.LoadList <VertexBuffer>(numVertexBuffer, ofsVertexBufferList); }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); Name = loader.LoadString(); Path = loader.LoadString(); Flags = loader.ReadEnum <ShapeAnimFlags>(true); ushort numUserData = loader.ReadUInt16(); FrameCount = loader.ReadInt32(); ushort numVertexShapeAnim = loader.ReadUInt16(); ushort numKeyShapeAnim = loader.ReadUInt16(); ushort numCurve = loader.ReadUInt16(); loader.Seek(2); BakedSize = loader.ReadUInt32(); BindModel = loader.Load <Model>(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(numVertexShapeAnim)); VertexShapeAnims = loader.LoadList <VertexShapeAnim>(numVertexShapeAnim); UserData = loader.LoadDict <UserData>(); }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); Name = loader.LoadString(); Path = loader.LoadString(); Flags = loader.ReadEnum <TexPatternAnimFlags>(true); ushort numUserData = loader.ReadUInt16(); FrameCount = loader.ReadInt32(); ushort numTextureRef = loader.ReadUInt16(); ushort numMatAnim = loader.ReadUInt16(); int numPatAnim = loader.ReadInt32(); int numCurve = loader.ReadInt32(); BakedSize = loader.ReadUInt32(); BindModel = loader.Load <Model>(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(numMatAnim)); TexPatternMatAnims = loader.LoadList <TexPatternMatAnim>(numMatAnim); TextureRefs = loader.LoadDict <TextureRef>(); UserData = loader.LoadDict <UserData>(); }
void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); if (loader.IsSwitch) { Switch.VertexBufferParser.Load((Switch.Core.ResFileSwitchLoader)loader, this); } else { byte numVertexAttrib = loader.ReadByte(); byte numBuffer = loader.ReadByte(); ushort idx = loader.ReadUInt16(); uint vertexCount = loader.ReadUInt32(); VertexSkinCount = loader.ReadByte(); loader.Seek(3); uint ofsVertexAttribList = loader.ReadOffset(); // Only load dict. Attributes = loader.LoadDict <VertexAttrib>(); Buffers = loader.LoadList <Buffer>(numBuffer); uint userPointer = loader.ReadUInt32(); } }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); if (loader.IsSwitch) { Switch.CameraAnimParser.Read((Switch.Core.ResFileSwitchLoader)loader, this); } else { Flags = loader.ReadEnum <CameraAnimFlags>(false); loader.Seek(2); FrameCount = loader.ReadInt32(); byte numCurve = loader.ReadByte(); loader.Seek(1); ushort numUserData = loader.ReadUInt16(); BakedSize = loader.ReadUInt32(); Name = loader.LoadString(); Curves = loader.LoadList <AnimCurve>(numCurve); BaseData = loader.LoadCustom(() => new CameraAnimData(loader)); UserData = loader.LoadDict <UserData>(); } }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); if (loader.IsSwitch) { Switch.ShapeParser.Read((Switch.Core.ResFileSwitchLoader)loader, this); } else { Name = loader.LoadString(); Flags = loader.ReadEnum <ShapeFlags>(true); ushort idx = loader.ReadUInt16(); MaterialIndex = loader.ReadUInt16(); BoneIndex = loader.ReadUInt16(); VertexBufferIndex = loader.ReadUInt16(); ushort numSkinBoneIndex = loader.ReadUInt16(); VertexSkinCount = loader.ReadByte(); byte numMesh = loader.ReadByte(); byte numKeyShape = loader.ReadByte(); TargetAttribCount = loader.ReadByte(); ushort numSubMeshBoundingNodes = loader.ReadUInt16(); // Padding in engine. if (loader.ResFile.Version >= 0x04050000) { RadiusArray = loader.LoadCustom(() => loader.ReadSingles(numMesh))?.ToList(); } else { RadiusArray = loader.ReadSingles(1).ToList(); } VertexBuffer = loader.Load <VertexBuffer>(); Meshes = loader.LoadList <Mesh>(numMesh).ToList(); SkinBoneIndices = loader.LoadCustom(() => loader.ReadUInt16s(numSkinBoneIndex))?.ToList(); KeyShapes = loader.LoadDict <KeyShape>(); // TODO: At least BotW has more data following the Boundings, or that are no boundings at all. if (numSubMeshBoundingNodes == 0) { if (loader.ResFile.Version >= 0x04050000) { numSubMeshBoundingNodes = (ushort)(Meshes.Count + Meshes.Sum(x => x.SubMeshes.Count)); } else { numSubMeshBoundingNodes = (ushort)(1 + Meshes[0].SubMeshes.Count + 1); } SubMeshBoundings = loader.LoadCustom(() => loader.ReadBoundings(numSubMeshBoundingNodes))?.ToList(); } else { SubMeshBoundingNodes = loader.LoadList <BoundingNode>(numSubMeshBoundingNodes)?.ToList(); SubMeshBoundings = loader.LoadCustom(() => loader.ReadBoundings(numSubMeshBoundingNodes))?.ToList(); SubMeshBoundingIndices = loader.LoadCustom(() => loader.ReadUInt16s(numSubMeshBoundingNodes))?.ToList(); } if (SubMeshBoundingNodes == null) { SubMeshBoundingNodes = new List <BoundingNode>(); } if (SubMeshBoundings == null) { SubMeshBoundings = new List <Bounding>(); } if (SubMeshBoundingIndices == null) { SubMeshBoundingIndices = new List <ushort>(); } uint userPointer = loader.ReadUInt32(); } }
// ---- METHODS ------------------------------------------------------------------------------------------------ internal void Load(ResFileLoader loader, string signature) { ParamAnimInfos = new List <ParamAnimInfo>(); PatternAnimInfos = new List <PatternAnimInfo>(); Constants = new List <AnimConstant>(); Curves = new List <AnimCurve>(); if (signature == "FSHU") { ushort numAnimParam = loader.ReadUInt16(); ushort numCurve = loader.ReadUInt16(); ushort numConstant = loader.ReadUInt16(); loader.Seek(2); ShaderParamCurveIndex = loader.ReadInt32(); InfoIndex = loader.ReadInt32(); Name = loader.LoadString(); ParamAnimInfos = loader.LoadList <ParamAnimInfo>(numAnimParam); Curves = loader.LoadList <AnimCurve>(numCurve); Constants = loader.LoadCustom(() => loader.ReadAnimConstants(numConstant)); } else if (signature == "FTXP") { ushort numPatAnim = loader.ReadUInt16(); ushort numCurve = loader.ReadUInt16(); TexturePatternCurveIndex = loader.ReadInt32(); InfoIndex = loader.ReadInt32(); Name = loader.LoadString(); PatternAnimInfos = loader.LoadList <PatternAnimInfo>(numPatAnim); Curves = loader.LoadList <AnimCurve>(numCurve); BaseDataList = loader.LoadCustom(() => loader.ReadUInt16s(numPatAnim)); } else if (signature == "FMAA") { Name = loader.LoadString(); uint ShaderParamAnimOffset = loader.ReadOffset(); uint TexturePatternAnimOffset = loader.ReadOffset(); uint CurveOffset = loader.ReadOffset(); uint ConstantAnimArrayOffset = loader.ReadOffset(); ShaderParamCurveIndex = loader.ReadUInt16(); TexturePatternCurveIndex = loader.ReadUInt16(); VisualConstantIndex = loader.ReadUInt16(); VisalCurveIndex = loader.ReadUInt16(); BeginVisalConstantIndex = loader.ReadUInt16(); ushort ShaderParamAnimCount = loader.ReadUInt16(); ushort TexutrePatternAnimCount = loader.ReadUInt16(); ushort ConstantAnimCount = loader.ReadUInt16(); ushort CurveCount = loader.ReadUInt16(); loader.Seek(6); Curves = loader.LoadList <AnimCurve>(CurveCount, CurveOffset); ParamAnimInfos = loader.LoadList <ParamAnimInfo>(ShaderParamAnimCount, ShaderParamAnimOffset); PatternAnimInfos = loader.LoadList <PatternAnimInfo>(TexutrePatternAnimCount, TexturePatternAnimOffset); Constants = loader.LoadCustom(() => loader.ReadAnimConstants(ConstantAnimCount), ConstantAnimArrayOffset); //Set base data list for texture patterns //Get the first value from either constants or curves BaseDataList = new ushort[PatternAnimInfos.Count]; for (int i = 0; i < PatternAnimInfos.Count; i++) { if (PatternAnimInfos[i].BeginConstant != ushort.MaxValue) { BaseDataList[i] = (ushort)((int)Constants[PatternAnimInfos[i].BeginConstant].Value); } else if (PatternAnimInfos[i].CurveIndex != ushort.MaxValue) { BaseDataList[i] = (ushort)Curves[PatternAnimInfos[i].CurveIndex].Keys[0, 0]; } } } }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { loader.CheckSignature(_signature); if (loader.IsSwitch) { if (loader.ResFile.VersionMajor2 == 9) { _flags = loader.ReadUInt32(); } else { ((Switch.Core.ResFileSwitchLoader)loader).LoadHeaderBlock(); } Name = loader.LoadString(); Path = loader.LoadString(); BindSkeleton = loader.Load <Skeleton>(); uint BindIndexArray = loader.ReadOffset(); uint BoneAnimArrayOffset = loader.ReadOffset(); UserData = loader.LoadDictValues <UserData>(); if (loader.ResFile.VersionMajor2 != 9) { _flags = loader.ReadUInt32(); } FrameCount = loader.ReadInt32(); int numCurve = loader.ReadInt32(); BakedSize = loader.ReadUInt32(); ushort numBoneAnim = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); if (loader.ResFile.VersionMajor2 != 9) { loader.ReadUInt32(); //Padding } BoneAnims = loader.LoadList <BoneAnim>(numBoneAnim, BoneAnimArrayOffset).ToList(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(numBoneAnim), BindIndexArray); } else { ushort numBoneAnim = 0; if (loader.ResFile.Version >= 0x02040000) { Name = loader.LoadString(); Path = loader.LoadString(); _flags = loader.ReadUInt32(); if (loader.ResFile.Version >= 0x03040000) { FrameCount = loader.ReadInt32(); numBoneAnim = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); int numCurve = loader.ReadInt32(); BakedSize = loader.ReadUInt32(); } else { FrameCount = loader.ReadUInt16(); numBoneAnim = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); ushort numCurve = loader.ReadUInt16(); BakedSize = loader.ReadUInt32(); loader.Seek(4); //padding } BoneAnims = loader.LoadList <BoneAnim>(numBoneAnim).ToList(); BindSkeleton = loader.Load <Skeleton>(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(numBoneAnim)); UserData = loader.LoadDict <UserData>(); } else { _flags = loader.ReadUInt32(); FrameCount = loader.ReadUInt16(); numBoneAnim = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); ushort numCurve = loader.ReadUInt16(); Name = loader.LoadString(); Path = loader.LoadString(); BoneAnims = loader.LoadList <BoneAnim>(numBoneAnim).ToList(); BindSkeleton = loader.Load <Skeleton>(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(numBoneAnim)); } } }
// ---- METHODS ------------------------------------------------------------------------------------------------ void IResData.Load(ResFileLoader loader) { signature = loader.ReadString(4, Encoding.ASCII); uint materialAnimOffset = 0; ushort materialCount = 0; if (signature == "FMAA") { if (loader.ResFile.VersionMajor2 == 9) { Flags = loader.ReadEnum <MaterialAnimFlags>(true); loader.ReadUInt16(); } else { ((Switch.Core.ResFileSwitchLoader)loader).LoadHeaderBlock(); } Name = loader.LoadString(); Path = loader.LoadString(); BindModel = loader.Load <Model>(true); uint BindIndicesOffset = loader.ReadOffset(); materialAnimOffset = loader.ReadOffset(); uint unk = loader.ReadOffset(); //Empty section. Maybe set at runtime uint TextureNameArrayOffset = loader.ReadOffset(); UserData = loader.LoadDictValues <UserData>(); uint TextureBindArrayOffset = loader.ReadOffset(); if (loader.ResFile.VersionMajor2 != 9) { Flags = loader.ReadEnum <MaterialAnimFlags>(true); } ushort numUserData = 0; ushort CurveCount = 0; if (loader.ResFile.VersionMajor2 == 9) { FrameCount = loader.ReadInt32(); BakedSize = loader.ReadUInt32(); numUserData = loader.ReadUInt16(); materialCount = loader.ReadUInt16(); CurveCount = loader.ReadUInt16(); } else { numUserData = loader.ReadUInt16(); materialCount = loader.ReadUInt16(); CurveCount = loader.ReadUInt16(); FrameCount = loader.ReadInt32(); BakedSize = loader.ReadUInt32(); } ushort ShaderParamAnimCount = loader.ReadUInt16(); ushort TexturePatternAnimCount = loader.ReadUInt16(); ushort VisabiltyAnimCount = loader.ReadUInt16(); ushort TextureCount = loader.ReadUInt16(); if (loader.ResFile.VersionMajor2 == 9) { loader.ReadUInt16(); //padding } BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(materialCount), BindIndicesOffset); var textureList = loader.LoadCustom(() => loader.LoadStrings(TextureCount), TextureNameArrayOffset); TextureBindArray = loader.LoadCustom(() => loader.ReadInt64s(TextureCount), TextureBindArrayOffset); if (textureList == null) { textureList = new List <string>(); } foreach (var tex in textureList) { TextureNames.Add(tex, new TextureRef() { Name = tex }); } } else if (signature == "FSHU") { if (loader.ResFile.Version >= 0x02040000) { Name = loader.LoadString(); Path = loader.LoadString(); Flags = (MaterialAnimFlags)loader.ReadUInt32(); if (loader.ResFile.Version >= 0x03040000) { FrameCount = loader.ReadInt32(); materialCount = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); int numParamAnim = loader.ReadInt32(); int numCurve = loader.ReadInt32(); BakedSize = loader.ReadUInt32(); } else { FrameCount = loader.ReadUInt16(); materialCount = loader.ReadUInt16(); UnknownValue = loader.ReadUInt32(); int numCurve = loader.ReadInt32(); BakedSize = loader.ReadUInt32(); int padding2 = loader.ReadInt32(); } BindModel = loader.Load <Model>(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(materialCount)); materialAnimOffset = loader.ReadOffset(); UserData = loader.LoadDict <UserData>(); } else { Flags = (MaterialAnimFlags)loader.ReadUInt32(); FrameCount = loader.ReadInt16(); materialCount = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); ushort unk = loader.ReadUInt16(); BakedSize = loader.ReadUInt32(); Name = loader.LoadString(); Path = loader.LoadString(); BindModel = loader.Load <Model>(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(materialCount)); materialAnimOffset = loader.ReadOffset(); } } else if (signature == "FTXP") { Name = loader.LoadString(); Path = loader.LoadString(); Flags = loader.ReadEnum <MaterialAnimFlags>(true); ushort numTextureRef = 0; if (loader.ResFile.Version >= 0x03040000) { ushort numUserData = loader.ReadUInt16(); FrameCount = loader.ReadInt32(); numTextureRef = loader.ReadUInt16(); materialCount = loader.ReadUInt16(); int numPatAnim = loader.ReadInt32(); int numCurve = loader.ReadInt32(); BakedSize = loader.ReadUInt32(); } else { FrameCount = loader.ReadUInt16(); numTextureRef = loader.ReadUInt16(); materialCount = loader.ReadUInt16(); ushort numUserData = loader.ReadUInt16(); int numPatAnim = loader.ReadInt16(); int numCurve = loader.ReadInt32(); BakedSize = loader.ReadUInt32(); loader.Seek(4); //padding } BindModel = loader.Load <Model>(); BindIndices = loader.LoadCustom(() => loader.ReadUInt16s(materialCount)); materialAnimOffset = loader.ReadOffset(); if (loader.ResFile.Version >= 0x03040000) { TextureNames = loader.LoadDict <TextureRef>(); } else { int TextureCount = 0; foreach (var patternAnim in MaterialAnimDataList) { foreach (var curve in patternAnim.Curves) { List <uint> frames = new List <uint>(); foreach (float key in curve.Keys) { frames.Add((uint)key); } TextureCount = (short)frames.Max(); } } var TextureRefNames = loader.LoadList <TextureRef>(numTextureRef); foreach (var texRef in TextureRefNames) { TextureNames.Add(texRef.Name, texRef); } } UserData = loader.LoadDict <UserData>(); } //Load materials and parse based on the signature of the section MaterialAnimDataList = loader.LoadCustom(() => { List <MaterialAnimData> materialAnims = new List <MaterialAnimData>(); for (int i = 0; i < materialCount; i++) { materialAnims.Add(new MaterialAnimData(loader, signature)); } return(materialAnims); }, materialAnimOffset); }