Example #1
0
        public void import(XmlDocument doc)
        {
            XmlNode blk = null;

            if (doc.DocumentElement.Name == "lure-strings")
            {
                blk = LureCommon.findNode(doc.DocumentElement, "block");
            }
            else if (doc.DocumentElement.Name == "lure-texts")
            {
                blk = LureCommon.findNode(LureCommon.findNode(doc.DocumentElement, "file", "id", resnum.ToString()), "block");
            }
            else
            {
                throw new Exception("bad strings xml");
            }
            ushort count  = BinaryHelper.readU16_LE(data, 0);
            int    curofs = 2;

            for (int i = 0; i < count; i++)
            {
                XmlNode nd  = LureCommon.findNode(blk, "text", "id", i.ToString());
                string  val = "";
                if (nd.ChildNodes.Count > 0)
                {
                    val = LureConfig.get().convert(nd.ChildNodes[0].Value);
                }
                data = LureCommon.checkArrLength(data, curofs + val.Length + 1);
                BinaryHelper.writeZString(data, ref curofs, val);
            }
            LureDisks.setResource(resnum, data);
        }
Example #2
0
 public void import(Bitmap bmp)
 {
     if (bmp.Width != 61 * 8 || bmp.Height != 16)
     {
         throw new Exception("bad font bmp");
     }
     for (int i = 0; i < 122; i++)
     {
         for (int j = 0; j < 8; j++)
         {
             byte ln   = 0;
             int  xofs = i * 8 - (i < 61?0:61 * 8);
             for (int k = 0; k < 8; k++)
             {
                 Color cl = bmp.GetPixel(xofs + k, j + (i < 61?0:8));
                 if (cl.ToArgb() == Color.Black.ToArgb())
                 {
                     ln |= (byte)(1 << (8 - 1 - k));
                 }
             }
             data[i * 8 + j] = ln;
         }
     }
     LureDisks.setResource(resnum, data);
 }
Example #3
0
        public void import(Bitmap bmp)
        {
            if (bmp.Width != width || bmp.Height != height)
            {
                throw new Exception(String.Format("Wrong bmp size {0}x{1} (need {2}x{3})", bmp.Width, bmp.Height, width, height));
            }
            ColorPalette pal = bmp.Palette;

            LureConfig.LurePalette xpal = LureConfig.get().getPalette(palette);
            for (int i = 0; i < 256; i++)
            {
                if (pal.Entries[i].ToArgb() != xpal.cols[i].ToArgb())
                {
                    throw new Exception("Palette differs");
                }
            }
            byte[]     res = new byte[width * height];
            BitmapData bd  = bmp.LockBits(new Rectangle(0, 0, width, height),
                                          ImageLockMode.ReadWrite, bmp.PixelFormat);

            for (int i = 0; i < height; i++)
            {
                System.Runtime.InteropServices.Marshal.Copy(new IntPtr(bd.Scan0.ToInt64() + i * bd.Stride), res, i * bd.Width, bd.Width);
            }
            bmp.UnlockBits(bd);
            byte[] nr = Compressor.compress(res);
            LureDisks.setResource(resnum, nr);
        }
Example #4
0
        public void import(Bitmap bmp)
        {
            if (bmp.Width != 320 || bmp.Height % 200 != 0)
            {
                throw new Exception(String.Format("Wrong bmp size {0}x{1} (need 320x200n)", bmp.Width, bmp.Height));
            }
            ColorPalette pal = bmp.Palette;

            LureConfig.LurePalette xpal = LureConfig.get().getPalette(palette);
            for (int i = 0; i < 256; i++)
            {
                if (pal.Entries[i].ToArgb() != xpal.cols[i].ToArgb())
                {
                    throw new Exception("Palette differs");
                }
            }
            byte[] data = new byte[320 * bmp.Height];

            BitmapData bd = bmp.LockBits(new Rectangle(0, 0, 320, bmp.Height),
                                         ImageLockMode.ReadWrite, bmp.PixelFormat);

            for (int i = 0; i < bmp.Height; i++)
            {
                System.Runtime.InteropServices.Marshal.Copy(new IntPtr(bd.Scan0.ToInt64() + i * bd.Stride), data, i * bd.Width, bd.Width);
            }
            bmp.UnlockBits(bd);

            int screens = bmp.Height / 200;

            byte[] dt2  = new byte[xlen];
            byte[] cmd  = new byte[0];
            int    rOfs = xlen;
            int    cOfs = 0;

            Array.Copy(data, dt2, xlen);

            for (int i = 1; i < screens; i++)
            {
                byte[] pix;
                byte[] code;
                compressScreen(data, i, out pix, out code);
                Array.Resize <byte>(ref dt2, dt2.Length + pix.Length);
                Array.Copy(pix, 0, dt2, rOfs, pix.Length);
                rOfs += pix.Length;
                Array.Resize <byte>(ref cmd, cmd.Length + code.Length);
                Array.Copy(code, 0, cmd, cOfs, code.Length);
                cOfs += code.Length;
            }
            data = null;

            byte[] nr = Compressor.compress(dt2);

            LureDisks.setResource(resnum, nr);
            LureDisks.setResource(resnum + 1, cmd);
        }
