Noch ein MI-Fan-Adventure

Der Anlaufpunkt für alle, die selbst ein Adventure programmieren wollen.
Antworten
Maku

Beitrag von Maku »

Hab's hinbekommen ... danke :)
Maku

Beitrag von Maku »

Hätte da noch eine Frage zum Thema GUI ...

Wenn XY was sagt, dann wird der Mauszeiger ausgeblendet und er kann so lange nicht laufen etc, bis er fertiggesprochen hat ... ich würde das gern abändern ... in MI2 kann Guybrush auch laufen und gleichzeitig reden^^
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

cGuybrush.SayBackground("hi");

Allerdings fällt dann die Animation aus. Dafür gibt's aber ein Modul
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
Maku

Beitrag von Maku »

Was für ein Modul? Oô

Naja egal ... ich versuch gerade eine Funktion zu schreiben, welche SayBackground und Animate nutzt, aber die Speaking-Property geht nicht bei SayBackground :( Gibt es da ne bessere Lösung?
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

jo, die gibt's

Code: Alles auswählen

Overlay* speech = cGuybrush.SayBackground("Hello World");
while(speech.Valid) Wait(1); // wenn die Sprache noch auf dem Bildschirm ist, gibt die Valid-Eigenschaft true zurück
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
Maku

Beitrag von Maku »

Moin^^

Also ich hab gestern lange gegrübelt und bin bis jetzt noch zu keiner Lösung gekommen. Ich darf ja kein Wait() verwenden, damit das Script nicht unterbrochen wird, leider ging da kein while() mehr :/ Er muss solange wie die Nachricht auf dem Bildschirm ist die Animation machen, sie aber unterbrechen, wenn der Char läuft und danach wieder beginnen, falls die Nachrricht noch da ist ...
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

Mach doch mit cGuybrush.SetIdleView(x, 0), dann wird die Animation immer ausgeführt, wenn die Figur nicht geht.
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
Maku

Beitrag von Maku »

OK, damit gehts:

Code: Alles auswählen

function SayIt (String msg){

 int oldidle = cEgo.IdleView;
 
 Overlay* speaking = cEgo.SayBackground (msg);
 cEgo.SetIdleView(cEgo.SpeechView, 0);
 
 while(speaking.Valid){
  Wait(1);
 }
 
 cEgo.SetIdleView(oldidle, 0);
 
}
Mit einer Ausnahme: Das Wait() muss weg, damit das Script nicht angehalten wird, aber dann läuft sich das while() tot :/

Nachtrag: Hab's endlich hinbekommen :D

Code: Alles auswählen

Overlay* egosayitwob; // Overlay für SayIt()

function game_start() {
 [...]
 
 egosayitwob = Overlay.CreateTextual(0,0,1,0,0,"");
 SetGlobalInt(0,cEgo.IdleView);
 game.bgspeech_stay_on_display = 1;
}

function repeatedly_execute() { 
 [...]

 if (!egosayitwob.Valid){
  cEgo.SetIdleView(GetGlobalInt(0), 0); 
 }

 [...]
}

function SayIt (String msg){
 egosayitwob = cEgo.SayBackground (msg);
 cEgo.SetIdleView(cEgo.SpeechView, 0);
}
Maku

Beitrag von Maku »

So, der Thread wird älter, also muss was neues rein ^^

Ich habe gestern und heute die Geschichte niedergeschrieben, sie steht in der derzeitigen Fassung auf 4 A4-Seiten und ich habe gemerkt, dass ich an die 40 Hintergründe zeichnen muss, nicht zu vergessen die ganzen Objekte und NPC's, welche auch noch animiert werde wollen :shock: Naja wird schon...
Maku

Beitrag von Maku »

Ähm ... ich hab da ein Problem:

Ich hatte eine Property "door" eingesetzt, aus der ich auslesen wollte, ob eine Tür geöffnet oder geschlossen ist. (0=zu, 1=offen etc.) Das nutzte ich derzeit auch für die Standardaktionen (also Öffnen wenn 0 etc.). Nur dummer Weise durfte ich gerade feststellen, dass ich diese Propertys wärend der Laufzeit nicht ändern kann :/ Gibt es eine andere Möglichkeit einem Objekt einen Wert zuzuweisen? (ohne GlobalInt, ich möchte nicht für jede Tür im Spiel einen Eintrag im GLobalscript machen müssen -.-)

Danke ...
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Du kannst entweder Variablen im jeweiligen room script anlegen, oder Du definierst einen Array.

AGS unterstützt keine mehrdimensionalen Arrays, aber das kann man einfach selbst lösen:
Der Index ist Raum*10+Tür, also tuer[11] enthält den Status der ersten Tür im ersten Raum, tuer[52] den der zweiten Tür im fünften Raum, usw. (Der Faktor 10 dient nur der Anschaulichkeit, 3 reicht natürlich auch, wenn kein Raum vier oder mehr Türen hat.)

Es gibt noch elegantere Möglichkeiten, wenn die Tür ein Objekt ist, dass je nachdem, ob sie offen oder zu ist, Sprite X oder Sprite Y benutzt, kannst Du die Spritenummer über Object.Graphic abfragen. Geschlossene Türen könnten dann z.B. gerade Nummern haben, offene Türen ungerade Nummern.

Code: Alles auswählen

function is_door_open(int door) {
  int d=object[door].Graphic;
  if ((d/2)*2==d) return 0;
  else return 1;
}
Das funktioniert, ich habe vor kurzem im AGS-Forum aufgeschnappt, dass man im global script über hotspot[x], object[x], usw. die Instanzen des aktuellen Raumes ansprechen kann.
Use gopher repellent on funny little man
Maku

Beitrag von Maku »

EDIT: Ich glaub ich versuch doch mir so ein MMM-Interface an MI2 anzupassen, das is, bis auf die Grafiken, ja so wie's sein muss -,-
Maku

Beitrag von Maku »

Joar ... Das wär nun mein erster Versuch ein Schiff im MI2-Stil zu zeichnen. Was haltet ihr davon?

Bild

Edit: Hab noch etwas dran rumgespielt ...
Zuletzt geändert von Maku am 03.04.2006, 17:12, insgesamt 1-mal geändert.
Chillotob
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 35
Registriert: 17.11.2004, 08:46
Wohnort: Marburg

Beitrag von Chillotob »

Das Schiff sekbst sieht super aus, allerdings solltest du am Meer noch arbeiten. Die Wellen wirken mir irgendwie zu eckig, außerdem solltest du evtl. noch ein wenig Gischt hinzufügen.
Benutzeravatar
LAF
Oldschool RPG King
Oldschool RPG King
Beiträge: 6361
Registriert: 30.03.2005, 20:13
Wohnort: Tulln(Ö)

Beitrag von LAF »

Das Schiff schaut schon mal nicht schlecht her, der Hintergrund ist etwas trostlos, fast ein wenig zu dunkel
Just the old one's
Oldschool RPG's: auf http://www.rpg-atelier.net/ :)
Antworten