Ejemplo n.º 1
0
        internal override void saveCompact(aBinaryWriter writer)
        {
            base.saveCompact(writer);

            writer.Write16((ushort)mContentRect.left);
            writer.Write16((ushort)mContentRect.top);
            writer.Write16((ushort)mContentRect.width);
            writer.Write16((ushort)mContentRect.height);

            for (int i = 0; i < 4; ++i)
            {
                bloResource.save(mTextures[i].texture, writer);
            }
            bloResource.save(mPalette, writer);

            byte bits = 0;

            for (int i = 0; i < 4; ++i)
            {
                bits <<= 2;
                bits  |= (byte)mTextures[i].mirror;
            }
            writer.Write8(bits);

            for (int i = 0; i < 4; ++i)
            {
                writer.Write32(mTextures[i].color.rgba);
            }

            writer.WritePadding(4, 0);
        }
Ejemplo n.º 2
0
        static void saveCompact(bloPane pane, aBinaryWriter writer)
        {
            var typeID = cPaneID;

            if (pane is bloTextbox)
            {
                typeID = cTextboxID;
            }
            else if (pane is bloWindow)
            {
                typeID = cWindowID;
            }
            else if (pane is bloPicture)
            {
                typeID = cPictureID;
            }

            writer.Write16(typeID);
            pane.saveCompact(writer);

            if (pane.getChildPane() > 0)
            {
                writer.Write16(cBeginID);
                foreach (var childpane in pane)
                {
                    saveCompact(childpane, writer);
                }
                writer.Write16(cEndID);
            }
        }
Ejemplo n.º 3
0
        void PerformWavToStream(Stream instream, Stream outstream)
        {
            var mixer    = new MicrosoftWaveMixer(instream);
            var writer   = new aBinaryWriter(outstream, Endianness.Big);
            var dataSize = 0;

            switch (mStreamFormat)
            {
            case StreamFormat.Pcm: dataSize = (mixer.SampleCount * 4); break;

            case StreamFormat.Adpcm: dataSize = (mareep.RoundUp16B(mixer.SampleCount) / 16 * 18); break;
            }

            writer.WriteS32(dataSize);
            writer.WriteS32(mixer.SampleCount);
            writer.Write16((ushort)mixer.SampleRate);
            writer.Write16((ushort)mStreamFormat);
            writer.Write16(0);                                   // unused
            writer.Write16((ushort)mStreamFrameRate);
            writer.WriteS32(mStreamLoop ? 1 : 0);                // loop flag
            writer.WriteS32(mStreamLoop ? mStreamLoopStart : 0); // loop start
            writer.WritePadding(32, 0);

            switch (mStreamFormat)
            {
            case StreamFormat.Pcm: EncodeStreamPcm(mixer, writer); break;

            case StreamFormat.Adpcm: EncodeStreamAdpcm(mixer, writer); break;
            }

            writer.WritePadding(32, 0);
        }
Ejemplo n.º 4
0
        void ExtractWav(Wave wave, byte[] data, Stream stream)
        {
            var writer     = new aBinaryWriter(stream, Endianness.Little);
            var mixer      = new RawWaveMixer(new MemoryStream(data), wave.Format);
            var dataSize   = (wave.SampleCount * 2);
            var sampleRate = (int)wave.SampleRate;
            var numLoops   = wave.Loop ? 1 : 0;

            writer.WriteString("RIFF");
            writer.WriteS32(36 + dataSize + ((wave.Loop || wave.RootKey != 60) ? (36 + (numLoops * 24)) : 0));
            writer.WriteString("WAVE");
            writer.WriteString("fmt ");
            writer.WriteS32(16);
            writer.WriteS16(1);              // format
            writer.Write16(1);               // channel count
            writer.WriteS32(sampleRate);
            writer.WriteS32(sampleRate * 2); // byte rate
            writer.Write16(2);               // block align
            writer.Write16(16);              // bit depth
            if (wave.Loop || wave.RootKey != 60)
            {
                writer.WriteString("smpl");
                writer.WriteS32(36 + (numLoops * 24));
                writer.WriteS32(0);                       // manufacturer
                writer.WriteS32(0);                       // product
                writer.WriteS32(1000000000 / sampleRate); // sample period
                writer.WriteS32(wave.RootKey);            // unity note
                writer.WriteS32(0);                       // pitch fraction
                writer.WriteS32(0);                       // SMPTE format
                writer.WriteS32(0);                       // SMPTE offset
                writer.WriteS32(numLoops);
                writer.WriteS32(0);                       // sampler data
                if (wave.Loop)
                {
                    writer.WriteS32(0);                     // cue point ID
                    writer.WriteS32(0);                     // type
                    writer.WriteS32(wave.LoopStart);
                    writer.WriteS32(wave.LoopEnd - 1);
                    writer.WriteS32(0);                     // fraction
                    writer.WriteS32(0);                     // play count
                }
            }
            writer.WriteString("data");
            writer.WriteS32(dataSize);
            mixer.Write(WaveFormat.Pcm16, writer);
        }
