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); }
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); }
//フォントで描画した場合の幅と高さを求める. 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)); }