Beispiel #1
0
        public override void Import(params DataStream[] strIn)
        {
            // TODO: Encoding and Endianess should be specified by a parameter
            DataWriter dw = new DataWriter(this.data, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis"));
            XDocument xmlDoc = XDocument.Load(strIn[0].BaseStream);

            foreach (XElement xmlBlock in xmlDoc.Root.Elements()) {
                if (!xmlBlock.Name.LocalName.StartsWith("Block"))
                    continue;

                foreach (XElement xmlText in xmlBlock.Elements("Text")) {
                    uint   offset = Convert.ToUInt32(xmlText.Attribute("Offset").Value, 16);
                    int    size   = Convert.ToInt32(xmlText.Attribute("Size").Value, 10);
                    string text   = xmlText.Value.FromXmlString('<', '>').ApplyTable("replace", true);

                    // Write string
                    try {
                        this.data.Seek(offset, SeekMode.Origin);
                        dw.Write(text, size);
                    } catch {
                        // Do nothing, don't copy the new string
                    }
                }
            }
        }
Beispiel #2
0
        public override void Write(DataStream strOut)
        {
            DataWriter writer = new DataWriter(strOut);
            writer.Write(this.type);

            foreach (Block b in this.blocks)
                b.Write(strOut);
        }
Beispiel #3
0
        public override void Write(DataStream strOut)
        {
            DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis"));

            writer.Write((ushort)this.entries.Length);
            foreach (Entry e in this.entries) {
                writer.Write(e.Id);
                writer.Write(e.Text, typeof(ushort), "replace", true);
            }
        }
Beispiel #4
0
        public override void Write(DataStream strOut)
        {
            DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis"));

            writer.Write((ushort)this.text.Length);
            for (int i = 0; i < this.text.Length; i++) {
                string text = this.text[i].Replace("\n", "\\n");
                text = text.ApplyTable("replace", true);
                writer.Write(text, 0x80);
            }
        }
Beispiel #5
0
        public override void Write(DataStream strOut)
        {
            DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis"));

            writer.Write((ushort)this.entries.Length);
            foreach (Entry e in this.entries) {
                writer.Write(e.Unknown1);
                writer.Write(e.Unknown2);
                writer.Write(e.Text.ApplyTable("replace", true), 0x30);
            }
        }
		public void Run(DataStream strOut)
		{
			var writer = new DataWriter(strOut);

			// For each block of samples
			foreach (var sample in Samples) {
				// Mix channels
				for (int i = 0; i < sample.GetLength(0); i++)
					for (int c = 0; c < sample.GetLength(1); c++)
						writer.Write(sample[i, c]);
			}
		}
Beispiel #7
0
        public override void Write(DataStream strOut)
        {
            DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis"));

            writer.Write((ushort)this.blocks.Length);
            foreach (Block b in this.blocks) {
                writer.Write(this.GetBlockSize(b));
                writer.Write(b.Id);

                foreach (string t in b.Elements)
                    writer.Write(t, typeof(ushort), "replace", true);

                writer.Write((byte)0x00);
            }
        }
Beispiel #8
0
        public override void Write(DataStream strOut)
        {
            Encoding encoding = Encoding.GetEncoding("shift_jis");
            DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, encoding);

            writer.Write((uint)this.entries.Length);
            foreach (Entry e in this.entries) {
                string text = e.Text.ApplyTable("replace", true);
                byte[] data = encoding.GetBytes(text);

                writer.Write(e.Index);
                writer.Write((uint)data.Length);
                writer.Write(data);
            }
        }
Beispiel #9
0
        public override void Write(DataStream strOut)
        {
            DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis"));

            int numSubBlocks = 0;
            foreach (Entry e in this.entries)
                numSubBlocks += e.Dungeons.Length;

            writer.Write((ushort)this.entries.Length);
            writer.Write((ushort)numSubBlocks);

            foreach (Entry e in this.entries) {
                writer.Write(e.Title.ApplyTable("replace", true), 0x40);
                writer.Write((ushort)e.Dungeons.Length);

                foreach (Dungeon d in e.Dungeons) {
                    writer.Write(d.Text.ApplyTable("replace", true), 0x40);
                    writer.Write(d.ScriptName.ApplyTable("replace", true), 0x08);
                }
            }
        }
