"Kassettenrekorder-Funktion" wie bei Gabriel Knight 1

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Retro-Guy
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 177
Registriert: 12.11.2009, 22:20
Kontaktdaten:

"Kassettenrekorder-Funktion" wie bei Gabriel Knight 1

Beitrag von Retro-Guy »

Hallo,

Bei Gabriel Knight: the Sins of the Fathers gab es ein cooles Feature. Nämlich die "Kassettenrekorder-Funktion". Mit dieser Funktion konnte man alle Gespräche die man bisher geführt hat nochmal durchlesen.
Hat jemand vielleicht eine Ahnung wie man das auch mit AGS machen könnte?

Vielen Dank! [-o<
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1

Beitrag von KhrisMUC »

Du müsstest eine eigene Say-Funktion benutzen:

Code: Alles auswählen

function LogSay(this Character*, String message) {
  this.Say(message);
  Log(String.Format("%s: %s", this.Name, message));  // macht aus Namen und Text z.b. "George: Hallo!"
}
Statt player.Say("bla"); jetzt immer player.LogSay("bla"); benutzen, auch in Dialogskripten, und dann braucht man noch eine Funktion Log(String logtext), die den String irgendwo dranhängt.
Irgendwo können z.B. bildschirmgroße DynamicSprites sein, durch die man dann seitenweise blättern kann, oder ein Array von Strings, die angezeigt werden.
Die erste Methode ist bei langen Texten einfacher, da man .DrawStringWrapped benutzen kann, die zweite einfacher umzusetzen.
Use gopher repellent on funny little man
Retro-Guy
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 177
Registriert: 12.11.2009, 22:20
Kontaktdaten:

Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1

Beitrag von Retro-Guy »

Ich habe "function LogSay(this Character*, String message)" in das GlobalScript kopiert.
Aber jetzt kann ich die Funktion nur im GlobalScript verwenden und nicht bei einem RoomEvent oder einem Dialog. "LogSay" is not a public member of Character..."
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1

Beitrag von KhrisMUC »

Im Global.ash:

Code: Alles auswählen

import function LogSay(this Character*, String message);
Das sollte aber nur ein Denkanstoß sein, die paar Zeilen reichen bei Weitem nicht aus.
Use gopher repellent on funny little man
Retro-Guy
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 177
Registriert: 12.11.2009, 22:20
Kontaktdaten:

Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1

Beitrag von Retro-Guy »

Ist klar, das es nur ein Denkanstoß ist. :wink:
Nur "import function LogSay(this Character*, String message);"
die Zeile hier habe ich auch schon versucht, aber sie hat nichts gebracht. :?
Komisch.
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1

Beitrag von KhrisMUC »

Hast Du es auch in den globalen header geschrieben? Global.ash?
Use gopher repellent on funny little man
Retro-Guy
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 177
Registriert: 12.11.2009, 22:20
Kontaktdaten:

Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1

Beitrag von Retro-Guy »

Ja. Ich habe es in GlobalScript.ash geschrieben.

Wo könnte der Fehler liegen?
Benutzeravatar
TheIncredibleLovis
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 208
Registriert: 12.04.2005, 18:08
Wohnort: Hamburg, Regen, Frisur hält!

Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1

Beitrag von TheIncredibleLovis »

ich kenn mich zwar mit AGS nicht so super aus, aber geht das? :
KhrisMUC hat geschrieben:Du müsstest eine eigene Say-Funktion benutzen:
player.LogSay("bla");
theoretisch würde der Punkt-Operator ja bedeuten, dass der Char nun die Memberfunktion "LogSay" besitzt, aber wir haben diese Funktion ja nicht zur Char-Klasse hinzugefügt, sondern einfach nur ins Script...

ich würds so machen

Code: Alles auswählen

function LogSay(character *the_char, String message) {
  the_char.Say(message);
  Log(String.Format("%s: %s", the_Char.Name, message));  // macht aus Namen und Text z.b. "George: Hallo!"
}
und das dann so aufrufen:

Code: Alles auswählen

LogSay(EGO, "Hallo");
aber bitte jetzt nicht für bare Münze nehmen...
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1

Beitrag von KhrisMUC »

TheIncredibleLovis hat geschrieben:theoretisch würde der Punkt-Operator ja bedeuten, dass der Char nun die Memberfunktion "LogSay" besitzt, aber wir haben diese Funktion ja nicht zur Char-Klasse hinzugefügt, sondern einfach nur ins Script...
Das ist eine sogenannte Extenderfunktion; damit kann man seine eigenen Memberfunktionen zu vorhandenen Typen hinzufügen. Wir haben .LogSay also durchaus zur Character-Klasse hinzugefügt :)
Use gopher repellent on funny little man
Benutzeravatar
TheIncredibleLovis
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 208
Registriert: 12.04.2005, 18:08
Wohnort: Hamburg, Regen, Frisur hält!

Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1

Beitrag von TheIncredibleLovis »

KhrisMUC hat geschrieben: Das ist eine sogenannte Extenderfunktion; damit kann man seine eigenen Memberfunktionen zu vorhandenen Typen hinzufügen. Wir haben .LogSay also durchaus zur Character-Klasse hinzugefügt :)
sowas geht!? :o wow das ist... großartig! :D :D (und das mein ich nicht ironisch)
Antworten