Ich habe da mal als erstes eine neue Klasse erstellt "C64.asc". Darein dann folgendes:
[ags]void Talk(this Character*, String message) {
this.StopMoving(); // just to be sure
while(message.Length > 0) {
int Cmpt = 0;
String Empty = " ";
while (Cmpt < message.Length)
{
Empty = Empty.AppendChar(' ');
Cmpt++;
}
String message1 = "", message2 = "";
while(message.Length > 0 && !message.StartsWith("\n") && GetTextWidth(message1.Append(message.Substring(0, 1)), lblSpeech1.Font) < lblSpeech1.Width) {
message1 = message1.Append(message.Substring(0, 1));
message = message.Substring(1, message.Length - 1);
}
if(message.StartsWith("\n")) {
message = message.Substring(1, message.Length - 1);
}
lblSpeech1.TextColor = this.SpeechColor;
lblSpeech1.Text = message1;
while(message.Length > 0 && !message.StartsWith("\n") && GetTextWidth(message2.Append(message.Substring(0, 1)), lblSpeech1.Font) < lblSpeech2.Width) {
message2 = message2.Append(message.Substring(0, 1));
message = message.Substring(1, message.Length - 1);
}
if(message.StartsWith("\n")) {
message = message.Substring(1, message.Length - 1);
}
lblSpeech2.TextColor = this.SpeechColor;
lblSpeech2.Text = message2;
this.Say(Empty);
lblSpeech1.Text = "";
lblSpeech2.Text = "";
}
}[/ags]
Dann noch in die C64.ash:
[ags]import void Talk(this Character*, String message);[/ags]
Im GUI Border dann folgende Controls angelegt:
lblSpeech1, Font: 3, Height: 9, Width: 320, Left: 0, Top: -2
lblSpeech2, Font: 3, Height: 9, Width: 320, Left: 0, Top: 6
und zu guter letzt im Raumskript:
[ags]player.Talk("Meine Arbeit für Jugend forscht.\nEs hört einfach nicht auf, sich zu drehen.");[/ags]
Sieht dann so aus:
Diese Version bricht dann natürlich nur nach manuellen Zeilenumbrüchen ("\n") und ansonsten auch mitten im Wort um, mit ein bisschen mehr Aufwand ließe sich das ganze dann noch auf Umbrüche nach einzelnen Worten umrüsten.
Ich frage mich nur wie man das dann am besten in Dialogen macht. An sich sollten in Dialogskripten dann ja die selben Befehle genügen, nur weiß ich nicht ob man das generell nicht noch eleganter lösen könnte.