コード例 #1
0
 public override void Write(Vault vault, BinaryWriter bw)
 {
     _debugNameText.Write(vault, bw);
     bw.Write(BlendEnable);
     bw.Write(AlphaTestEnable);
     bw.AlignWriter(4);
     bw.Write(AlphaTestRef);
     bw.WriteEnum(AlphaTestFunc);
     bw.WriteArray(SourceColor, bw.WriteEnum);
     bw.WriteArray(DestColor, bw.WriteEnum);
     bw.WriteArray(OperationColor, bw.WriteEnum);
     bw.WriteArray(SourceAlpha, bw.WriteEnum);
     bw.WriteArray(DestAlpha, bw.WriteEnum);
     bw.WriteArray(OperationAlpha, bw.WriteEnum);
     BlendFactor.Write(vault, bw);
     bw.WriteArray(RGBAEnableRT0, bw.Write);
     bw.WriteArray(RGBAEnableRT1, bw.Write);
     bw.WriteArray(RGBAEnableRT2, bw.Write);
     bw.WriteArray(RGBAEnableRT3, bw.Write);
     bw.Write(AlphaToMaskEnable_XENON);
     bw.WriteArray(HiPrecisionBlendEnable_XENON, bw.Write);
     bw.WriteArray(BlendEnable_PS3, bw.Write);
     bw.Write(BlendFactorF16_PS3);
     bw.AlignWriter(4);
 }
コード例 #2
0
 public override void Write(Vault vault, BinaryWriter bw)
 {
     _debugNameText = new Text(Class, Field, Collection)
     {
         Value = DebugName
     };
     _debugNameText.Write(vault, bw);
     bw.WriteEnum(CullMode);
     bw.Write(DepthBias);
     bw.Write(ScaleDepthBias);
     bw.Write(ScissorTestEnable);
     bw.Write(PrimitiveResetEnable);
     bw.AlignWriter(4);
     bw.Write(PrimitiveResetIndex);
     ScissorData.Write(vault, bw);
     bw.WriteEnum(FillMode);
     bw.Write(MultiSampleAntialiasEnable);
     bw.AlignWriter(4);
     bw.Write(MultiSampleMask);
     bw.Write(ViewPortEnable);
     bw.Write(HalfPixelOffsetEnable);
     bw.AlignWriter(4);
     bw.WriteEnum(ShadeMode);
     bw.WriteEnum(FrontFace);
 }
コード例 #3
0
        public override void WritePointerData(Vault vault, BinaryWriter bw)
        {
            foreach (var baseField in Collection.Class.BaseFields)
            {
                bw.AlignWriter(baseField.Alignment);
                if (DestinationLayoutPointer == 0)
                {
                    DestinationLayoutPointer = bw.BaseStream.Position;
                }

                if (bw.BaseStream.Position - DestinationLayoutPointer != baseField.Offset)
                {
                    throw new Exception("incorrect offset");
                }

                Collection.GetRawValue(baseField.Name).Write(vault, bw);
            }

            foreach (var dataPair in Collection.GetData())
            {
                VltClassField field = Collection.Class[dataPair.Key];

                if (!field.IsInLayout)
                {
                    var entry = Entries.First(e => e.Key == field.Key);

                    if (!(entry.InlineData is IPointerObject pointerObject))
                    {
                        continue;
                    }

                    bw.AlignWriter(field.Alignment);
                    pointerObject.WritePointerData(vault, bw);
                }
                else
                {
                    if (!(dataPair.Value is IPointerObject pointerObject))
                    {
                        continue;
                    }

                    bw.AlignWriter(field.Alignment);
                    pointerObject.WritePointerData(vault, bw);
                }
            }

            if (Collection.Class.HasBaseFields)
            {
                // align to 4 bytes for layout data
                bw.AlignWriter(4);
            }
            else
            {
                // there is no layout data but we might still be
                // in a bad position, so align to 2 bytes
                bw.AlignWriter(2);
            }
        }
コード例 #4
0
ファイル: NISActor.cs プロジェクト: funk-yourself/VaultLib
 public override void Write(Vault vault, BinaryWriter bw)
 {
     _actorNameText.Write(vault, bw);
     _carChannelNameText.Write(vault, bw);
     bw.Write(IsDriver);
     bw.AlignWriter(4);
     bw.Write(ExitAnimSec);
     bw.Write(IsFacePixelation);
     bw.AlignWriter(4);
 }
