Maniac Mansion Mania Forum

MMM-Werkzeugkiste => Technik => Thema gestartet von: LilaQ am 20. Januar 2008, 08:45:04

Titel: Objekte in externen Räumen ansprechen
Beitrag von: LilaQ am 20. Januar 2008, 08:45:04
Hallöle endlich mal wieder,

habe kein eigentliches Problem sondern frage interessenhalber. Standardmässig ist es nicht möglich Objekte in Räumen anzusprechen in denen man sich nicht befindet richt? So a la:

raum[x].objekt[y].funktion=true;
Ich finde das eigentlich sehr schade weil einem das viel Arbeit ersparen würde anstatt jedes mal nen GI zu setzen und dann im jeweiligen Raum über 'Player enters room' die einzelnen Objekte anzusprechen.

Sind die Objekte denn keine 'Kinder' von den Räumen die man dann direkt ansprechen könnte?
Afaik gibt es ja ein Modul für den AGS um sowas zu handlen, ist halt nur schade dass es nicht standardmässig vorhanden ist.

Mfg
LilaQ

P.S.: Bin endlich wieder dabei und auch mein Adventure geht jetzt fleissig vorwärts ;)
Titel: Re: Objekte in externen Räumen ansprechen
Beitrag von: Kaktus am 20. Januar 2008, 09:32:39
Standardmässig ist es nicht möglich Objekte in Räumen anzusprechen in denen man sich nicht befindet richt?
Nein, abe ich glaube in AGS 3, ist das afaik standardmäßig dabei, kann aber auch sein, dass ich mich irre.
Bis dahin könntest du  ja auch erstmal das von dir bereits erwähnte Module nutzen, bietet zwar nicht allzuviele Funktionen, aber ist sicherlich besser als nichts -> http://new.bigbluecup.com/yabb/index.php?topic=14203.0
Titel: Re: Objekte in externen Räumen ansprechen
Beitrag von: KhrisMUC am 20. Januar 2008, 14:59:40
Aus Speicherplatzgründen ist jeweils nur der aktuelle Raum im Speicher. Auch in AGS 3 ist das so; die Funktionalität ist weder eingebaut oder dabei.
Aber wie oft muss man denn Objekte in anderen Räumen aus- und anschalten? Das kommt doch nicht so häufig vor, oder?
Titel: Re: Objekte in externen Räumen ansprechen
Beitrag von: Kaktus am 20. Januar 2008, 19:48:29
Also theoretisch kommt das bei jeder Tür vor, aber bisher bin ich mit dem any_click_on_door script immer gut gefahren.
Titel: Re: Objekte in externen Räumen ansprechen
Beitrag von: Nall-chan am 20. Januar 2008, 22:02:50
Vom OtherRoom Modul gibt es auch schon Ver. 0.85 -> http://new.bigbluecup.com/yabb/index.php?topic=20650.0 (http://new.bigbluecup.com/yabb/index.php?topic=20650.0)
Diese funktioniert auch mit AGS 2.72 und biete noch ein paar neue Funktionen.
Titel: Re: Objekte in externen Räumen ansprechen
Beitrag von: LilaQ am 21. Januar 2008, 03:05:17
Aus Speicherplatzgründen ist jeweils nur der aktuelle Raum im Speicher. Auch in AGS 3 ist das so; die Funktionalität ist weder eingebaut oder dabei.
Aber wie oft muss man denn Objekte in anderen Räumen aus- und anschalten? Das kommt doch nicht so häufig vor, oder?

Naja also ich bin bei meinem Adventure jetzt schon häufiger über die 'Problematik' gestolpert. Wenn halt nach bestimmten Ereignissen Objekte von Characteren mitgenommen werden oder abgelegt werden, oder manche Objekte erst nach bestimmten Ereignissen sichtbar sein sollen usw und sofort.

Dass nur der aktuelle Raum im Speicher ist versteh ich ja, aber es würde doch Sinn machen dass man Objekte in externen Räumen wenigstens aus dem Räumen raus Werte zuweisen könnte. So dass diese Werte (X,Y,Visible etc.) halt erst abgefragt werden sobald man dann den jeweiligen Raum betritt. Würde einem halt nur diesen manuellen Weg über die GI + PlayerEntersRoom ersparen.

@ Nall-Chan: Danke für den Link. Werd's nachher evtl. mal einbauen.

Mfg
LilaQ
Titel: Re: Objekte in externen Räumen ansprechen
Beitrag von: Nall-chan am 22. Januar 2008, 21:23:17
So viel anders funktioniert das OtherRoom Modul auch nicht, nur das es keine GIs dafür benutzt. Vielleicht auch guter Ersatz für die any_click_on_door Funktion. Zumindest versuche ich derzeit Türen auf ähnliche Art umzusetzen.
Titel: Re: Objekte in externen Räumen ansprechen
Beitrag von: KhrisMUC am 23. Januar 2008, 11:26:05
Also theoretisch kommt das bei jeder Tür vor, aber bisher bin ich mit dem any_click_on_door script immer gut gefahren.
Wie schon öfters erwähnt ist es nicht nötig, Tür-Objekte in anderen Räumen an- oder auszuschalten (sofern man nicht mit mehreren Charakteren gleichzeitig unterwegs ist oder im Kreis laufen kann). Any_click_on_door verändert nur Objekte im aktuellen Raum, niemals außerhalb (was ja wie gesagt nicht auf direktem Wege geht).

LilaQ: GlobalInts würde ich sowieso nicht verwenden.
Du kannst z.B. Folgendes coden:

// header
struct Raum {
  bool objekt_visible[20];
  bool inited;
}

import Raum raum[30];

// global script
Raum raum[30];
export raum;

function on_event(EventType e, int d) {
  if (e == eEventPlayerEntersBeforeFadein) {
    int i;
    if (!raum[player.Room].inited) {
      while (i<Room.ObjectCount) {
        if (object[i].Visible) raum[player.Room].objekt_visible = true;
        else raum[player.Room].objekt_visible = false;
        i++;
      }
      raum[player.Room].inited = true;
    } else {
      while (i<Room.ObjectCount) {
        if (raum[player.Room].objekt_visible[i]) object[i].Visible = true;
        else object[i].Visible = false;
        i++;
      }
    }
  }
}
Jetzt nur noch "raum[5].objekt_visible[3] = false;" und der Rest ist Geschichte ;)