IsTalking für Background-Speech und "IEHOVA"-Rätse
IsTalking für Background-Speech und "IEHOVA"-Rätse
1. Gibt es eine einfache Möglichkeit herauszufinden, ob ein Charakter noch redet oder schon aufgehört hat, wenn man Hintergrundsprache (SayBackground oder DisplaySpeechBackground) benutzt?
2. Weiß jemand einen Trick, wie ich mein Rätsel umsetzen könnte? Ich habe einen Raum - ähnlich der IEHOVA-Prüfung in Indy3: Der Spieler muß in einer Lavahöhle über die richtigen Pfähle laufen. Und wenn man auf einen Pfahl tritt, ändern sich die anderen Pfähle nach einer bestimmten Logik. Mein Problem ist, ich weiß nicht, wie ich das mit nur 20 Objekten umsetzen soll.
2. Weiß jemand einen Trick, wie ich mein Rätsel umsetzen könnte? Ich habe einen Raum - ähnlich der IEHOVA-Prüfung in Indy3: Der Spieler muß in einer Lavahöhle über die richtigen Pfähle laufen. Und wenn man auf einen Pfahl tritt, ändern sich die anderen Pfähle nach einer bestimmten Logik. Mein Problem ist, ich weiß nicht, wie ich das mit nur 20 Objekten umsetzen soll.
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
2. Genau so ein Rätsel gibt es übrigens in Indy4
Einen Trick gibt es nicht, aber es ist durchaus möglich, allerdings mit einer gehörigen Portion Skripten verbunden.
Mit einer der RawDraw-Funktionen kannst du ein beliebiges Sprite aus dem SpriteManager an eine Stelle des Raumes zeichnen lassen.
Im Bereich der Pfähle sollten keine walkable areas sein, außerdem musst Du mit Arrays die Koordinaten und den Zustand der Säulen verwalten.
Im global script musst Du den Linksklick abfangen, wenn der Spieler im entsprechenden Raum ist und der Bereich, wo die Pfähle sind, angeklickt wurde. Mit Walk(...eDirect) kannst Du dann die Hauptperson von Säule zu Säule laufen lassen. Usw.
Das ist auf jeden Fall eine coole Herausforderung, wenn ich heute Langeweile habe, mach ich mich vielleicht selber mal dran.
Einen Trick gibt es nicht, aber es ist durchaus möglich, allerdings mit einer gehörigen Portion Skripten verbunden.
Mit einer der RawDraw-Funktionen kannst du ein beliebiges Sprite aus dem SpriteManager an eine Stelle des Raumes zeichnen lassen.
Im Bereich der Pfähle sollten keine walkable areas sein, außerdem musst Du mit Arrays die Koordinaten und den Zustand der Säulen verwalten.
Im global script musst Du den Linksklick abfangen, wenn der Spieler im entsprechenden Raum ist und der Bereich, wo die Pfähle sind, angeklickt wurde. Mit Walk(...eDirect) kannst Du dann die Hauptperson von Säule zu Säule laufen lassen. Usw.
Das ist auf jeden Fall eine coole Herausforderung, wenn ich heute Langeweile habe, mach ich mich vielleicht selber mal dran.
Use gopher repellent on funny little man
OK, danke. Das 2. mit dem Pfähle-Rätsel muss ich mal schauen.
Die Lösung zu 1. mit speaking funktioniert jedenfalls nicht, denn bei BackgroundSpeech liefert speaking immer nur false. Ich hatte gehofft, dass man vielleicht irgendwie über die Overlayfunktionen herausfinden kann, ob der Character fertig ist mit (Hintergrund-)Sprechen. Gibt es einen Trick?
Die Lösung zu 1. mit speaking funktioniert jedenfalls nicht, denn bei BackgroundSpeech liefert speaking immer nur false. Ich hatte gehofft, dass man vielleicht irgendwie über die Overlayfunktionen herausfinden kann, ob der Character fertig ist mit (Hintergrund-)Sprechen. Gibt es einen Trick?
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Versuchs mal so:
Du brauchst einen globalen Overlay, z.B.
Wenn Du dann Say.Background aufrufst, schreibst Du
Jetzt kannst Du mit testen, ob er angezeigt wird. Steht übrigens im Manual bei der Erklärung zu SayBackground. Komplett mit Fehler allerdings, da von Overlay.IsValid die Rede ist.
Du brauchst einen globalen Overlay, z.B.
Code: Alles auswählen
Overlay *bs;
export bs;
Code: Alles auswählen
bs=cEgo.SayBackground("bla");
Code: Alles auswählen
if (bs.Valid)
Use gopher repellent on funny little man
-
- Adventure-Gott
- Beiträge: 4575
- Registriert: 13.07.2004, 14:04
- Wohnort: Da wo muss
- Kontaktdaten:
Gibt es auch eine Möglichkeit, die Textposition und -breite zu bestimmen? In LA-Spielen blieb die Schrift ja auch immer an einer Stelle, wenn es ein Background-Satz war
zeiger.X und zeiger.Y geben nur hyperdimensionale Werte zurück (d.h. außerhalb des Bildschirmbereiches)
zeiger.X und zeiger.Y geben nur hyperdimensionale Werte zurück (d.h. außerhalb des Bildschirmbereiches)
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge
Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.
Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.
Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Ist mir leider auch aufgefallen.[ZENSIERT] hat geschrieben:zeiger.X und zeiger.Y geben nur hyperdimensionale Werte zurück (d.h. außerhalb des Bildschirmbereiches)
Ich hege die Befürchtung, das geht nur mit den mit Create erstellten Overlays, nicht mit den mit SayBackground erstellten.
Sollte mal behoben werden
Ich habe gerade zwei Möglichkeiten probiert, den Text am "Mitlaufen" zu hindern, und bin glorreich gescheitert:
1.) Den gesprochenen Text mit CreateTextual selbst erzeugen.
Problem: Wenn der Text zu kurz ist (z.B. "Oh."), dann landet er viel zu weit links. Man müßte den Text irgendwie zentriert ausgeben können bzw. vorher die tatsächlichen Pixel-Ausmaße ermitteln können.
2.) Ein unsichtbarer Charakter redet, während der Hauptcharakter weiterlaufen kann.
Problem: In Scrolling Rooms muß man die Position des unsichtbaren Charakters in jedem Schleifendurchlauf anpassen. Das geht zwar, aber leider zittert dann der Text wie verrückt.
Gibt's noch ne andere Lösungsidee? Ich bin mit meinem Latein jedenfalls am Ende. Das einfachste wär wirklich, im AGS eine Option reinzubauen: "Schrift läuft nicht mit dem Charakter mit"
1.) Den gesprochenen Text mit CreateTextual selbst erzeugen.
Problem: Wenn der Text zu kurz ist (z.B. "Oh."), dann landet er viel zu weit links. Man müßte den Text irgendwie zentriert ausgeben können bzw. vorher die tatsächlichen Pixel-Ausmaße ermitteln können.
2.) Ein unsichtbarer Charakter redet, während der Hauptcharakter weiterlaufen kann.
Problem: In Scrolling Rooms muß man die Position des unsichtbaren Charakters in jedem Schleifendurchlauf anpassen. Das geht zwar, aber leider zittert dann der Text wie verrückt.
Gibt's noch ne andere Lösungsidee? Ich bin mit meinem Latein jedenfalls am Ende. Das einfachste wär wirklich, im AGS eine Option reinzubauen: "Schrift läuft nicht mit dem Charakter mit"
-
- Adventure-Gott
- Beiträge: 4575
- Registriert: 13.07.2004, 14:04
- Wohnort: Da wo muss
- Kontaktdaten:
Ich hab das schon längst gescriptet, habe aber riesige Probleme mit dem Abstand zum Rand bekommen. Hmmm....
Unsichtbarer Charakter? Wieso bin ich da nicht drauf gekommen?
Ich versuch's mal.
P.S. Bei LA-Spielen ist der Text auch nie mitgescrollt
Unsichtbarer Charakter? Wieso bin ich da nicht drauf gekommen?
Ich versuch's mal.
P.S. Bei LA-Spielen ist der Text auch nie mitgescrollt
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge
Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.
Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.
Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Ja, eben. Genau deswegen muss ich ja auch den "unsichtbaren Sprecher" dauernd anpassen, sonst würde der ja mitsamt seinem Sprechtext weggescrollt, wenn der Hauptcharakter inzwischen weiterflitzt. Theoretisch funktioniert meine Lösung , praktisch zittert der Text beim Scrollen (jedenfalls bei mir)[ZENSIERT] hat geschrieben:P.S. Bei LA-Spielen ist der Text auch nie mitgescrollt
Wenn du (oder jemand anders) eine Lösung findest, dann nix wie her damit
-
- Adventure-Gott
- Beiträge: 4575
- Registriert: 13.07.2004, 14:04
- Wohnort: Da wo muss
- Kontaktdaten:
Wie? MIT unsichtbarem Charakter, MIT Scrolling und OHNE Zittern?[ZENSIERT] hat geschrieben:Ich habe eigentlich kein Problem damit.
Das will ich auch *strampel* *räbäääh*
Machst du irgendwas anders?
Also ich merk mir bei jeder Ansage die aktuelle X/Y-Position des Hauptcharakters, stelle meinen unsichtbaren Stellverstreter an die gleiche Position und lasse IHN quatschen.
In der Zwischenzeit kann man mit dem Hauptcharakter rumrennen, ohne dass der Text hinterherkommt.
Damit der Unsichtbare dabei in breiten Räumen nicht wegscrollt, setze ich in jedem repeatedly_execute seine X/Y-Room-Koordinaten so zurück, dass er immer an den vorher gemerkten Screen-Koordinaten bleibt.
Aber wie gesagt: während des Scrollens zittert dummerweise der Text ganz schnell hin und her.
Oder hat die Auflösung Einfluss? (Ich benutze 320 x 200 x 16bit.)
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Code: Alles auswählen
// room script file
Overlay *bs;
int oldx;
int newx;
#sectionstart room_a // DO NOT EDIT OR REMOVE THIS LINE
function room_a() {
// script for Room: First time player enters screen
bs=Overlay.CreateTextual(220, 60, 40, 1, 65535, "Hallo.");
oldx=GetViewportX();
}
#sectionend room_a // DO NOT EDIT OR REMOVE THIS LINE
#sectionstart room_b // DO NOT EDIT OR REMOVE THIS LINE
function room_b() {
// script for Room: Repeatedly execute
newx=GetViewportX();
if (newx!=oldx) {
bs.X=220-newx;
oldx=newx;
}
}
#sectionend room_b // DO NOT EDIT OR REMOVE THIS LINE
EDIT: @Hüter: Ich hab mir den ganzen thread nochmal durchgelesen, bin mir aber immer noch nicht sicher, was genau Du eigentlich erreichen willst...
Use gopher repellent on funny little man
Was ich erreich will?
1. Der Charakter soll im Hintergrund reden, so dass man nebenher schon was anderes machen kann (z.B. rumlaufen)
2. Es soll exakt so aussehen wie mit SayBackground (d.h. zentriert über dem Kopf des Charakters, und genausolange Anzeigedauer)
3. Wenn der Charakter inzwischen rumläuft, soll der Text trotzdem an der ursprünglichen Stelle stehenbleiben und nicht über dem Kopf des Charakters mitwandern
4. Wenn der Raum rumscrollt, soll der Text trotzdem an der gleichen Bildschirmposition stehenbleiben.
Ich suche eine Lösung, die alle vier Bedingungen erfüllt.
1. Der Charakter soll im Hintergrund reden, so dass man nebenher schon was anderes machen kann (z.B. rumlaufen)
2. Es soll exakt so aussehen wie mit SayBackground (d.h. zentriert über dem Kopf des Charakters, und genausolange Anzeigedauer)
3. Wenn der Charakter inzwischen rumläuft, soll der Text trotzdem an der ursprünglichen Stelle stehenbleiben und nicht über dem Kopf des Charakters mitwandern
4. Wenn der Raum rumscrollt, soll der Text trotzdem an der gleichen Bildschirmposition stehenbleiben.
Ich suche eine Lösung, die alle vier Bedingungen erfüllt.