コード例 #5
0
ファイル: Alias.cs プロジェクト: funk-yourself/VaultLib
 public override void Write(Vault vault, BinaryWriter bw)
 {
     bw.Write(Kit);
     bw.AlignWriter(4);
     bw.Write(Region);
     _srcSlidersPtr = bw.BaseStream.Position;
     bw.Write(0);
     bw.Write((byte)Sliders.Count);
     bw.AlignWriter(4);
 }
コード例 #6
0
 public override void Write(Vault vault, BinaryWriter bw)
 {
     bw.WriteEnum(SlotID);
     Group.Write(vault, bw);
     bw.Write(Swatch);
     bw.AlignWriter(4);
     bw.Write(Saturation);
     bw.Write(Variance);
     bw.Write(Unknown);
     bw.AlignWriter(4);
 }
コード例 #7
0
 public override void Write(Vault vault, BinaryWriter bw)
 {
     ReferencedRow.Write(vault, bw);
     bw.Write(IsMember);
     bw.AlignWriter(4);
     bw.Write(MemberIndex);
     bw.Write(IsElement);
     bw.AlignWriter(4);
     bw.Write(ElementIndex);
     bw.WriteEnum(ModificationType);
     bw.Write(Value);
 }
コード例 #8
0
ファイル: GameplayVault.cs プロジェクト: NFS404/Attribulator
        public void Save(BinaryWriter bw, IList <Vault> vaults, PackSavingOptions savingOptions = null)
        {
            if (vaults.Count != 1)
            {
                throw new InvalidDataException("Can only save exactly 1 vault");
            }

            char[] nameChars = new char[0x2C];
            _name.CopyTo(0, nameChars, 0, _name.Length);

            VaultWriter vaultWriter = new VaultWriter(vaults[0], new VaultSaveOptions());

            vaultWriter.ExportManager.AddExport(new VaultSlotExport());
            VaultStreamInfo vaultStreamInfo = vaultWriter.BuildVault();

            bw.Write(nameChars);

            var binOffsetPos = bw.BaseStream.Position;

            bw.Write(0);
            bw.Write((uint)vaultStreamInfo.BinStream.Length);
            var vltOffsetPos = bw.BaseStream.Position;

            bw.Write(0);
            bw.Write((uint)vaultStreamInfo.VltStream.Length);
            var fileSizePos = bw.BaseStream.Position;

            bw.Write(0);

            bw.AlignWriter(0x40);
            var binOffset = bw.BaseStream.Position;

            vaultStreamInfo.BinStream.CopyTo(bw.BaseStream);

            bw.AlignWriter(0x40);
            var vltOffset = bw.BaseStream.Position;

            vaultStreamInfo.VltStream.CopyTo(bw.BaseStream);
            //bw.AlignWriter(0x80);

            bw.BaseStream.Position = binOffsetPos;
            bw.Write((uint)binOffset);

            bw.BaseStream.Position = vltOffsetPos;
            bw.Write((uint)vltOffset);

            bw.BaseStream.Position = fileSizePos;
            bw.Write((uint)bw.BaseStream.Length);

            bw.BaseStream.Position = bw.BaseStream.Length;
        }
コード例 #9
0
        public override void WritePointerData(Vault vault, BinaryWriter bw)
        {
            foreach (var baseField in Collection.Class.BaseFields)
            {
                bw.AlignWriter(baseField.Alignment);
                if (_dstLayoutPtr == 0)
                {
                    _dstLayoutPtr = bw.BaseStream.Position;
                }

                if (bw.BaseStream.Position - _dstLayoutPtr != baseField.Offset)
                {
                    throw new Exception("incorrect offset");
                }

                Collection.GetRawValue(baseField.Name).Write(vault, bw);
                //Collection.Data[baseField.Name].Write(vault, bw);
            }

            foreach (var dataPair in Collection.GetData())
            {
                VltClassField field = Collection.Class[dataPair.Key];

                if (!field.IsInLayout)
                {
                    var entry = _entries.First(e => e.Key == field.Key);

                    if (!(entry.InlineData is IPointerObject pointerObject))
                    {
                        continue;
                    }

                    bw.AlignWriter(field.Alignment);
                    pointerObject.WritePointerData(vault, bw);
                }
                else
                {
                    if (!(dataPair.Value is IPointerObject pointerObject))
                    {
                        continue;
                    }

                    bw.AlignWriter(field.Alignment);
                    pointerObject.WritePointerData(vault, bw);
                }
            }

            bw.AlignWriter(Collection.Class.HasBaseFields ? 4 : 2);
        }