Ejemplo n.º 5
0
        public void saveCompact(Stream stream)
        {
            aBinaryWriter writer = new aBinaryWriter(stream, Endianness.Big, Encoding.GetEncoding(1252));

            foreach (var childpane in this)
            {
                saveCompact(childpane, writer);
            }

            writer.Write16(cExitID);
        }
Ejemplo n.º 6
0
        internal override void saveCompact(aBinaryWriter writer)
        {
            base.saveCompact(writer);

            bloResource.save(mFont, writer);
            writer.Write32(mTopColor.rgba);
            writer.Write32(mBottomColor.rgba);

            byte binding = 0;

            if (mFont != null)
            {
                binding  |= 1;
                binding <<= 2;
            }
            binding  |= (byte)mHBinding;
            binding <<= 2;
            binding  |= (byte)mVBinding;
            writer.Write8(binding);

            if (mFont != null)
            {
                writer.WriteS16((short)mFontSpacing);
                writer.WriteS16((short)mFontLeading);
                writer.Write16((ushort)mFontWidth);
                writer.Write16((ushort)mFontHeight);
            }

            if (mFont != null)
            {
                var strbuffer = mFont.decodeToBytes(mText);
                writer.Write16((ushort)strbuffer.Length);
                writer.Write8s(strbuffer);
            }
            else
            {
                writer.Write16(0);
            }

            writer.WritePadding(4, 0);
        }
Ejemplo n.º 7
0
        void PerformRawToWav(Stream instream, Stream outstream)
        {
            var mixer    = new RawWaveMixer(instream, mRawInputFormat);
            var writer   = new aBinaryWriter(outstream, Endianness.Little);
            var dataSize = (mixer.SampleCount * 2);

            writer.WriteString("RIFF");
            writer.WriteS32(36 + dataSize);
            writer.WriteString("WAVE");
            writer.WriteString("fmt ");
            writer.WriteS32(16);
            writer.WriteS16(1);                  // format
            writer.Write16(1);                   // channel count
            writer.WriteS32(mRawSampleRate);
            writer.WriteS32(mRawSampleRate * 2); // byte rate
            writer.Write16(2);                   // block align
            writer.Write16(16);                  // bit depth
            writer.WriteString("data");
            writer.WriteS32(dataSize);
            mixer.Write(WaveFormat.Pcm16, writer);
        }
Ejemplo n.º 8
0
        void ExtractWav(Wave wave, byte[] data, Stream stream)
        {
            var writer     = new aBinaryWriter(stream, Endianness.Little);
            var mixer      = new RawWaveMixer(new MemoryStream(data), wave.Format);
            var dataSize   = (wave.SampleCount * 2);
            var sampleRate = (int)wave.SampleRate;

            writer.WriteString("RIFF");
            writer.WriteS32(36 + dataSize);
            writer.WriteString("WAVE");
            writer.WriteString("fmt ");
            writer.WriteS32(16);
            writer.WriteS16(1);              // format
            writer.Write16(1);               // channel count
            writer.WriteS32(sampleRate);
            writer.WriteS32(sampleRate * 2); // byte rate
            writer.Write16(2);               // block align
            writer.Write16(16);              // bit depth
            writer.WriteString("data");
            writer.WriteS32(dataSize);
            mixer.Write(WaveFormat.Pcm16, writer);
        }
