コード例 #1
0
        public static void drawText(Graphics g, int x, int y, string text, Font font, FontInfo info, StringFormat fmt, bool allwhite)
        {
            //g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            if (info.outline == 1 || info.outline == 3)
            {
                g.TranslateTransform(-1.0f, -1.0f);
                g.DrawString(text, font, allwhite ? Brushes.White : Brushes.Black, x, y, fmt);
                g.TranslateTransform(1.0f, 1.0f);
                g.TranslateTransform(0.0f, -1.0f);
                g.DrawString(text, font, allwhite ? Brushes.White : Brushes.Black, x, y, fmt);
                g.TranslateTransform(0.0f, 1.0f);
                g.TranslateTransform(-1.0f, 0.0f);
                g.DrawString(text, font, allwhite ? Brushes.White : Brushes.Black, x, y, fmt);
                g.TranslateTransform(1.0f, 0.0f);
            }
            if (info.outline == 2 || info.outline == 3)
            {
                g.TranslateTransform(1.0f, 1.0f);
                g.DrawString(text, font, allwhite ? Brushes.White : Brushes.Black, x, y, fmt);
                g.TranslateTransform(-1.0f, -1.0f);
                g.TranslateTransform(0.0f, 1.0f);
                g.DrawString(text, font, allwhite ? Brushes.White : Brushes.Black, x, y, fmt);
                g.TranslateTransform(0.0f, -1.0f);
                g.TranslateTransform(1.0f, 0.0f);
                g.DrawString(text, font, allwhite ? Brushes.White : Brushes.Black, x, y, fmt);
                g.TranslateTransform(-1.0f, 0.0f);
            }
            if (info.shadow != 0)
            {
                g.TranslateTransform(3.0f, 3.0f);
                SolidBrush b = new SolidBrush(Color.FromArgb((int)(info.shadow * 0.25 * 255), allwhite ? Color.White : Color.Black));
                g.DrawString(text, font, b, x, y, fmt);
                g.TranslateTransform(-3.0f, -3.0f);
            }

            Brush brush = null;
            if (info.fill == 0 || allwhite)
                brush = Brushes.White;
            else if (info.fill == 1)
                brush = new LinearGradientBrush(new Point(x, y), new Point(x, y + font.Height), Color.White, Color.Gray);
            else if (info.fill == 2)
                brush = new LinearGradientBrush(new Point(x, y), new Point(x, y + font.Height), Color.Gray, Color.White);
            else if (info.fill == 3)
                brush = new HatchBrush(HatchStyle.NarrowHorizontal, Color.LightGray, Color.White);
            g.DrawString(text, font, brush, x, y, fmt);
        }
