"Kassettenrekorder-Funktion" wie bei Gabriel Knight 1
-
- Hobby-Archäologe
- Beiträge: 177
- Registriert: 12.11.2009, 22:20
- Kontaktdaten:
"Kassettenrekorder-Funktion" wie bei Gabriel Knight 1
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<
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<
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1
Du müsstest eine eigene Say-Funktion benutzen:
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.
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!"
}
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
-
- Hobby-Archäologe
- Beiträge: 177
- Registriert: 12.11.2009, 22:20
- Kontaktdaten:
Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1
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..."
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..."
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1
Im Global.ash:
Das sollte aber nur ein Denkanstoß sein, die paar Zeilen reichen bei Weitem nicht aus.
Code: Alles auswählen
import function LogSay(this Character*, String message);
Use gopher repellent on funny little man
-
- Hobby-Archäologe
- Beiträge: 177
- Registriert: 12.11.2009, 22:20
- Kontaktdaten:
Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1
Ist klar, das es nur ein Denkanstoß ist.
Nur "import function LogSay(this Character*, String message);"
die Zeile hier habe ich auch schon versucht, aber sie hat nichts gebracht.
Komisch.
Nur "import function LogSay(this Character*, String message);"
die Zeile hier habe ich auch schon versucht, aber sie hat nichts gebracht.
Komisch.
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1
Hast Du es auch in den globalen header geschrieben? Global.ash?
Use gopher repellent on funny little man
-
- Hobby-Archäologe
- Beiträge: 177
- Registriert: 12.11.2009, 22:20
- Kontaktdaten:
Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1
Ja. Ich habe es in GlobalScript.ash geschrieben.
Wo könnte der Fehler liegen?
Wo könnte der Fehler liegen?
- TheIncredibleLovis
- 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
ich kenn mich zwar mit AGS nicht so super aus, aber geht das? :
ich würds so machen
und das dann so aufrufen:
aber bitte jetzt nicht für bare Münze nehmen...
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...KhrisMUC hat geschrieben:Du müsstest eine eigene Say-Funktion benutzen:
player.LogSay("bla");
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!"
}
Code: Alles auswählen
LogSay(EGO, "Hallo");
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Re: "Kassettenrekorder-Funktion" wie bei Gabriel Knight 1
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ügtTheIncredibleLovis 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...
Use gopher repellent on funny little man
- TheIncredibleLovis
- 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
sowas geht!? wow das ist... großartig! (und das mein ich nicht ironisch)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