コード例 #10
0
 public override void Write(Vault vault, BinaryWriter bw)
 {
     bw.WriteEnum(AnimType);
     bw.Write(FPS);
     bw.Write(RandomStartFrame);
     bw.AlignWriter(4);
 }
コード例 #11
0
 public override void Write(Vault vault, BinaryWriter bw)
 {
     bw.WriteEnum(mPerformanceType);
     bw.Write(mInverse);
     bw.AlignWriter(4);
     bw.Write(mPercentage);
 }
コード例 #12
0
 public override void Write(Vault vault, BinaryWriter bw)
 {
     _debugNameText.Write(vault, bw);
     bw.Write(TwoSidedStencilMode);
     bw.Write(ZEnable);
     bw.Write(ZWriteEnable);
     bw.Write(StencilEnable);
     bw.WriteEnum(ZFunc);
     bw.WriteEnum(StencilFunc);
     bw.WriteEnum(StencilFuncCCW);
     bw.Write(StencilRef);
     bw.Write(StencilRefCCW);
     bw.Write(StencilMask);
     bw.Write(StencilMaskCCW);
     bw.Write(StencilWriteMask);
     bw.Write(StencilWriteMaskCCW);
     bw.WriteEnum(StencilFailOp);
     bw.WriteEnum(StencilFailOpCCW);
     bw.WriteEnum(StencilZFailOp);
     bw.WriteEnum(StencilZFailOpCCW);
     bw.WriteEnum(StencilPassOp);
     bw.WriteEnum(StencilPassOpCCW);
     bw.WriteEnum(HiStencilFunc);
     bw.Write(HiStencilRef);
     bw.Write(HiStencilEnable);
     bw.Write(HiStencilWriteEnable);
     bw.AlignWriter(4);
 }
コード例 #13
0
ファイル: VinylColor.cs プロジェクト: funk-yourself/VaultLib
 public override void Write(Vault vault, BinaryWriter bw)
 {
     bw.Write(Swatch);
     bw.Write(Saturation);
     bw.Write(Brightness);
     bw.AlignWriter(4);
 }
コード例 #14
0
 public override void Write(Vault vault, BinaryWriter bw)
 {
     PhysicsTuningSlider.Write(vault, bw);
     bw.Write(CenteredAroundPreset);
     bw.AlignWriter(4);
     bw.Write(Position);
 }
コード例 #15
0
 public override void Write(Vault vault, BinaryWriter bw)
 {
     ReferencedAttribute.Write(vault, bw);
     bw.Write(IsMember);
     bw.AlignWriter(4);
     bw.Write(MemberIndex);
     bw.Write(BlendingPower);
 }
コード例 #16
0
 public void WritePointerData(Vault vault, BinaryWriter bw)
 {
     foreach (var pointerObject in Items.OfType <IPointerObject>())
     {
         bw.AlignWriter(ItemAlignment);
         pointerObject.WritePointerData(vault, bw);
     }
 }
コード例 #17
0
ファイル: AttribEntry.cs プロジェクト: funk-yourself/VaultLib
 public void Write(Vault vault, BinaryWriter bw)
 {
     bw.Write(Key);
     InlineData.Write(vault, bw);
     bw.AlignWriter(4);
     bw.Write(TypeIndex);
     bw.WriteEnum(NodeFlags);
 }
コード例 #18
0
ファイル: DecalLayer.cs プロジェクト: funk-yourself/VaultLib
 public override void Write(Vault vault, BinaryWriter bw)
 {
     bw.Write(PartNameHash);
     bw.Write(Mirrored);
     bw.AlignWriter(4);
     Transform.Write(vault, bw);
     Color.Write(vault, bw);
 }
