Exemplo n.º 1
0
            public override void Write(EndianBinaryWriterEx ew)
            {
                EndianBinaryWriterEx tempWritter = new EndianBinaryWriterEx(new MemoryStream(), Endianness.LittleEndian); // I don't know how else I can do this without a hardcoded size...

                tempWritter.Write(new ushort());                                                                          // offsetPlayer
                tempWritter.Write(new ushort());                                                                          // offsetCPU
                tempWritter.Write(new byte());                                                                            // Mode
                tempWritter.Write(new byte());                                                                            // SpawnItemBoxes
                tempWritter.WritePadding(4);

                UInt16 baseOffset = (UInt16)tempWritter.BaseStream.Position;
                EndianBinaryWriterEx sectionWritter = new EndianBinaryWriterEx(new MemoryStream(), Endianness.LittleEndian);

                if (Mode == ItemMode.Custom)
                {
                    UInt16 offsetPlayer = baseOffset, offsetCPU = baseOffset;

                    offsetPlayer += (UInt16)sectionWritter.BaseStream.Position;
                    PlayerConfig.Write(sectionWritter);

                    offsetCPU += (UInt16)sectionWritter.BaseStream.Position;
                    CPUConfig.Write(sectionWritter);

                    ew.Write(offsetPlayer);                  // offsetPlayer
                    ew.Write(offsetCPU);                     // offsetCPU
                    ew.Write((byte)Mode);
                    ew.Write((byte)(SpawnItemBoxes ? 1 : 0));
                    ew.WritePadding(4);
                    ew.Write((sectionWritter.BaseStream as MemoryStream).ToArray(), 0, (int)sectionWritter.BaseStream.Length);
                }
                else
                {
                    ew.Write((ushort)0xFFFF);                     // offsetPlayer
                    ew.Write((ushort)0xFFFF);                     // offsetCPU
                    ew.Write((byte)Mode);
                    ew.Write((byte)(SpawnItemBoxes ? 1 : 0));
                    ew.WritePadding(4);
                }

                ew.WritePadding(4);

                return;
            }