コード例 #2
0
        protected bool readSettings(Stream strm, out int ver_major, out int ver_minor)
        {
            StreamReader rdr = new StreamReader(strm, Encoding.GetEncoding(1252));
            string str = rdr.ReadLine();
            ver_major = Int32.Parse(str.Substring(0, 1));
            ver_minor = Int32.Parse(str.Substring(2, 1));
            mVerMajor = ver_major;
            mVerMinor = ver_minor;
            if (str.Substring(4) != "Point&Click Project File. DO NOT MODIFY!!")
                return false;
            str = rdr.ReadLine();

            PlatformID pid = Environment.OSVersion.Platform;
            bool onUnix = (int)pid == 4 || (int)pid == 128;

            if (ver_major > 1)
                mAdv.Settings.Directory = rdr.ReadLine();
            else
                mAdv.Settings.Directory = "";

            str = rdr.ReadLine();
            if (str == "Resolution X : 640")
            {
                mAdv.Settings.Resolution = new Vec2i(640, 480);
            }
            else if (str == "Resolution X : 800")
            {
                mAdv.Settings.Resolution = new Vec2i(800, 600);
            }
            else if (str == "Resolution X : 320")
            {
                mAdv.Settings.Resolution = new Vec2i(320, 240);
            }
            else
            {
                throw new UnexpectedValueException("Resolution is invalid");
            }
            string font = rdr.ReadLine();
            while (font.Substring(0, 11) != "GameFont : ")
            {
                string[] fontparts = font.Split(';');
                FontInfo info = new FontInfo();
                info.name = fontparts[0];
                info.bold = Convert.ToInt32(fontparts[1]) == -1;
                info.italic = Convert.ToInt32(fontparts[2]) == -1;
                info.size = Convert.ToInt32(fontparts[3]);
                info.outline = Convert.ToInt32(fontparts[4]);
                if (ver_major > 1)
                    info.charset = Convert.ToInt32(fontparts[5]);
                else
                    info.charset = 0;
                if (ver_major > 2 || (ver_major == 2 && ver_minor > 0))
                {
                    info.shadow = Convert.ToInt32(fontparts[6]);
                    info.fill = Convert.ToInt32(fontparts[7]);
                    info.fading = Convert.ToInt32(fontparts[8]);
                }
                else
                {
                    info.shadow = 0;
                    info.fill = 0;
                    info.fading = 0;
                }
                if (ver_major > 3 || (ver_major == 3 && ver_minor >= 5))
                    info.spacing = Convert.ToInt32(fontparts[9]);
                else
                    info.spacing = 0;
                mAdv.Settings.Fonts.Add(info);
                font = rdr.ReadLine();
            }
            str = rdr.ReadLine();
            str = rdr.ReadLine();
            str = rdr.ReadLine();
            str = rdr.ReadLine();
            str = rdr.ReadLine();
            str = rdr.ReadLine();
            if (ver_major > 1)
            {
                mAdv.Settings.GameIcon = str.Substring(11);
                str = rdr.ReadLine();
                if (ver_major > 3 || (ver_major == 3 && ver_minor >= 5))
                {
                    string[] data = str.Split(';');
                    mAdv.Settings.LoadingImage = data[0];
                    mAdv.Settings.SettingsPicture = data[1];
                }
                else
                    mAdv.Settings.LoadingImage = str;
                str = rdr.ReadLine();
                mAdv.Settings.TsUseBgImage = str == "-1";
                mAdv.Settings.TsBackground = rdr.ReadLine();
            }
            else
            {
                mAdv.Settings.GameIcon = "";
                mAdv.Settings.LoadingImage = "";
                mAdv.Settings.TsUseBgImage = false;
                mAdv.Settings.TsBackground = "";
            }
            str = rdr.ReadLine();
            if (str.Substring(0, 14) != "Startskript : ")
            {
                throw new UnexpectedValueException("expected Startskript : ");
            }
            mAdv.Settings.Startscript = str.Substring(14);
            mAdv.Settings.Mainscript = rdr.ReadLine();
            mAdv.Settings.AnywhereRoom = rdr.ReadLine();
            str = rdr.ReadLine();
            mAdv.Settings.ScreenChange = (ScreenChange)Convert.ToInt32(str.Substring(15));
            str = rdr.ReadLine().Substring(9);
            mAdv.Settings.TextOnOff = str[0] == '1';
            mAdv.Settings.DrawDraggedItemIcons = str[1] == '1';
            mAdv.Settings.ActionText = str[2] == '1';
            mAdv.Settings.ShowTaskbar = str[3] == '1';
            if (ver_major > 2 || (ver_major == 2 && ver_minor > 0))
            {
                mAdv.Settings.NotAntialiased = str[4] == '1';
                mAdv.Settings.TaskbarFromTop = str[5] == '1';
            }
            else
            {
                mAdv.Settings.NotAntialiased = false;
                mAdv.Settings.TaskbarFromTop = false;
            }
            if (ver_major >= 3)
            {
                mAdv.Settings.GroupItems = str[6] == '1';
                mAdv.Settings.ProtectGameFile = str[7] == '1';
            }
            else{
                mAdv.Settings.GroupItems = false;
                mAdv.Settings.ProtectGameFile = false;
            }
            if (ver_major > 3 || (ver_major == 3 && ver_minor >= 5))
            {
                mAdv.Settings.Is16to9 = str[8] == '1';
            }
            else
            {
                mAdv.Settings.Is16to9 = false;
            }
            if (ver_major > 2 || (ver_major == 2 && ver_minor > 0))
            {
                str = rdr.ReadLine();
                mAdv.Settings.ActionTextHeight = Convert.ToInt32(str);
            }
            else
            {
                mAdv.Settings.ActionTextHeight = 0;
            }
            str = rdr.ReadLine();
            mAdv.Settings.CustomMenu = str == "-1";
            mAdv.Settings.CustomMenuRoom = rdr.ReadLine();
            str = rdr.ReadLine();
            mAdv.Settings.TaskHeight = Convert.ToInt32(str.Substring(13));
            str = rdr.ReadLine();
            mAdv.Settings.TaskRoom = str.Substring(11);
            str = rdr.ReadLine();
            mAdv.Settings.TaskPopup = Convert.ToInt32(str.Substring(12));
            str = rdr.ReadLine();
            string addBools = str.Substring(8, 2);
            mAdv.Settings.SilentDelete = addBools[0] == '1';
            mAdv.Settings.InfoLine = addBools[1] == '1';
            if (ver_major > 1)
            {
                string taskshow = str.Substring(11, 4);
                if (taskshow == "hide")
                    mAdv.Settings.TaskHideCompletely = true;
                else
                    mAdv.Settings.TaskHideCompletely = false;
                mAdv.Settings.RightClick = Convert.ToInt32(str.Substring(16));
            }
            else{
                mAdv.Settings.TaskHideCompletely = false;
                mAdv.Settings.RightClick = 0;
            }
            if (ver_major > 2 || (ver_major == 2 && ver_minor > 0))
            {
                str = rdr.ReadLine();
                mAdv.Settings.UseMouseWheel = (str == "-1");
                str = rdr.ReadLine();
                mAdv.Settings.MenuFading = Convert.ToInt32(str);
                str = rdr.ReadLine();
                mAdv.Settings.TextSceneFading = Convert.ToInt32(str);
                str = rdr.ReadLine();
                mAdv.Settings.AnywhereTransparency = Convert.ToInt32(str);
            }
            else
            {
                mAdv.Settings.UseMouseWheel = false;
                mAdv.Settings.MenuFading = 0;
                mAdv.Settings.TextSceneFading = 0;
                mAdv.Settings.AnywhereTransparency = 0;
            }
            str = rdr.ReadLine();
            mAdv.Settings.TargaColor = Convert.ToUInt32(str.Substring(13));
            str = rdr.ReadLine();
            mAdv.Settings.BorderColor = Convert.ToUInt32(str.Substring(14));
            str = rdr.ReadLine();
            mAdv.Settings.BackgroundColor = Convert.ToUInt32(str.Substring(18));
            str = rdr.ReadLine();
            mAdv.Settings.TextColor = Convert.ToUInt32(str.Substring(12));
            str = rdr.ReadLine().Substring(15);
            string[] colors = str.Split(';');
            mAdv.Settings.OffspeechColor = Convert.ToUInt32(colors[0]);
            if (ver_major > 1)
                mAdv.Settings.InfotextColor = Convert.ToUInt32(colors[1]);
            else
                mAdv.Settings.InfotextColor = 16777215;
            str = rdr.ReadLine();
            mAdv.Settings.TsStyle = Convert.ToInt32(str) - 1;
            str = rdr.ReadLine();
            mAdv.Settings.TsBorderStyle = Convert.ToInt32(str) - 1;
            str = rdr.ReadLine();
            mAdv.Settings.TsBorderColor = Convert.ToUInt32(str);
            str = rdr.ReadLine();
            mAdv.Settings.TsAreaColor = Convert.ToUInt32(str);
            str = rdr.ReadLine();
            mAdv.Settings.TsSelectionColor = Convert.ToUInt32(str);
            str = rdr.ReadLine();
            mAdv.Settings.TsTextColor = Convert.ToUInt32(str);
            if (ver_major >= 3 || (ver_major >= 2 && ver_minor >= 7))
            {
                str = rdr.ReadLine();
                mAdv.Settings.TsUseSymbols = str == "-1";
                str = rdr.ReadLine();
                mAdv.Settings.MuteMusicWhenSpeech = str == "-1";
                str = rdr.ReadLine();
                mAdv.Settings.CoinActivated = str == "-1";
                str = rdr.ReadLine();
                mAdv.Settings.CoinAutoPopup = str == "-1";
                mAdv.Settings.CoinRoom = rdr.ReadLine();
                str = rdr.ReadLine();
                mAdv.Settings.CoinFading = Convert.ToInt32(str);
                str = rdr.ReadLine();
                mAdv.Settings.CoinCenter.y = Convert.ToInt32(str);
                str = rdr.ReadLine();
                mAdv.Settings.CoinCenter.x = Convert.ToInt32(str);
            }
            if (ver_major > 3 || (ver_major == 3 && ver_minor >= 5))
            {
                //dsp effects
                for (int i = 0; i < 25; ++i)
                {
                    str = rdr.ReadLine();
                    string [] header = str.Split(';');
                    DSPEffect effect = new DSPEffect();
                    effect.name = header[2];
                    int etype = Convert.ToInt32(header[3]);
                    effect.type = (DSPEffect.Type)etype;
                    for (int line = 0; line < 6; ++line)
                    {
                        str = rdr.ReadLine();
                        string[] vals = str.Split(';');
                        for (int num = 0; num < 6; ++num)
                        {
                            effect.param[line, num] = Convert.ToInt32(vals[num]);
                        }
                    }
                    if (etype > 0)
                        mAdv.Settings.DSPEffects.Add(effect);
                }
            }
            str = rdr.ReadLine();
            mAdv.Settings.LinkText = str.Substring(11);
            str = rdr.ReadLine();
            mAdv.Settings.GiveLink = str.Substring(11);
            str = rdr.ReadLine();
            mAdv.Settings.WalkText = str.Substring(11);
            str = rdr.ReadLine();
            if (str == "Booleans :")
            {
                mAdv.Settings.Booleans = new Dictionary<string, bool>();
                str = rdr.ReadLine();
                while (str != "Commands :")
                {
                    string name;
                    string val = str.Substring(str.Length - 1);
                    if (val == "1")
                        name = str.Substring(0, str.Length - 2);
                    else
                        name = str.Substring(0, str.Length - 1);
                    mAdv.Settings.Booleans.Add(name, val == "1");
                    str = rdr.ReadLine();
                }
            }
            if (str == "Commands :")
            {
                mAdv.Settings.Commands = new Dictionary<string, string>();
                str = rdr.ReadLine();
                while (str != "Mediapool :")
                {
                    string pretty_name = rdr.ReadLine();
                    mAdv.Settings.Commands.Add(str, pretty_name);
                    str = rdr.ReadLine();
                }
            }
            str = rdr.ReadLine();
            TreeNode root = new TreeNode("Mediapool");
            TreeNode node = root;
            mMediaPool.Nodes.Add(node);
            while (str != "Gamepool :")
            {
                node = insertTreeElement(mMediaPool.Nodes, str, node, node.Level-1);
                str = rdr.ReadLine();
            }
            TreeNode[] arr = new TreeNode[root.Nodes.Count];
            root.Nodes.CopyTo(arr, 0);
            mMediaPool.Nodes.Clear();
            mMediaPool.Nodes.AddRange(arr);

            str = rdr.ReadLine();
            root = new TreeNode("Gamepool");
            node = root;
            mGamePool.Nodes.Add(node);
            while (str != "Images :")
            {
                node = insertTreeElement(mGamePool.Nodes, str, node, node.Level - 1);
                str = rdr.ReadLine();
            }
            arr = new TreeNode[root.Nodes.Count];
            root.Nodes.CopyTo(arr, 0);
            mGamePool.Nodes.Clear();
            mGamePool.Nodes.AddRange(arr);

            if (str == "Images :")
            {
                str = rdr.ReadLine();
                while (str != "Sounds :")
                {
                    string filename = rdr.ReadLine();
                    if (onUnix){
                        filename = filename.Replace("\\", "/");
                        if (filename[1] == ':')
                            filename = filename.Remove(0, 2);
                    }
                    mAdv.Images.Add(str.ToLower(), filename);
                    str = rdr.ReadLine();
                }
            }

            if (str == "Sounds :")
            {
                str = rdr.ReadLine();
                while (str != "Music :")
                {
                    string filename = rdr.ReadLine();
                    mAdv.Sounds.Add(str.ToLower(), filename);
                    str = rdr.ReadLine();
                }
            }

            if (str == "Music :")
            {
                str = rdr.ReadLine();
                while (str != "Movie :")
                {
                    string filename = rdr.ReadLine();
                    mAdv.Music.Add(str.ToLower(), filename);
                    str = rdr.ReadLine();
                }
            }

            if (str == "Movie :")
            {
                str = rdr.ReadLine();
                while (!rdr.EndOfStream)
                {
                    string filename = rdr.ReadLine();
                    mAdv.Videos.Add(str.ToLower(), filename);
                    str = rdr.ReadLine();
                }
            }
            return true;
        }