コード例 #19
0
 public override void Write(Vault vault, BinaryWriter bw)
 {
     bw.Write(PartNameHash);
     bw.Write(Mirrored);
     bw.AlignWriter(4);
     Transform.Write(vault, bw);
     for (int i = 0; i < 4; i++)
     {
         Colors[i].Write(vault, bw);
     }
 }
コード例 #20
0
        public void WritePointerData(Vault vault, BinaryWriter bw)
        {
            _typeNamesDst = bw.BaseStream.Position;

            foreach (var type in vault.Database.Types)
            {
                NullTerminatedString.Write(bw, type.Name);
            }

            bw.AlignWriter(8);
        }
コード例 #21
0
        public void WritePointerData(Vault vault, BinaryWriter bw)
        {
            bw.AlignWriter(Field.Alignment);
            _offsetDst = bw.BaseStream.Position;
            Data.Write(vault, bw);

            if (Data is IPointerObject pointerObject)
            {
                pointerObject.WritePointerData(vault, bw);
            }
        }
コード例 #22
0
        public override void Write(Vault vault, BinaryWriter bw)
        {
            bw.WriteEnum(CurveStyle);
            bw.Write(CurvePower);
            bw.Write(CurveMultiplierLowSpeed);
            bw.Write(CurveMultiplierHighSpeed);
            bw.Write(InnerDeadZone);
            bw.Write(OuterDeadZone);
            bw.Write(NumberOfSteps);

            bw.AlignWriter(4);
        }
コード例 #23
0
        public override void Write(Vault vault, BinaryWriter bw)
        {
            bw.Write(Capacity);
            bw.Write((ushort)Items.Count);
            bw.Write(FieldSize);
            bw.Write((ushort)(1 << (Field.Alignment - 1)));

            foreach (var t in Items)
            {
                bw.AlignWriter(ItemAlignment);
                var start = bw.BaseStream.Position;
                t.Write(vault, bw);
                //if (!(t is PrimitiveTypeBase))
                Debug.Assert(bw.BaseStream.Position - start == FieldSize);
            }

            for (var i = 0; i < Capacity - Items.Count; i++)
            {
                bw.AlignWriter(ItemAlignment);
                bw.Write(new byte[FieldSize]);
            }
        }
コード例 #24
0
        public override void Write(Vault vault, BinaryWriter bw)
        {
            bw.Write(Key);
            InlineData.Write(vault, bw);
            if (HasInlineFlag())
            {
                bw.AlignWriter(4);
            }

            bw.Write(TypeIndex);
            bw.Write((byte)NodeFlags);
            bw.Write(EntryFlags);
        }
コード例 #25
0
        public override void WritePointerData(Vault vault, BinaryWriter bw)
        {
            _dstDefinitionsPtr = bw.BaseStream.Position;

            foreach (var field in Class.Fields.Values)
            {
                AttribDefinition64 definition = new AttribDefinition64();
                definition.Key       = VLT64Hasher.Hash(field.Name);
                definition.Alignment = field.Alignment;
                definition.Flags     = field.Flags;
                definition.MaxCount  = field.MaxCount;
                definition.Offset    = field.Offset;
                definition.Size      = field.Size;
                definition.Type      = VLT64Hasher.Hash(field.TypeName);
                definition.Write(vault, bw);
            }

            if (_srcStaticPtr != 0)
            {
                bw.AlignWriter(0x10);

                _dstStaticPtr = bw.BaseStream.Position;

                foreach (var staticField in Class.StaticFields)
                {
                    bw.AlignWriter(staticField.Alignment);
                    staticField.StaticValue.Write(vault, bw);
                }

                foreach (var staticField in Class.StaticFields)
                {
                    if (staticField.StaticValue is IPointerObject pointerObject)
                    {
                        pointerObject.WritePointerData(vault, bw);
                    }
                }
            }
        }
コード例 #26
0
ファイル: FEPartData.cs プロジェクト: funk-yourself/VaultLib
 public override void Write(Vault vault, BinaryWriter bw)
 {
     bw.Write(HAL_ID);
     bw.Write(CF_HAL_ID);
     bw.Write(Price);
     bw.Write(ShowroomUnlock);
     bw.Write(Tier1Price);
     bw.Write(Tier2Price);
     bw.Write(Tier3Price);
     bw.Write(Tier4Price);
     bw.Write(Tier);
     bw.Write(Tier1ShowroomUnlock);
     bw.Write(Tier2ShowroomUnlock);
     bw.Write(Tier3ShowroomUnlock);
     bw.Write(Tier4ShowroomUnlock);
     bw.AlignWriter(4);
     bw.Write(BrandHALId);
     bw.Write(LogoTextureId);
     bw.Write(DetailHash);
     PartDetails.Write(vault, bw);
     _offerIdText.Write(vault, bw);
     bw.Write(IsOnlineLockable);
     bw.AlignWriter(4);
 }
