suche ein bestimmtes tutorial

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
adrenochrom
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 24
Registriert: 18.05.2005, 18:45

suche ein bestimmtes tutorial

Beitrag von adrenochrom »

ich glaube langsam, dass ich jedes erhältliche tutorial zu ags auf meiner platte habe, aber irgendwie finde ich nie das, was ich grade brauche. ich will eigentlich was ganz simples machen. der character soll was aufnehmen aber vorher hinlaufen. im forum habe ich sowas auch nicht gefunden. sollte ich es irgendwo übersehen haben, dann ok, lyncht mich :roll:
adrenochrom
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 24
Registriert: 18.05.2005, 18:45

Beitrag von adrenochrom »

achso, und kann mir jemand kurz eine variable posten?

glaube ist recht einfach:

soll bei einem objekt rein bei "lock at a objekt"

wenn das objekt auf position 246, 148 ist, dann soll nichts passieren, sonst soll Roger einen text sagen
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Rechts oben bei Deinen posts gibt es einen Edit-Button, dann musst Du nicht zweimal hintereinander posten.

der Befehl zum Hinlaufen (AGS 2.62):

Code: Alles auswählen

MoveCharacterBlocking (ROGER, x, y, 0);
Um ein Objekt aufzunehmen, muss folgendes passieren:
1. das Objekt muss aus dem Raum verschwinden: ObjectOff(z);
2. das Objekt muss im Inventar erscheinen: AddInventory(v);
Das Raum-Objekt und das Inventar-Objekt haben rein AGS-technisch nichts miteinander zu tun und müssen getrennt erstellt werden.

Du meinst glaub ich ein Skript (keine variable):

Code: Alles auswählen

If (GetObjectX(w)!=246 || GetObjectY(w)!=148) DisplaySpeech(ROGER, "bla bla");
Du musst natürlich v, w, x, y & z durch die entsprechenden Zahlen ersetzen. Eh klar.
Use gopher repellent on funny little man
podthepunk
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 122
Registriert: 15.02.2005, 14:59

Beitrag von podthepunk »

Unter meinem post stehen die links zur (teilweise) übersetzten Helpfile zu AGS
adrenochrom
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 24
Registriert: 18.05.2005, 18:45

Beitrag von adrenochrom »

erstmal vielen dank für deine antwort, khrismuc

bei dem script muss irgendein fehler sein:

// room script file


#sectionstart object1_a // DO NOT EDIT OR REMOVE THIS LINE
function object1_a() {
// script for Object 1 (pflanze): Look at object

if (GetObjectX(1)!=268 || GetObjectY(1)!=151) DisplaySpeech (ROGER, "Da ist etwas hinter der Pflanze!");

}
#sectionend object1_a // DO NOT EDIT OR REMOVE THIS LINE

#sectionstart object0_a // DO NOT EDIT OR REMOVE THIS LINE
function object0_a() {
// script for Object 0 (werkzeug): Look at object

MoveCharacterBlocking (ROGER, 285, 160);
ObjectOff(0);
AddInventory(3);

}
#sectionend object0_a // DO NOT EDIT OR REMOVE THIS LINE


er sagt, dass da irgend ein fehler ist...
adrenochrom
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 24
Registriert: 18.05.2005, 18:45

Beitrag von adrenochrom »

@ podthepunk
ja ich habe die dateien schon alle, aber leider sind ja die für mich wichtigsten stellen noch nicht übersetzt. aber trotzdem danke. einiges davon habe ich schon gebrauchen können
strazer

Beitrag von strazer »

er sagt, dass da irgend ein fehler ist...
Fehlermeldung posten!
adrenochrom
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 24
Registriert: 18.05.2005, 18:45

Beitrag von adrenochrom »

also fehlermeldung:

There was an error compilling your script. The problem was