コード例 #3
0
 public static void drawText(Graphics g, int x, int y, string text, Font font)
 {
     FontInfo info = new FontInfo();
     info.fill = 0;
     info.outline = 3;
     info.shadow = 0;
     StringFormat fmt = new StringFormat();
     drawText(g, x, y, text, font, info, fmt, false);
 }
コード例 #4
0
        public int[] createBitmapFont(int idx, out Bitmap[] images, out Bitmap[] alphaimages, out Vec2i dims, out Vec2i numchars)
        {
            //font setup
            mCurrInfo = (FontInfo)mData.Settings.Fonts[idx - 1];
            mCurrFont = new Font(mCurrInfo.name, mCurrInfo.size);
            if (mCurrInfo.bold)
                mCurrFont = new Font(mCurrFont, FontStyle.Bold);
            if (mCurrInfo.italic)
                mCurrFont = new Font(mCurrFont, FontStyle.Italic);
            int outlinethickness = 0;
            int shadowthickness = 0;
            if (mCurrInfo.outline == 1 || mCurrInfo.outline == 2)
                outlinethickness = 1;
            else if (mCurrInfo.outline == 3)
                outlinethickness = 2;
            if (mCurrInfo.shadow != 0)
                shadowthickness = 3;

            //character dimension measuring
            Bitmap bmp = new Bitmap(256, 256);
            Graphics g = Graphics.FromImage(bmp);
            g.SmoothingMode = SmoothingMode.AntiAlias;
            g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
            int maxwidth = 0, maxheight = 0;
            int[] charwidths = new int[224];
            StringFormat fmt = new StringFormat();
            fmt.FormatFlags = StringFormatFlags.NoClip;
            CharacterRange[] range = new CharacterRange[1];
            range[0] = new CharacterRange(0,1);
            fmt.SetMeasurableCharacterRanges(range);
            Encoding enc = Encoding.GetEncoding(1252);
            byte [] b = new byte[1];
            for (int i = 0; i < 224; ++i)
            {
                b[0] = (byte)(i + 0x20);
                char[] chs = enc.GetChars(b);
                char ch = chs[0];
                Region[] reg = g.MeasureCharacterRanges(new string(ch, 1), mCurrFont, new RectangleF(0,0,256,256), fmt);
                RectangleF rect = reg[0].GetBounds(g);
                int width = (int)rect.Width;///*Math.Ceiling(*/ f.Width;//);
                if (width == 0)
                {
                    SizeF f = g.MeasureString(new string(ch, 1), mCurrFont);
                    width = (int)f.Width;
                }
                charwidths[i] = width+outlinethickness+mCurrInfo.spacing;
                maxwidth = Math.Max(maxwidth, (int)(rect.Width+rect.X));
                int height = (int)(rect.Height + rect.Y);
                if (height > 256)
                    continue;
                maxheight = Math.Max(maxheight, height);
            }
            if (maxheight == 0)
                maxheight = maxwidth;//a crappy workaround to compensate for crappy fonts
            int charwidth = maxwidth+outlinethickness+shadowthickness;
            int charheight = maxheight+2+outlinethickness+shadowthickness;
            int charsperrow = 256 / charwidth;
            int numrows = 256 / charheight;
            int numtextures = (int)Math.Ceiling(224.0 / (charsperrow * numrows));

            //allocate bitmaps
            images = new Bitmap[numtextures];
            alphaimages = new Bitmap[numtextures];
            int currtexture = -1;
            Graphics g2 = null;

            //render bitmap font
            for (int i = 0; i < 224; ++i)
            {
                b[0] = (byte)(i + 0x20);
                char[] chs = enc.GetChars(b);
                char ch = chs[0];
                int texture = i / (numrows * charsperrow);
                if (texture != currtexture)
                {
                    images[texture] = new Bitmap(256, 256, PixelFormat.Format16bppRgb565);
                    g.Dispose();
                    g = Graphics.FromImage(images[texture]);
                    g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
                    g.SmoothingMode = SmoothingMode.AntiAlias;
                    g.Clear(Color.Black);
                    alphaimages[texture] = new Bitmap(256, 256, PixelFormat.Format16bppRgb565);
                    if (g2 != null)
                        g2.Dispose();
                    g2 = Graphics.FromImage(alphaimages[texture]);
                    g2.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
                    g2.SmoothingMode = SmoothingMode.AntiAlias;
                    g2.Clear(Color.Black);
                    currtexture = texture;
                }
                int row = i / charsperrow - texture*numrows;
                int column = i % charsperrow;
                drawText(g, column * charwidth, row * charheight, new string(ch, 1), fmt);
                drawText(g2, column * charwidth, row * charheight, new string(ch, 1), fmt, true);
            }
            g.Dispose();
            g2.Dispose();
            dims = new Vec2i(charwidth, charheight);
            numchars = new Vec2i(charsperrow, numrows);
            return charwidths;
        }