Beispiel #10
0
        /// <summary>
        /// Write the header of a NDS game ROM.
        /// </summary>
        /// <param name="str">Stream to write the header.</param>
        public override void Write(DataStream str)
        {
            DataWriter dw = new DataWriter(str);

            dw.Write(this.gameTitle);			// At 0x00
            dw.Write(this.gameCode);
            dw.Write(this.makerCode);			// At 0x10
            dw.Write(this.unitCode);
            dw.Write(this.encryptionSeed);
            dw.Write((byte)(Math.Log(this.cartridgeSize, 2) - MinCartridge));
            dw.Write(this.reserved);
            dw.Write(this.RomVersion);
            dw.Write(this.internalFlags);
            dw.Write(this.arm9Offset);			// At 0x20
            dw.Write(this.arm9EntryAddress);
            dw.Write(this.arm9RamAddress);
            dw.Write(this.arm9Size);
            dw.Write(this.arm7Offset);			// At 0x30
            dw.Write(this.arm7EntryAddress);
            dw.Write(this.arm7RamAddress);
            dw.Write(this.arm7Size);
            dw.Write(this.fntOffset);			// At 0x40
            dw.Write(this.fntSize);
            dw.Write(this.fatOffset);
            dw.Write(this.fatSize);
            dw.Write(this.ov9TableOffset);		// At 0x50
            dw.Write(this.ov9TableSize);
            dw.Write(this.ov7TableOffset);
            dw.Write(this.ov7TableSize);
            dw.Write(this.flagsRead);
            dw.Write(this.flagsInit);
            dw.Write(this.bannerOffset);
            dw.Write(this.secureCRC16);
            dw.Write(this.romTimeout);
            dw.Write(this.arm9Autoload);
            dw.Write(this.arm7Autoload);
            dw.Write(this.secureDisable);
            dw.Write(this.romSize);
            dw.Write(this.headerSize);
            dw.Write(this.reserved2);
            dw.Write(this.nintendoLogo);
            dw.Write(this.logoCRC16);
            dw.Write(this.headerCRC16);
            dw.Write(this.debugRomOffset);
            dw.Write(this.debugSize);
            dw.Write(this.debugRamAddress);
            dw.Write(this.reserved3);

            dw.Write(this.unknown);
        }
Beispiel #11
0
        public override void Write(DataStream strOut)
        {
            Encoding encoding = Encoding.GetEncoding("shift_jis");
            DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, encoding);
            writer.Write(this.id);

            foreach (string s in this.startBlocks) {
                byte[] data = encoding.GetBytes(s.ApplyTable("replace", true));
                writer.Write((ushort)data.Length);
                writer.Write(data);
            }

            writer.Write(this.unknown);

            writer.Write((byte)this.endBlocks.Length);
            foreach (string s in this.endBlocks) {
                byte[] data = encoding.GetBytes(s.ApplyTable("replace", true));
                writer.Write((ushort)data.Length);
                writer.Write(data);
            }

            writer.Write((byte)this.unknown2.Length);
            foreach (byte[] unk in this.unknown2) {
                writer.Write((byte)(unk.Length - 4));
                writer.Write(unk);
            }
        }
Beispiel #12
0
        public override void Write(DataStream strOut)
        {
            StringBuilder text = new StringBuilder();

            foreach (SubtitleEntry entry in this.entries) {
                switch (entry.Type) {
                case SubtitleType.Text:
                    text.Append(entry.Data.ApplyTable("replace", true));
                    break;

                case SubtitleType.SyncTime:
                    text.AppendFormat("/sync {0}", entry.Data);
                    break;

                case SubtitleType.Voice:
                    text.AppendFormat("/stream {0}", entry.Data);
                    break;

                case SubtitleType.Comment:
                    text.AppendFormat("#{0}", entry.Data.ApplyTable("replace", true));
                    break;

                case SubtitleType.Clear:
                    text.Append("/clear");
                    break;
                }

                text.Append(ExtraSplit);
                text.Append(Split);
            }

            DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis"));
            writer.Write(text.ToString());
        }
