Ejemplo n.º 1
0
        public static string GetName(uint id, bool with_hint_full = false)
        {
            string hint = with_hint_full ? MakeHint_Full(id) :MakeHint_Simple(id);

            if (!Program.ROM.RomInfo.is_multibyte())
            {
                string name = MapTerrainNameEngForm.GetName(id);
                name = TextForm.StripAllCode(name);
                return(name + hint);
            }

            InputFormRef InputFormRef = Init(null);
            uint         addr         = InputFormRef.IDToAddr(id);

            if (!U.isSafetyOffset(addr))
            {
                return("");
            }
            uint c_addr = Program.ROM.p32(addr);

            if (!U.isSafetyOffset(c_addr))
            {
                return("");
            }
            return(Program.ROM.getString(c_addr) + hint);
        }
Ejemplo n.º 2
0
        public static bool OptionTextToSpeech(string text, bool isEmulatorMode = false)
        {
            TextToSpeechForm f = (TextToSpeechForm)InputFormRef.JumpFormLow <TextToSpeechForm>();

            text = TextForm.StripAllCode(TextForm.ConvertEscapeTextRev(text));
            f.SetDefString(text);
            f.SetEmulatorMode(isEmulatorMode);
            f.ShowDialog();

            return(g_VoiceSpeeach != null);
        }
        void UpdateCount(int startPoint, int endPoint)
        {
            //英訳すると、@0003の数がかわってしまうことがあるため、
            //まず、@0010の相対位置で引っ掛けて、
            //その中から@0003を探索します.
            int first0010     = this.CurrentText.IndexOf("@0010");
            int first00800004 = this.CurrentText.IndexOf("@0080@0004");

            int    snipPoint;
            string r;

            if (first0010 <= 0 && first00800004 > 0)
            {//ワールドマップイベントとしてパースしてみる
                this.CountOf0010 = 0;
                r = PickupLineSub2(this.CurrentText, startPoint, "@0080@0004", out this.CountOf00800004, out snipPoint);
            }
            else
            {//会話イベント
                this.CountOf00800004 = 0;
                r = PickupLineSub2(this.CurrentText, startPoint, "@0010", out this.CountOf0010, out snipPoint);
            }

            int newStartPoint = startPoint - snipPoint;

            if (newStartPoint < 0)
            {
                newStartPoint = 0;
            }
            r = PickupLineSub2(r, newStartPoint, "@0003", out this.CountOf0003, out snipPoint);
            Log.Debug("Subtile", startPoint.ToString(), this.CountOf0010.ToString(), this.CountOf0003.ToString());

            if (startPoint == endPoint)
            {//既にネストさせているので、これ以上は無理.
                return;
            }

            if (first0010 < 0 && first00800004 < 0)
            {//@0010 と @0080@0004が一つもない
                return;
            }

            //なぜかたくさん@0010があると、先頭の0がヒットしてしまうことがある.
            //そうなると会話冒頭のメッセージが表示できないので、抜け道を作る
            r = TextForm.StripAllCode(r);
            if (r != "")
            {
                return;
            }
            //終端をベースに、もう一回取り直す.
            UpdateCount(endPoint - 1, endPoint - 1);
        }
Ejemplo n.º 4
0
        //フォントで描画した場合の幅と高さを求める.
        public static Size MeasureTextMultiLine(string str, bool IsItemFont)
        {
            uint maxwidth = 0;

            str = TextForm.StripAllCode(str);
            string[] lines = str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < lines.Length; i++)
            {
                string line = lines[i];

                uint width = MeasureTextWidthOneLine(line, IsItemFont);
                if (width > maxwidth)
                {
                    maxwidth = width;
                }
            }
            return(new Size((int)maxwidth, 16 * lines.Length));
        }
        public static string GetName(uint id)
        {
            if (!Program.ROM.RomInfo.is_multibyte)
            {
                string name = MapTerrainNameEngForm.GetName(id);
                name = TextForm.StripAllCode(name);
                return(name);
            }

            InputFormRef InputFormRef = Init(null);
            uint         addr         = InputFormRef.IDToAddr(id);

            if (!U.isSafetyOffset(addr))
            {
                return("");
            }
            uint c_addr = Program.ROM.p32(addr);

            if (!U.isSafetyOffset(c_addr))
            {
                return("");
            }
            return(Program.ROM.getString(c_addr));
        }