Error (line8: undefined symbol 'ROGER'

Do you want to fix the blabla...
adrenochrom
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 24
Registriert: 18.05.2005, 18:45

Beitrag von adrenochrom »

ok, ich habs, eigentlich logisch. der heißt ja ego und nicht roger bei mir. aber ich hab noch ein viel blöderes problem. ich möchte den eine pflanze verschieben lassen. also wähle ich bei Interaction Object -> Object-Move object (1, 246, 150, 0, False)
eigentlich klappt das auch, aber damit der character nicht dahinter läuft und von der pflanze überdeckt wird, hab ich den walkable areas in dem bereich nicht drin, wo die pflanze verschoben werden soll. und dann geht das nicht. geht nur, wenn die pflanze im walkable areas verschoben wird. aber ich will ide blöde pflanze hinter meinem charakter haben...
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Jedes Objekt hat eine baseline. Diese kann bei Room Editor - Objects versetzt werden und legt fest, ob der Charakter vor oder hinter dem Objekt dargestellt wird. Setz die baseline einfach über die walkable area, dann ist der Charakter immer vor der Pflanze.
Use gopher repellent on funny little man
adrenochrom
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 24
Registriert: 18.05.2005, 18:45

Beitrag von adrenochrom »

super! genau das hab ich gesucht. vielen dank!

jetzt aber noch eine kleinigkeit. habe ja oben nach dem script gefragt, wenn das objekt an einer bestimmten stelle ist, dann soll er beim anschauen etwas sagen. das klappt irgendwie nicht. also wenn der character auf die pflanze schaut, noch bevor er sie verschoben hat, dann soll er sowas sagen, wie "dahinter ist was". Wenn er sie aber dann verschoben hat, dann soll er dass nicht mehr sagen. mit dem script von oben, macht er das nicht. bzw. er sagt es immer, auch wenn die pflanze verschoben ist.
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Dann z.B. so:

Code: Alles auswählen

If (GetObjectX(1)<240)
  DisplaySpeech(EGO, "Dahinter ist etwas.");
else
  DisplaySpeech(EGO, "Eine ganz normale Pflanze.");
Ich weiss natürlich nicht genau, von wo nach wo die Pflanze verschoben wird.
Einfacher wäre es aber, wenn Du z.B. ein GlobalInt benutzt. Nach dem Verschieben setzt du es auf 1.
Denn Roger soll ja die Pflanze nicht nochmal verschieben. Du musst also in der Interact with Pflanze-Interaction auch testen, ob sie schon verschoben wurde, nicht nur bei Look at.
Use gopher repellent on funny little man
adrenochrom
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 24
Registriert: 18.05.2005, 18:45

Beitrag von adrenochrom »

hab mal den script so eingebaut:
if (GetObjectX(1)!=268 || GetObjectY(1)!=151)
DisplaySpeech(EGO, "Da ist etwas hinter der Pflanze!");
else
DisplaySpeech(EGO, "Eine ganz normale Pflanze.");

das geht aber nicht. er sagt immer die erste message. wie das mit dem globalint funzen soll is mir nicht ganz klar. kannst du mir das genauer erklären oder gibt es ein tutorial darüber?
achso, wenn die pflanze verschoben ist, dann verschiebt er sie nicht nochmal. bzw. sie ist ja dann schon auf den koordinaten. also das klappt im grunde.
Smiley
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 163
Registriert: 28.04.2005, 16:26
Wohnort: Mönchengladbach

Beitrag von Smiley »

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

Beitrag von KhrisMUC »

Die if-Abfrage aus dem Skript ist sehr speziell.
Nur, wenn das Objekt genau auf den Koordinaten (268;151) ist, sagt er die zweite Message.
Da die Pflanze verschoben wird, also z.B. von (240;151) nach (270;151), reicht auch eine ungenauere Abfrage.
In dem zweiten Skript hab ich doch geschrieben, wie das aussehen kann. Mit if (GetObjectX(1)<250) erreicht man genau das selbe.

GlobalInts sind globale Variablen. In dem Fall Integer, also können sie nur ganze Zahlen enthalten. Der Vorteil ist, dass man sie aus jedem Skript abfragen bzw. verändern kann.
Jede GlobalInt hat eine Nummer. Wenn ich jetzt z.B. wissen will, welchen Wert die Nummer 6 hat, benutze ich GetGlobalInt(6). Will ich den Wert verändern, benutze ich SetGlobalInt(6,x);, wobei ich statt x den neuen Wert einsetze.

Im Fall mit der Pflanze würde das ganze so aussehen:

Code: Alles auswählen

// Interact with Pflanze

if (GetGlobalInt(21)==0 {
SetGlobalInt(21,1);
// Objekt bewegen, Message, bla bla...
}


// Look at Pflanze

if (GetGlobalInt(21)==0)
  DisplaySpeech(EGO, "Da ist etwas hinter der Pflanze!");
else
  DisplaySpeech(EGO, "Eine ganz normale Pflanze.");
GlobalInt(21) dient dazu, festzuhalten, ob die Pflanze bereits bewegt wurde. Alles klar?
Use gopher repellent on funny little man
Antworten