Beispiel #13
0
        /// <summary>
        /// Write a <see cref="Fnt" /> section in a stream.
        /// </summary>
        /// <param name="str">Stream to write to.</param>
        public override void Write(DataStream str)
        {
            DataWriter dw = new DataWriter(str);
            long baseOffset = str.RelativePosition;

            // Write main tables
            foreach (Fnt.FntTable table in this.tables) {
                dw.Write(table.Offset);
                dw.Write(table.IdFirstFile);
                dw.Write(table.IdParentFolder);
            }

            // Write subtables
            foreach (Fnt.FntTable table in this.tables)
                table.Write(str, baseOffset);
        }
Beispiel #14
0
        /// <summary>
        /// Write the banner to a stream.
        /// </summary>
        /// <param name="str">Stream to write to.</param>
        public override void Write(DataStream str)
        {
            DataWriter dw = new DataWriter(str, EndiannessMode.LittleEndian, Encoding.Unicode);

            dw.Write(this.version);
            dw.Write(this.crc16);
            dw.Write(this.crc16v2);
            dw.Write(this.reserved);
            dw.Write(this.tileData);
            dw.Write(this.palette);
            dw.Write(this.japaneseTitle, 0x100);
            dw.Write(this.englishTitle,  0x100);
            dw.Write(this.frenchTitle,   0x100);
            dw.Write(this.germanTitle,   0x100);
            dw.Write(this.italianTitle,  0x100);
            dw.Write(this.spanishTitle,  0x100);

            str.WritePadding(FileSystem.PaddingByte, FileSystem.PaddingAddress);
        }
Beispiel #15
0
            public override void Write(DataStream stream)
            {
                base.Write(stream);
                Encoding encoding = Encoding.GetEncoding("shift_jis");
                DataWriter writer = new DataWriter(
                                        stream,
                                        EndiannessMode.LittleEndian,
                                        encoding);

                writer.Write((byte)(this.Size - 5));
                writer.Write((byte)this.SubEntries.Length);
                foreach (SubEntry sub in this.SubEntries) {
                    writer.Write(sub.ScriptName, typeof(byte));
                    writer.Write(sub.Unknown);
                }
            }
Beispiel #16
0
 public override void Write(DataStream stream)
 {
     base.Write(stream);
     Encoding encoding = Encoding.GetEncoding("shift_jis");
     DataWriter writer = new DataWriter(
                             stream,
                             EndiannessMode.LittleEndian,
                             encoding);
     byte[] data = encoding.GetBytes(this.Text);
     writer.Write((byte)data.Length);
     writer.Write(data);
     writer.Write(this.Unknown);
 }
Beispiel #17
0
            public override void Write(DataStream stream)
            {
                base.Write(stream);
                Encoding encoding = Encoding.GetEncoding("shift_jis");
                DataWriter writer = new DataWriter(
                                        stream,
                                        EndiannessMode.LittleEndian,
                                        encoding);

                string text = SetFurigana(this.Text);
                byte[] data = encoding.GetBytes(text.ApplyTable("replace", true));
                writer.Write((byte)data.Length);
                writer.Write(data);
            }
Beispiel #18
0
 public virtual void Write(DataStream stream)
 {
     DataWriter writer = new DataWriter(stream);
     writer.Write(this.Id);
 }
Beispiel #19
0
            public void Write(DataStream stream)
            {
                DataWriter writer = new DataWriter(stream);
                writer.Write(this.GetSize());

                foreach (Entry e in this.Entries)
                    e.Write(stream);

                writer.Write(0xFFFFFFFF);
            }
