Autor Thema: Der C64-Technik-Hilfe-Thread  (Gelesen 16643 mal)

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1261
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Der C64-Technik-Hilfe-Thread
« am: 29. Februar 2012, 17:46:36 »
Hallo Leutz!

Entsprechend diesem Thread
http://www.maniac-mansion-mania.de/forum/index.php?topic=2077.0
benötige ich noch dringend technischen Beistand in Sachen Behebung folgender Probleme:


1.) Wie ändere ich das, dass der Speech immer mit Links-Oben(Top-Left)-Ausrichtung ausgegeben wird?

2.) Wie kann ich bei AGS 3.2.1 das Crossfade für Musik-Titel abschalten?


Danke schon mal im voraus.


BG
der Volltanker


"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1261
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Re: Der C64-Technik-Hilfe-Thread
« Antwort #1 am: 29. Februar 2012, 19:03:54 »
Zu 1. habe ich nun folgendes ausprobiert (wie es KhrisMuc in einem Thread mal vorgestellt hat):

Im GlobalScript.asc:
void SayTop(this Character*, String message) {
  int w = GetTextWidth(message, Game.SpeechFont) + 2;
  this.SayAt(1, 1, w, message);
}


Und im Roomscript habe ich nun folgendes:
if (MovePlayer (90, 130)) {
    FaceLocation (GetPlayerCharacter (), 90, 129);
    Wait (5);
    player.SayTop("Der funktioniert im Moment nicht.");
    player.SayTop("Ich habe Doors XP installiert.");
  }


Jetzt habe ich die Fehlermeldung:
Zitat
Failed to save room room1.crm; details below
room1.asc(195): Error (line 195): '.SayTop' is not a public member of 'Character'. Are you sure you spelt it correctly (remember, capital letters are important)?


Wer weiss Rat?



BG
der Volltanker

"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"

Endres

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1264
  • Geschlecht: Männlich
  • En|dres, der
    • ICQ Messenger - 230191486
    • MSN Messenger - enni_puschner@hotmail.de
    • Profil anzeigen
    • e7p.de
    • E-Mail
Re: Der C64-Technik-Hilfe-Thread
« Antwort #2 am: 29. Februar 2012, 19:24:57 »
Hast du die SayTop-Methode in der zugehörigen ash-Datei definiert? Muss man nämlich noch machen.


Domi:"irc hab ich mir viren geholt.. icq hab ich nimmer"

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1261
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Re: Der C64-Technik-Hilfe-Thread
« Antwort #3 am: 29. Februar 2012, 20:18:24 »
Muss ich da in der ash schreiben

import SayTop

?

Oder wie definiert man die?


BG
der Volltanker
"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: Der C64-Technik-Hilfe-Thread
« Antwort #4 am: 01. März 2012, 10:50:54 »
Kopier die erste Zeile, dann setz "import" davor:
[ags]import void SayTop(this Character*, String message);[/ags]

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1261
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Re: Der C64-Technik-Hilfe-Thread
« Antwort #5 am: 01. März 2012, 20:07:16 »
So. Hab jetzt alles erledigt.

Zufrieden bin ich mit dem Ergebnis allerdings nicht, denn in Aktion sieht es folgendermaßen aus:



Der Text wird hier weiterhin zentriert, anstatt das er linksbündig angezeigt wird. Außerden wird er auch nicht, wie man sieht, ganz nach oben an den Bildschirmkopf gesetzt.
Irgendetwas fehlt da noch, aber was?


Vielen Dank bisher und auch schon mal im voraus!


BG
der Volltanker
"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: Der C64-Technik-Hilfe-Thread
« Antwort #6 am: 04. März 2012, 13:57:43 »
Nachdem ja eh schon eine Extenderfunktion benutzt wird, kann man die ja beliebig umschreiben.
Ich würde nicht SayAt verwenden, sondern ein Label, das kannst Du schön passend positionieren und linksbündig kann man es auch einstellen (geht allerdings auch mit gesprochenen Sätzen per game.speech_text_align).