Ejemplo n.º 9
0
        void PerformStreamToWav(Stream instream, Stream outstream)
        {
            var reader = new aBinaryReader(instream, Endianness.Big);
            var writer = new aBinaryWriter(outstream, Endianness.Little);

            var streamDataSize = reader.ReadS32();
            var sampleCount    = reader.ReadS32();
            var sampleRate     = reader.Read16();
            var dataSize       = (sampleCount * 4);
            var format         = (StreamFormat)reader.Read16();

            writer.WriteString("RIFF");
            writer.WriteS32(36 + dataSize);
            writer.WriteString("WAVE");
            writer.WriteString("fmt ");
            writer.WriteS32(16);
            writer.WriteS16(1);              // format
            writer.Write16(2);               // channel count
            writer.WriteS32(sampleRate);
            writer.WriteS32(sampleRate * 4); // byte rate
            writer.Write16(4);               // block align
            writer.Write16(16);              // bit depth
            writer.WriteString("data");
            writer.WriteS32(dataSize);

            reader.Goto(32);

            switch (format)
            {
            case StreamFormat.Pcm: DecodeStreamPcm(reader, writer, sampleCount); break;

            case StreamFormat.Adpcm: DecodeStreamAdpcm(reader, writer, sampleCount); break;

            default: mareep.WriteError("AFC: Unknown format '{0}' in header.", (int)format); break;
            }
        }
Ejemplo n.º 10
0
        internal override void saveBlo1(aBinaryWriter writer)
        {
            base.saveBlo1(writer);

            byte numparams;

            if (mToColor.rgba != bloColor.cOne)
            {
                numparams = 17;
            }
            else if (mFromColor.rgba != bloColor.cZero)
            {
                numparams = 16;
            }
            else if (mContentTexture != null)
            {
                numparams = 15;
            }
            else
            {
                numparams = 14;
            }

            writer.Write8(numparams);
            writer.Write16((ushort)mContentRect.left);
            writer.Write16((ushort)mContentRect.top);
            writer.Write16((ushort)mContentRect.width);
            writer.Write16((ushort)mContentRect.height);

            for (int i = 0; i < 4; ++i)
            {
                bloResource.save(mTextures[i].texture, writer);
            }
            bloResource.save(mPalette, writer);

            byte bits = 0;

            for (int i = 0; i < 4; ++i)
            {
                bits <<= 2;
                bits  |= (byte)mTextures[i].mirror;
            }
            writer.Write8(bits);

            for (int i = 0; i < 4; ++i)
            {
                writer.Write32(mTextures[i].color.rgba);
            }

            numparams -= 14;

            if (numparams > 0)
            {
                bloResource.save(mContentTexture, writer);
                --numparams;
            }

            if (numparams > 0)
            {
                writer.Write32(mFromColor.rgba);
                --numparams;
            }

            if (numparams > 0)
            {
                writer.Write32(mToColor.rgba);
                --numparams;
            }

            writer.WritePadding(4, 0);
        }
Ejemplo n.º 11
0
        internal override void saveBlo1(aBinaryWriter writer)
        {
            base.saveBlo1(writer);

            byte numparams;

            if (mToColor.rgba != bloColor.cOne)
            {
                numparams = 13;
            }
            else if (mFromColor.rgba != bloColor.cZero)
            {
                numparams = 12;
            }
            else if (mConnectParent)
            {
                numparams = 11;
            }
            else
            {
                numparams = 10;
            }

            writer.Write8(numparams);

            bloResource.save(mFont, writer);
            writer.Write32(mTopColor.rgba);
            writer.Write32(mBottomColor.rgba);

            byte binding = 0;

            binding  |= (byte)mHBinding;
            binding <<= 2;
            binding  |= (byte)mVBinding;
            writer.Write8(binding);

            writer.WriteS16((short)mFontSpacing);
            writer.WriteS16((short)mFontLeading);
            writer.Write16((ushort)mFontWidth);
            writer.Write16((ushort)mFontHeight);

            if (mFont != null)
            {
                var strbuffer = mFont.decodeToBytes(mText);
                writer.Write16((ushort)strbuffer.Length);
                writer.Write8s(strbuffer);
            }
            else
            {
                writer.Write16(0);
            }

            numparams -= 10;

            if (numparams > 0)
            {
                writer.Write8((byte)(mConnectParent ? 1 : 0));
                --numparams;
            }

            if (numparams > 0)
            {
                writer.Write32(mFromColor.rgba);
                --numparams;
            }

            if (numparams > 0)
            {
                writer.Write32(mToColor.rgba);
                --numparams;
            }

            writer.WritePadding(4, 0);
        }