コード例 #27
0
        public override void Write(Vault vault, BinaryWriter bw)
        {
            var binPointers = vault.SaveContext.Pointers.Where(p => p.Type == VltPointerType.Bin).ToList();
            var vltPointers = vault.SaveContext.Pointers.Where(p => p.Type == VltPointerType.Vlt).ToList();

            {
                var targetBin = ExportFactory.CreatePtrRef(vault);
                targetBin.PtrType = EPtrRefType.PtrSetFixupTarget;
                targetBin.Index   = 1;
                targetBin.Write(vault, bw);

                foreach (var binPointer in binPointers)
                {
                    var ptr = ExportFactory.CreatePtrRef(vault);
                    ptr.PtrType     = binPointer.Destination == 0 ? EPtrRefType.PtrNull : EPtrRefType.PtrDepRelative;
                    ptr.FixupOffset = binPointer.FixUpOffset;
                    ptr.Destination = binPointer.Destination;
                    ptr.Index       = 1;
                    ptr.Write(vault, bw);
                }
            }

            {
                var targetVlt = ExportFactory.CreatePtrRef(vault);

                targetVlt.PtrType = EPtrRefType.PtrSetFixupTarget;
                targetVlt.Index   = 0;
                targetVlt.Write(vault, bw);

                foreach (var vltPointer in vltPointers)
                {
                    var ptr = ExportFactory.CreatePtrRef(vault);
                    ptr.PtrType     = vltPointer.Destination == 0 ? EPtrRefType.PtrNull : EPtrRefType.PtrDepRelative;
                    ptr.FixupOffset = vltPointer.FixUpOffset;
                    ptr.Destination = vltPointer.Destination;
                    ptr.Index       = 1;
                    ptr.Write(vault, bw);
                }
            }

            {
                var end = ExportFactory.CreatePtrRef(vault);
                end.PtrType = EPtrRefType.PtrEnd;
                end.Write(vault, bw);
            }

            bw.AlignWriter(0x10);
        }
コード例 #28
0
 public override void Write(Vault vault, BinaryWriter bw)
 {
     _ptrPackagesSrc = bw.BaseStream.Position;
     bw.Write(0);
     bw.Write(Cost);
     bw.Write(Tier1_Cost);
     bw.Write(Tier2_Cost);
     bw.Write(Tier3_Cost);
     bw.Write(Tier4_Cost);
     _offerIdText = new Text(Class, Field, Collection)
     {
         Value = OfferID
     };
     _offerIdText.Write(vault, bw);
     bw.Write((byte)Entries.Count);
     bw.AlignWriter(4);
 }
コード例 #29
0
        public override void Write(Vault vault, BinaryWriter bw)
        {
            Assembly currentAssembly = Assembly.GetAssembly(typeof(Database));
            AssemblyMetadataAttribute metadataAttribute =
                currentAssembly.GetCustomAttributes <AssemblyMetadataAttribute>().First(m => m.Key == "GitHash");

            Strings.Insert(0, "Generated by VaultBoy by heyitsleo");
            Strings.Insert(1, $"{metadataAttribute.Value} | {DateTime.Now:s}");

            foreach (string s in Strings)
            {
                vault.SaveContext.StringOffsets[s] = bw.BaseStream.Position;
                NullTerminatedString.Write(bw, s);
            }

            bw.AlignWriter(0x10);
        }
コード例 #30
0
        public override void Write(Vault vault, BinaryWriter bw)
        {
            //bw.Write(_exports.Count);
            if (vault.Database.Options.Type == DatabaseType.X64Database)
            {
                bw.Write((ulong)_exports.Count);
            }
            else
            {
                bw.Write(_exports.Count);
            }

            foreach (var exportEntry in _exports)
            {
                exportEntry.Write(vault, bw);
            }

            bw.AlignWriter(0x10);
        }