void SayTop(this Character*, String message) {
  int gameloops = ((message.Length / Game.TextReadingSpeed) + 1) * GetGameSpeed();
  lblSpeech.TextColor = this.SpeechColor;
  lblSpeech.Text = message;
  WaitMouseKey(gameloops);
  lblSpeech.Text = "";
}

Edit: Klammer eingefügt. Danke!
« Letzte Änderung: 05. März 2012, 00:43:54 von KhrisMUC »

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1261
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Re: Der C64-Technik-Hilfe-Thread
« Antwort #7 am: 04. März 2012, 20:16:39 »
Danke!

Habs mal ausprobiert. Kam aber leider folgende Fehlermeldung heraus:

Zitat
GlobalScript.asc(89): Error (line 89): Parse error in expr near '1'


BG
der Volltanker
"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"

MacGyver

  • Teenie Tentakel
  • ****
  • Beiträge: 339
    • Profil anzeigen
Re: Der C64-Technik-Hilfe-Thread
« Antwort #8 am: 04. März 2012, 22:19:14 »
In KhrisMUCs Code fehlt eine Klammer, und zwar in der Zeile
int gameloops = (message.Length / Game.TextReadingSpeed) + 1) * GetGameSpeed();
Füge noch eine Klammer vor 'message.Length' ein:
int gameloops = ((message.Length / Game.TextReadingSpeed) + 1) * GetGameSpeed();

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1261
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Re: Der C64-Technik-Hilfe-Thread
« Antwort #9 am: 05. März 2012, 01:05:56 »
Thx!

Danach kam schon der nächste Fehler gleich in der nächsten Zeile:

GlobalScript.asc(90): Error (line 90): Undefined token 'lblSpeech'
Diesen Fehler habe ich schon häufig gehabt, auch schon wo ich dieses C64-Script in MMM integrieren wollte.
Ist das auch wieder ein fehlender "import"?

Danke bis dahin schon mal.


BG
der Volltanker
"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: Der C64-Technik-Hilfe-Thread
« Antwort #10 am: 05. März 2012, 13:07:34 »
Ein bisschen Mitdenken hätte ich schon erwartet...
Wie ich schrieb, brauchst Du ein GUI und Label. Ich vermute mal, dass der schwarze Rand bereits ein GUI ist, also öffne dieses und setz ein Label drauf. Setz es an Position 1,1 oder so und mach es zwei Zeilen hoch und so breit wie den Bildschirm (ca. 318x24).
Dann nennst Du es - Trommelwirbel - lblSpeech!

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1261
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Re: Der C64-Technik-Hilfe-Thread
« Antwort #11 am: 09. März 2012, 18:00:13 »
Jo! Thx!

Mit dem Label hat das jetzt schon geklappt.

Allerdings läuft die Speech-Animation noch nicht mit.
Ich habe mal das Script durchforstet, wo die Speech-Animation erwähnt zu sein schien, und zwar in den Functions "DisplaySpeechBackgroundEx" und "DisplaySpeechQ_RE()" aber so ganz durchgestiegen bin ich da nicht.
Was fehlt denn noch in dem Script, dass die Speech-Animation startet?

Zum anderen ist der Font3 (also der C64-Font), der schon ursprünglich im Starterpak mit integriert war, zu groß für den lblSpeech, so dass die zweite Zeile nur noch teilweise sichtbar ist.
Der Font ist einst ja mit einer Größe von 10pt importiert worden. Kann ich trotzdem noch diese Fontgröße anpassen? Normal dürfte das ja nur eine Zeile sein, nur fand ich keinen Befehl heraus, der in etwa "eFontFont3.SetFontHeight(8);" oder so in der Art zur Verfügung stand.

Danke schon mal für die bisherige Hilfe! Super!


BG
der Volltanker

"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: Der C64-Technik-Hilfe-Thread
« Antwort #12 am: 09. März 2012, 19:57:43 »
AGS kann Fonts nicht selbst skalieren, Du müsstest eine kleinere verwenden.
Die Say-Animation musst Du auch von Hand starten.
Man könnte auch tricksen, eine unsichtbare Schrift verwenden und den Charakter tatsächlich sprechen lassen.
Entweder nimmt man eine Schrift, in der man vorher alle Zeichen gelöscht hat, oder man setzt die Farbe auf "magic pink", falls das funktioniert. Und natürlich ohne Outline.
SayAt außerhalb der Screens geht vermutlich nicht.