Ejemplo n.º 12
0
 public override void Write(aBinaryWriter writer, string value)
 {
     aError.Check<ArgumentException>(value.Length <= UInt16.MaxValue, "String value is too long for a WSTR.", "value");
     writer.Write16((ushort)value.Length);
     writer.WriteString(value);
 }
Ejemplo n.º 13
0
        public void save(aBinaryWriter writer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            // calculate entry shit
            var entryOffset = calculateEntryOffset(FieldCount);
            var entrySize   = calculateEntrySize(mFields);

            // write header
            writer.WriteS32(EntryCount);
            writer.WriteS32(FieldCount);
            writer.Write32(entryOffset);
            writer.WriteS32(entrySize);
            // write field LUT
            foreach (var field in mFields)
            {
                writer.Write32(field.hash);
                writer.Write32(field.bitmask);
                writer.Write16(field.start);
                writer.Write8(field.shift);
                writer.Write8((byte)field.type);
            }
            // since the stream is write-only, we must write packed integer fields to an intermediate, R/W buffer
            var buffer = new Dictionary <ushort, uint>(FieldCount);

            for (var entry = 0; entry < EntryCount; ++entry)
            {
                buffer.Clear();
                for (var field = 0; field < FieldCount; ++field)
                {
                    writer.Goto(entryOffset + (entrySize * entry) + mFields[field].start);
                    switch (mFields[field].type)
                    {
                    case jmpValueType.INTEGER: {
                        if (mFields[field].bitmask == 0xFFFFFFFFu)
                        {
                            // field is unpacked; write directly to stream
                            writer.WriteS32(mEntries[entry, field]);
                        }
                        else
                        {
                            // field is packed; write to intermediate buffer
                            if (!buffer.ContainsKey(mFields[field].start))
                            {
                                buffer[mFields[field].start] = 0u;                                         // if there's no key yet, create one
                            }
                            buffer[mFields[field].start] |= ((uint)mEntries[entry, field] << mFields[field].shift) & mFields[field].bitmask;
                        }
                        break;
                    }

                    case jmpValueType.FLOAT: {
                        writer.WriteF32(mEntries[entry, field]);
                        break;
                    }

                    case jmpValueType.STRING: {
                        writer.WriteString <aCSTR>(mEntries[entry, field], 0x20);
                        break;
                    }
                    }
                }
                // flush intermediate buffer
                foreach (var point in buffer)
                {
                    writer.Goto(entryOffset + (entrySize * entry) + point.Key);
                    writer.Write32(point.Value);
                }
            }
        }
Ejemplo n.º 14
0
        internal virtual void saveBlo1(aBinaryWriter writer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }

            byte numparams;

            if (!mInheritAlpha)
            {
                numparams = 10;
            }
            else if (mAlpha < 255)
            {
                numparams = 9;
            }
            else if (mAnchor != bloAnchor.TopLeft)
            {
                numparams = 8;
            }
            else if (mAngle != 0.0d)
            {
                numparams = 7;
            }
            else
            {
                numparams = 6;
            }

            writer.Write8(numparams);
            writer.Write8((byte)(mVisible ? 1 : 0));
            writer.Step(2);
            writer.Write32(mName);
            writer.WriteS16((short)mRect.left);
            writer.WriteS16((short)mRect.top);
            writer.WriteS16((short)mRect.width);
            writer.WriteS16((short)mRect.height);

            numparams -= 6;

            if (numparams > 0)
            {
                writer.Write16((ushort)mAngle);
                --numparams;
            }

            if (numparams > 0)
            {
                writer.Write8((byte)mAnchor);
                --numparams;
            }

            if (numparams > 0)
            {
                writer.Write8(mAlpha);
                --numparams;
            }

            if (numparams > 0)
            {
                writer.Write8((byte)(mInheritAlpha ? 1 : 0));
                --numparams;
            }

            writer.WritePadding(4, 0);
        }