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); }
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; } }
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); }
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)); }
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)); }