Beispiel #20
0
            public void Write(DataStream str, long baseOffset)
            {
                DataWriter bw = new DataWriter(str);

                // Go to offset if we can. Maybe we are writing in a position
                // that it doesn't exist still (it will write written later)
                // so in this case we fill it with zeros
                long tableOffset = baseOffset + this.Offset;
                if (tableOffset > str.Length)
                    str.WriteTimes(0, tableOffset - str.Length);

                // And finally seek there
                str.Seek(baseOffset + this.Offset, SeekMode.Origin);

                byte nodeType;

                // Write file info
                foreach (ElementInfo info in this.Files) {
                    nodeType = (byte)DefaultEncoding.GetByteCount(info.Name); // Name length
                    bw.Write(nodeType);
                    bw.Write(DefaultEncoding.GetBytes(info.Name));
                }

                // Write folder info
                foreach (ElementInfo info in this.Folders) {
                    nodeType = (byte)(0x80 | DefaultEncoding.GetByteCount(info.Name));
                    bw.Write(nodeType);
                    bw.Write(DefaultEncoding.GetBytes(info.Name));
                    bw.Write(info.Id);
                }

                bw.Write((byte)0x00);   // End of info
                bw = null;
            }
		void WriteChunk(short[,] samples, int channel, DataStream strOut)
		{
			var writer = new DataWriter(strOut);

			byte scale;
			byte coefIdx;
			byte[] values = SearchBestParameters(samples, channel, out scale, out coefIdx);

			uint currentWord = 0;
			for (int i = 0; i < Format.SamplesPerChunk; i++) {
				if (i != 0 && i % 8 == 0) {
					currentWord ^= 0x80808080;
					writer.Write(currentWord);
					currentWord = 0;
				}

				byte val = (i >= values.Length) ? (byte)0 : (byte)(values[i] & 0xF);
				currentWord |= (uint)(val << (i * 4));
			}

			// Set the header
			byte header = (byte)((coefIdx << 4) | scale);
			currentWord |= (uint)(header << 24);

			// Write the last word
			currentWord ^= 0x80808080;
			writer.Write(currentWord);
		}
Beispiel #22
0
        public override void Write(DataStream strOut)
        {
            var data   = new DataStream(new System.IO.MemoryStream(), 0, 0);
            var writer = new DataWriter(data, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis"));

            if (hasNumBlock)
                writer.Write((ushort)blocks.Length);

            foreach (Block b in blocks) {
                if (fileName == "MagicParam")
                    writer.Write(b.Text.ApplyTable("replace", true), textSize + 8, nullTermina);
                else
                    writer.Write(b.Text.ApplyTable("replace", true), textSize, nullTermina);
                writer.Write(b.Data);

                // Hack for imagen name: new long name field
                if (longTxtSize > 0) {
                    writer.Write(b.LongText ?? b.Text, longTxtSize, "replace", true);
                }
            }

            if (isEncoded) {
                data.Seek(0, SeekMode.Origin);
                Codec(data, strOut);	// Encode data to strOut
            } else {
                data.WriteTo(strOut);
            }
        }
Beispiel #23
0
        /// <summary>
        /// Write the Fat to a stream.
        /// </summary>
        /// <param name="str">Stream to write to.</param>
        public override void Write(DataStream str)
        {
            DataWriter dw = new DataWriter(str);
            uint offset = (uint)str.Position + this.Size + this.firstOffset;
            offset = offset.Pad(FileSystem.PaddingAddress);

            foreach (GameFile file in this.files) {
                OverlayFile overlay = file as OverlayFile;

                if (overlay == null) {
                    dw.Write(offset);       // Start offset
                    offset += (uint)file.Length;
                    dw.Write(offset);       // End offset
                } else {
                    dw.Write(overlay.WriteAddress);
                    dw.Write((uint)(overlay.WriteAddress + overlay.Length));
                }

                offset = offset.Pad(FileSystem.PaddingAddress);	// Pad offset
            }
        }
Beispiel #24
0
        /// <summary>
        /// Write the table info of this overlay.
        /// </summary>
        /// <param name="str">Stream to write to.</param>
        public void WriteTable(DataStream str)
        {
            DataWriter dw = new DataWriter(str);

            this.EncodedSize = (uint)this.Length;
            uint encodingInfo = this.EncodedSize;
            encodingInfo |= (uint)((this.IsEncoded ? 1 : 0) << 24);
            encodingInfo |= (uint)((this.IsSigned  ? 2 : 0) << 24);

            dw.Write(this.OverlayId);
            dw.Write(this.RamAddress);
            dw.Write(this.RamSize);
            dw.Write(this.BssSize);
            dw.Write(this.StaticInitStart);
            dw.Write(this.StaticInitEnd);
            dw.Write((uint)(ushort)this.Tags["Id"]);
            dw.Write(encodingInfo);
        }