コード例 #5
0
 private void setListName(int idx, FontInfo info)
 {
     if (idx < 0)
         return;
     fontlist.Items[idx] = (idx+1)+" - "+info.name + " ("+info.size+")";
 }
コード例 #6
0
 void fontlist_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (fontlist.SelectedIndex == -1)
         return;
     FontInfo info = (FontInfo)mFonts[fontlist.SelectedIndex];
     mCurrInfo = info;
     mCurrFont = new Font(info.name, info.size);
     if (info.bold)
         mCurrFont = new Font(mCurrFont, FontStyle.Bold);
     if (info.italic)
         mCurrFont = new Font(mCurrFont, FontStyle.Italic);
     font.SelectedItem = info.name;
     charset.SelectedIndex = info.charset;
     bold.Checked = info.bold;
     italic.Checked = info.italic;
     fontsize.SelectedItem = Convert.ToString(info.size);
     letterspacing.SelectedItem = Convert.ToString(info.spacing);
     switch (info.outline)
     {
         case 0:
             ol_none.Checked = true;
             break;
         case 1:
             ol_shadow_a.Checked = true;
             break;
         case 2:
             ol_shadow_b.Checked = true;
             break;
         case 3:
             ol_shadow_ab.Checked = true;
             break;
     }
     switch (info.shadow)
     {
         case 0:
             sh_none.Checked = true;
             break;
         case 1:
             sh_25.Checked = true;
             break;
         case 2:
             sh_50.Checked = true;
             break;
         case 3:
             sh_75.Checked = true;
             break;
     }
     switch (info.fill)
     {
         case 0:
             fill_normal.Checked = true;
             break;
         case 1:
             fill_falloff_1.Checked = true;
             break;
         case 2:
             fill_falloff_2.Checked = true;
             break;
         case 3:
             fill_scanlines.Checked = true;
             break;
     }
     fading.Value = info.fading;
     preview.Invalidate();
 }
コード例 #7
0
 private void button1_Click(object sender, EventArgs e)
 {
     FontInfo info = new FontInfo();
     info.name = "Arial";
     info.size = 12;
     mFonts.Add(info);
     fontlist.Items.Add(info.name);
     fontlist.SelectedIndex = fontlist.Items.Count - 1;
 }