Example #5
0
        public void import(XmlDocument doc)
        {
            if (doc.DocumentElement.Name != "lure-decoder")
            {
                throw new Exception("bad decoder xml");
            }
            byte[] dec = new byte[1];
            int    pos = 0;

            foreach (XmlNode nd in doc.DocumentElement.ChildNodes)
            {
                impNode(nd, ref dec, ref pos);
            }
            dec      = LureCommon.checkArrLength(dec, pos + 1);
            dec[pos] = 0xff;
            pos++;
            LureDisks.setResource(LureConfig.get().decode_tbl, dec);
            //readDecoder();
        }
Example #6
0
        public void import(XmlDocument xml)
        {
            XmlNode blkhld = null;

            if (xml.DocumentElement.Name == "lure-text")
            {
                blkhld = xml.DocumentElement;
            }
            else if (xml.DocumentElement.Name == "lure-texts")
            {
                blkhld = LureCommon.findNode(xml.DocumentElement, "file", "id", resnum.ToString());
            }
            else
            {
                throw new Exception("Bad text xml");
            }
            TextDecoder.get().readDecoder(true);
            XmlDocument prev = export(true);

            TextDecoder.get().readDecoder(false);
            uint          bitbuf  = 0;
            int           bitpos  = 0;
            List <byte>   txtdata = new List <byte>();
            List <UInt16> bs      = new List <UInt16>();
            List <byte>   skp     = new List <byte>();
            int           prevblk = 0;

            foreach (XmlNode nd in prev.DocumentElement.ChildNodes)
            {
                XmlNode blk     = LureCommon.findNode(blkhld, "block", "id", nd.Attributes["id"].Value);
                int     prevtxt = prevblk;
                foreach (XmlNode tnd in nd.ChildNodes)
                {
                    //bool art = tnd.Attributes["art"].Value == "1";
                    XmlNode txt = LureCommon.findNode(blk, "text", "id", tnd.Attributes["id"].Value);
                    string  val = "";
                    if (txt.ChildNodes.Count > 0)
                    {
                        val = txt.ChildNodes[0].Value;
                    }
                    val = LureNames.get().processNames(LureConfig.get().convert(val));
                    addText(val, txtdata, ref bitbuf, ref bitpos, tnd.Attributes["art"].Value == "1");
                    if (bitpos % 2 == 1)
                    {
                        addbit(false, txtdata, ref bitbuf, ref bitpos);
                    }
                    // if (tnd != nd.LastChild)
                    {
                        int ofs = (txtdata.Count << 2) + bitpos / 2;
                        int d   = ofs - prevtxt;
                        if (d > 0x7F)
                        {
                            while ((d & 7) != 0)
                            {
                                addbit(false, txtdata, ref bitbuf, ref bitpos);
                                ofs = (txtdata.Count << 2) + bitpos / 2;
                                d   = ofs - prevtxt;
                            }
                            d = (d >> 3) | 0x80;
                        }
                        skp.Add((byte)d);
                        prevtxt = ofs;
                    }
                }
                if (nd != prev.DocumentElement.LastChild)
                {
                    int offset = (txtdata.Count << 2) + bitpos / 2;
                    bs.Add((UInt16)(offset - prevblk));
                    prevblk = offset;
                }
            }
            while (bitpos != 0)
            {
                addbit(false, txtdata, ref bitbuf, ref bitpos);
            }
            data = new byte[4 + bs.Count * 2 + skp.Count + txtdata.Count];
            int o = 4;

            for (int i = 0; i < bs.Count; i++)
            {
                BinaryHelper.write_LE(data, o, bs[i]);
                o += 2;
            }
            BinaryHelper.write_LE(data, 0, (UInt16)o);
            for (int i = 0; i < skp.Count; i++)
            {
                data[o++] = skp[i];
            }
            BinaryHelper.write_LE(data, 2, (UInt16)o);
            for (int i = 0; i < txtdata.Count; i++)
            {
                data[o++] = txtdata[i];
            }
            LureDisks.setResource(resnum, data);
        }