Пример #1
0
        public UInt16[] charData(int c, int chgt, int cspc, ref int width)
        {
            width = widths[c] + 1 - cspc;
            int idx = c * chgt * 4;

            UInt16[] res = new UInt16[chgt * 2];
            for (int i = 0; i < res.Length; i++)
            {
                if (csdata.Length <= idx)
                {
                    res[i] = 0;
                }
                else
                {
                    res[i] = ByteHelper.READ_UINT16_BE(csdata, idx);
                }
                idx += 2;
            }
            return(res);
        }
Пример #2
0
        public BScripts(uint fnum)
            : base(fnum, ResView.ScriptView.get())
        {
            uint sz = ByteHelper.READ_UINT16_LE(getData());
            //scrofs.Add();
            int pos = 2;

            while (pos <= sz * 2)//scrofs[0]*2)
            {
                scrofs.Add(ByteHelper.READ_UINT16_LE(getData(), pos));
                pos += 2;
            }
            int lsz = (getData().Length - pos) / 2;

            scrdata = new UInt16[lsz];
            for (int i = 0; i < lsz; i++)
            {
                scrdata[i] = ByteHelper.READ_UINT16_LE(getData(), pos);
                pos       += 2;
            }
        }
Пример #3
0
            public void write(BinaryWriter wr, int version)
            {
                wr.Write(id);
                byte[] bts = new byte[3];
                uint   ofs = offset;

                if (ofs > 0x7FFFFF)
                {
                    if (version == 331)
                    {
                        ofs = 0x800000 | ofs >> 3;
                    }
                    else
                    {
                        ofs = 0x800000 | ofs >> 4;
                    }
                }
                ByteHelper.WRITE24_LE(ofs, bts);
                wr.Write(bts);
                ByteHelper.WRITE24_LE(size, bts);
                bts[2] |= flags;
                wr.Write(bts);
            }
Пример #4
0
        public override bool import(string filename)
        {
            XmlDocument   doc     = new XmlDocument();
            uint          bitbuf  = 0;
            int           bitpos  = 0;
            List <byte>   txtdata = new List <byte>();
            List <UInt16> bs      = new List <UInt16>();
            List <UInt16> skp     = new List <UInt16>();

            bs.Add(0);
            for (int i = 0; i < 32; i++)
            {
                skp.Add(0);
            }
            doc.Load(filename);
            if (doc.DocumentElement.Name != "bassru-text" && doc.DocumentElement.Name != "bassru-text-all")
            {
                throw new ApplicationException("Bad BassRu Text XML - bad root node name");
            }
            XmlNode blockroot = doc.DocumentElement;

            if (doc.DocumentElement.Name == "bassru-text-all")
            {
                blockroot = findFile(doc.DocumentElement, (int)filenum);
            }
            for (int i = 0; i < blockCount; i++)
            {
                XmlNode n  = findBlock(blockroot, i);
                int     bc = 32;
                if (i == blockCount - 1)
                {
                    bc = lastblksz;
                }
                for (int N = 0; N < bc; N++)
                {
                    XmlNode t = findText(n, N);
                    string  cmt = "", md = "";
                    if (t.Attributes["comment"] != null)
                    {
                        cmt = t.Attributes["comment"].Value;
                    }
                    if (t.Attributes["mode"] != null)
                    {
                        md = t.Attributes["mode"].Value;
                    }
                    if (cmt != "" || md != "")
                    {
                        string cm   = "";
                        bool   isru = Config.get().isTextRu(filenum, i, N, ref cm);
                        if (cm != cmt || (isru && md == "en") || (!isru && md == "ru"))
                        {
                            if (md == "ru")
                            {
                                isru = true;
                            }
                            if (md == "en")
                            {
                                isru = false;
                            }
                            Config.get().setTextInfo(filenum, (uint)i, (uint)N, isru, cmt);
                        }
                    }
                    string val = "";
                    foreach (XmlNode x in t.ChildNodes)
                    {
                        if (x.NodeType == XmlNodeType.Text)
                        {
                            val = x.Value;
                        }
                    }
                    val = fromRuConv(val);
                    appendText(ref bs, ref skp, ref txtdata, ref bitbuf, ref bitpos, i, N, val);
                }
            }
            if (bitpos > 0)
            {
                addBits(ref txtdata, ref bitbuf, ref bitpos, 0, 8 - bitpos);
            }
            byte[] res = new byte[4 + txtdata.Count + (bs.Count * 2) + skp.Count];
            ushort ofs = 4;

            for (int i = 0; i < blockCount - 1; i++)
            {
                ByteHelper.WRITE_LE(bs[i], res, ofs);
                ofs += 2;
            }
            ByteHelper.WRITE_LE(ofs, res);
            for (int j = 0; j < 32 * blockCount - 32 + lastblksz; j++)
            {
                UInt16 r = skp[j];
                if (r > 0x7F)
                {
                    r >>= 3;
                    r  |= 0x80;
                }
                res[ofs] = (byte)r;
                ofs++;
            }
            ByteHelper.WRITE_LE(ofs, res, 2);
            Array.Copy(txtdata.ToArray(), 0, res, ofs, txtdata.Count);
            return(SkyDisk.get().importFile((int)filenum, res));
        }
Пример #5
0
        public override bool import(string filename)
        {
            byte[] xdata = new byte[csdata.Length + 128];
            for (int i = 0; i < xdata.Length; i++)
            {
                xdata[i] = 0;
            }
            for (int i = 0; i < 128; i++)
            {
                xdata[i] = (byte)widths[i];
            }
            Bitmap bmp = new Bitmap(filename);
            Bitmap b2  = makeBitmap(true, Color.Black, Color.White, Color.Red);

            if (bmp.Width != b2.Width || bmp.Height != b2.Height)
            {
                throw new ApplicationException("Bad charset bitmap size");
            }
            for (int i = 0; i < 16; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    int       idx = i * 8 + j;
                    Rectangle rct = new Rectangle(j * 32, i * height, 32, height);
                    byte      wdh = 0;
                    for (int k = 0; k < height; k++)
                    {
                        UInt16 data = 0;
                        UInt16 mask = 0;
                        for (int m = 0; m < 16; m++)
                        {
                            Color dc = bmp.GetPixel(rct.X + m, rct.Y + k);
                            Color mc = bmp.GetPixel(rct.X + 16 + m, rct.Y + k);
                            if (dc.ToArgb() != Color.White.ToArgb())
                            {
                                if (wdh < m + 1)
                                {
                                    wdh = (byte)(m + 1);
                                }
                            }
                            data <<= 1;
                            mask <<= 1;
                            if (dc.ToArgb() != Color.White.ToArgb())
                            {
                                data |= 1;
                            }
                            if (mc.ToArgb() != Color.White.ToArgb())
                            {
                                mask |= 1;
                            }
                        }
                        if (data != 0 || mask != 0)
                        {
                            ByteHelper.WRITE_BE(data, xdata, 128 + idx * height * 4 + (k * 4));
                            ByteHelper.WRITE_BE(mask, xdata, 130 + idx * height * 4 + (k * 4));
                        }
                    }
                    if (wdh != 0)
                    {
                        xdata[idx] = wdh;
                    }
                }
            }
            return(SkyDisk.get().importFile((int)filenum, xdata));
        }