Maniac Mansion Mania Forum
MMM-Werkzeugkiste => Technik => Thema gestartet von: SeltsamMitHut am 23. August 2007, 12:19:37
-
Hi,
hab folgendes Problem:
Ein Vorgang unter Repeatedly Execute (Interaction Editor, Raum-Script) wird ja während der Player interagiert (wenn er etwas im Intentar oder einen Hotspot anschaut) oder bei Aktionen im Raum (bei denen auch "Wait" verwendet wird) solange nicht ausgeführt, bis wieder "AktionsPause" ist. Ist ja auch sinnvoll. Aber gibt es eine Möglichkeit, einen einzigen Vorgang davon auszunehmen? Allerdings noch für AGS 2.62...
Danke!
-
soweit ich weiss in der Repeatedly Execute always, diese funktion wird auf biegen und brechen und bei jedem wetter ausgeführt :)
-
Genau, einfach manuell ins room script einfügen:
function repeatedly_execute_always() {
//zeugs
}
-
Hmm...
"Variable 'function repeatedly_execute_always' is already imported..."
Wo genau muss das ins Room Script rein?
Müssen da noch irgendwelche Sectionstarts hin? Hab echt keine Ahnung... :-[
-
Sectionstarts fügt man grundsätzlich nie selbst ein, egal, was man macht.
Ich hab sie bei mir ins room script eingefügt, funktionierte anstandslos.
Wo ins script Du sie packst, ist völlig egal.
Check mal deinen script header (Strg-H), ob da eine Zeile "import function repeatedly_execute_always();" drin ist.
-
Jepp, sie wird im Script Header importiert und steht im Bern-Starerpack noch in den ersten 100 Zeilen:
function repeatedly_execute_always () {
#define BGS_DELAY 6 // this is the animation delay
if (bgspeechoverlayid!=-1){
if (IsOverlayValid(bgspeechoverlayid)){
if (bgscounter>=BGS_DELAY*2) bgscounter=0;
SetCharacterFrame(bgspeechcharid,character[bgspeechcharid].talkview+1,character[bgspeechcharid].loop, bgscounter/BGS_DELAY);
bgscounter++;
}
else {
ReleaseCharacterView(bgspeechcharid);
bgspeechoverlayid=-1;
}
}
}
Vesuche einfach mal, mein Zeug dort einzufügen (mit Abfrage, ob ich im betreffenden Raum bin).
-
Also das eben ist bei dem Versuch gebleiben. Haut man das dort ins GlobalScript, dann schluckt er den Rest nicht mehr. Hab auch alle Raumvaraiblen durch GLobalInts ersetzt, geht nicht, haut man da irgendwas mehr rein, motzt er bei funtion FaceDirection...
Scheint also absolut nicht egal zu sein, an welche Stelle man die function repeatedly_execute_always () reinsetzt und was da rein kommt... hab echt keine Ahnung...
-
Könnte man das nicht auch mit einem 'Timer' lösen, der sofort nach Betreten des Raums losgeht? ???
-
@MisterL: Hm. Und wo kommt "if (IsTimerExpired(x))" rein...? ;)
Also:
1. Wo im room script sie steht, ist egal. Im global script ist das was Anderes; Funktionen müssen vor dem Aufruf deklariert werden. Wenn Du also FaceDirection benutzen willst, pack es drüber oder besser die rep_ex_always ganz ans Ende.
2. Wenn Du globale Variablen verwendest und diese vor der rep_ex_always deklarierst, ex- und importierst, klappt es problemlos. Im global script kannst Du allerdings keine Hotspot- oder Objectnamen verwenden; Du musst hotspot[X] bzw. object[X] benutzen.
3. Pack die rep_ex_always ins room script und entferne einfach die import-Zeile aus dem header. Die gehört da sowieso nicht rein.
-
3. Pack die rep_ex_always ins room script und entferne einfach die import-Zeile aus dem header. Die gehört da sowieso nicht rein.
Danke, das hat geholfen. Darauf muss man aber auch kommen...
Und das rausnehmen kann wirklich nichts anrichten?
-
Nö, es sei denn, irgendwo im Starterpack würde (völlig überflüssigerweise) von Hand die Funktion aufgerufen.
Im schlimmsten Fall würdest Du aber nur beim Kompilieren eine "Undefined Token"-Meldung kriegen.