[ags]void SayTop(this Character*, String message) {
  lblSpeech.TextColor = this.SpeechColor;
  lblSpeech.Text = message;
  this.Say(message);
  lblSpeech.Text = "";
}[/ags]

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1261
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Re: Der C64-Technik-Hilfe-Thread
« Antwort #13 am: 09. März 2012, 22:07:12 »
Hmm.

Gibt es da auch ne abgekürzte Version in der Art von

AnimateCharacter(this Character*.Speechview) ?


Magic.Pink einzustellen könnte sich schwierig gestalten.

Beim Ausprobieren ist mir jetzt auch aufgefallen, dass die Gameloops von Say und SayTop unterschiedlich lang sind, so dass die Funktion SayTop noch kurz nachläuft, nachdem die Funktion Say schon beendet ist.
Die Möglichkeit einen leeren Font einzubauen, wäre vielleicht gar nicht so schlecht. Leider ist das Script bei den Starterpaks dermaßen komplex aufgebaut, dass sich das direkt übern Editor gar nicht anpassen lässt. Beim Probieren meine ich, festgestellt zu haben, dass für den Speech und für die Actionbar der gleiche Font genutzt wird, sprich also, der gleiche Verweis im Script. Man findet ja bspw. diese Fontliste im Script:

[ags] // --- load font corresponding to language and screen width ---
  string font_info;
  if (system.screen_width == 320)      StrCopy (font_info, GetTranslation ("font_320: 3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3"));
  else if (system.screen_width == 640) StrCopy (font_info, GetTranslation ("font_640: 13 14 14 14 14 14 14 14 14 14 14 14 14 14 13 13 13 13 13 13 14"));
  clearToSpace (font_info);

  SetSpeechFont (getInteger (font_info));         // Speech
  SetLabelFont (0, 0, getInteger (font_info));    // Status-Line[/ags]


Ich habe da in der ersten Zeile alle Fonts auf 3 geändert (weil das ja eh der C64-Font ist), wofür jede Position steht, ist leider gar nicht mehr ersichtlich.


BG
der Volltanker



"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1261
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Re: Der C64-Technik-Hilfe-Thread
« Antwort #14 am: 11. März 2012, 12:21:00 »
Hallo,

ich versuche gerade das Script zu integrieren, dass der Kanadier aus dem AGS-Forum für mich erstellt hatte. Da haut das tatsächlich auch exakt so hin.
Allerdings muss ich es leicht umschreiben und dem MMM-Script anpassen: Bis jetzt bin ich soweit gekommen:

[ags]function Reset_Line()
{
mouse.Mode = eModeWalkto;
UsedAction == A_WALK_TO;
gAction.Text = "Walk to";
UsedAction = A_WALK_TO;
}


void SayTop(this Character*, String message) {
  int gameloops = ((message.Length / Game.TextReadingSpeed)) * GetGameSpeed();
 
  lblSpeech.TextColor = this.SpeechColor;
  lblSpeech.Text = message;
  this.Say(message);
  WaitMouseKey(gameloops);
  lblSpeech.Text = "";
}

function Talk(this Character*, String message)
{
lblSpeech.TextColor = this.SpeechColor;
lblSpeech.Text = message;
int tempo = this.View;
this.StopMoving(); // just to be sure

int Cmpt =0;
String Empty = "  ";
while (Cmpt < message.Length)
    {
    Empty = String.Format("%s ",Empty);
    Cmpt++;
    } 
this.Say(Empty);
lblSpeech.Text = "";
Reset_Line();
} [/ags]

Unter der Function "Reset_Line" gibt er mir einen Klammerfehler aus. Ich hab auch alles mit einfach Klammer und auch doppelt eingeklammert ausprobiert. Bekomme da aber leider die Fehlermeldung nicht weg.


BG
der Volltanker
"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"