CAOS-Programmierung: Beispiele: Komplex

Aus Wikibooks

Mit Dockingstation[Bearbeiten]

Der nachfolgende Quelltext und die Erklärung sind von der Seite [[1]] übernommen
Die Autorin Jasmin Handwerker ist mit der Veröffentlichung ausdrücklich einverstanden
Ich habe einige Stellen angepasst.

Hinweis : Es muß die Datei medm.c16 aus C3 im Images Ordner vorhanden sein (Oder eine selbst gemalte Grafik! folgt noch)
          (       medicine maker.c16  aus C3 in medm.c16 umbenennen) Oder download der agent.zip Datei von Website [1] 



Mit den Compound Parts werden z.B. Automaten(Agenten) gemacht.
Der Zweck der Compound Parts ist es, dass man ihnen verschiedene zusätzliche Teile hinzufügen kann. Zur Auswahl stehen unter anderem Buttons, die einen Event auslösen, wenn sie gedrückt werden, Texte, Animationen.
Alle Compound Objekte werden initiiert, indem man den Befehl NEW: COMP benutzt und mit dem Befehl PAT: die entsprechenden extra Teile hinzufügt. Bei dem Erstellen des Objekts wird NEW: COMP als part 0 benannt, so dass man bei den zusätzlichen Teilen mit 1 beginnen sollte.
Die Teile eines Compound Objektes müssen nicht die selbe Sprite-Datei benutzten. Sie sind simple Objekte, also haben Attribute, Verhalten, etc. Teile werden mit dem Befehl PAT: KILL entfernt.
DULL Teile

Als erstes erkläre ich hier die Verwendung von DULL Teilen.
DULL Teile werden verwendet um bestimmte Flächen auf einem Objekt zu erzeugen, die andauernd animiert sein können.

Die Sprite-Datei ist komplett von der Medizin-Maschine übernommen.
Ich hatte es erst mit eigenen Bildern versucht, aber nachdem ich mich 2 Tage damit abgequält hatte und der Agent immer noch nicht ging, gab ich es auf.
Komischerweise hat es mit der Medizin-Maschine Sprite-Datei sofort geklappt. Weiß immer noch nicht wieso.

Unten folgt die cos-Datei mit den Erklärungen. Ich habe nur neue Befehle erläutert. Die anderen findet ihr schon bei dem Honigtopf Tutorial
Wenn man sich das Tutorial durchliest ist es am besten, die Sprite-Datei offen zu haben, damit man immer gucken kann, welches Bild jetzt gemeint ist und welche Animationen stattfinden. Es ist dann viel leichter alles zu verstehen (geht mir zumindest so).


Der Quelltext

inst
new: comp 2 21 20403 "medm" 23 0 5000
pat: dull 1 "medm" 1 57 71 0
pat: dull 2 "medm" 4 0 35 0
pat: dull 3 "medm" 10 9 38 0
attr 199
clac 0
elas 0
fric 100
perm 60
accg 5
setv va00 game "CreatorX"
setv va01 game "CreatorY"
doif va00 eq 0 and va01 eq 0
 setv va00 5687    * oder 6150
 setv va01 3670    * oder 9150
endi
mvsf va00 va01

scrp 2 21 20403 1
part 1
anim [0 1 255]
clac 1
endm 
scrp 2 21 20403 2
part 2
anim [0 1 2 3 4 5 4 3 2 1 255]
clac 2
endm
scrp 2 21 20403 0
part 3
anim [0 1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1 255]
clac 3
endm
scrp 2 21 20403 3
part 1
pose 0
part 2
pose 0
part 3
pose 0
clac 0
endm
rscr
enum 2 21 20403
kill targ
next
scrx 2 21 20403 1
scrx 2 21 20403 2
scrx 2 21 20403 0
scrx 2 21 20403 3 


new: comp 2 21 20403 "medm" 23 0 5000

Der Agent wird installiert. Wie oben schon erwähnt ist er nun kein simpler Agent mehr (simp), sondern ein Commpound Part. Also steht nach dem new 
Befehl comp. Als nächstes folgen wieder die Family- Genus- und Skriptnummer, die Sprite-Datei und Anzahl der Bilder, beginnendes Bild sowie Ebene.

pat: dull 1 "medm" 1 57 71 0

Nun folgt das erste DULL Teil. Es ist der rote Knopf, mit dem man eigentlich Medizinflaschen ausgibt.
Um DULL Teile dem Agenten hinzuzufügen sind folgende Angaben wichtig:
pat: DULL, DULL-Nummer, Sprite-Datei, beginnendes Bild, x-Koordinate auf dem Agent, y-Koordinate auf dem Agent, Eben in Bezug auf den Agenten.
Unser erstes DULL Teil nutzt also die Bilder ab 1 beginnend (2. Bild in der Sprite-Datei), hat die Koordinaten (57, 71) und die Eben 0 in Bezug zum  
Agenten.
Das mit der Ebene in Bezug zum Agenten hab ich noch nicht ganz raus. Ich gebe immer 0 an und es funktioniert.

pat: dull 2 "medm" 4 0 35 0

Dieses DULL Teil ist der Balken, der angibt, wieviel Energie der Medizinmaschine noch zur Verfügung steht und es hat die gleichen Bedingungen wie  
DULL Teil Nummer 1.
Hier nutzt es die Bilder der Sprite-Datei ab Nummer 4 und hat die Koordinaten (0, 35).

pat: dull 3 "medm" 10 9 38 0

Dieses DULL Teil ist die Fläche, in der die Medizinflaschen ausgegeben werden und es hat die gleichen Bedingungen wie DULL Teil Nummer 1.
Hier nutzt es die Bilder der Sprite-Datei ab Nummer 10 und hat die Koordinaten (9, 38).

clac 0

Dieser Befehl bewirkt, dass beim nächsten Klicken auf den Agenten mit der Maus ein Activate 1 Event ausgeführt wird. Man kann festlegen, was bei 
diesem Event stattfinden soll, indem man scrp family, genus, skriptnummer, 1 bearbeitet (mehr dazu siehe unten, da dieser Befehl erklärt wird).

scrp 2 21 20403 1

Dies ist also besagter Activate 1 Event. Er wird bei diesem Agenten aufgerufen, wenn man das erste Mal auf den Agenten klickt.

part 1

Mit part Nummer sagt man, welches Teil man benutzen will. In unserem Fall ist dies das erste DULL Teil (der rote Knopf).

anim [0 1 255]

Mit dem Befehl anim wird ein Teil animiert. In der rechteckigen Klammer gibt man an, welche Bilder nacheinander angezeigt werden sollen.
Animiert man Teile, ist Bild 0 immer das Bild in der Sprite-Datei, dass man bei dem Befehl pat: DULL als beginnendes Bild angegeben hat.
Mit 255 startet man eine Endlosschleife. Der anim Befehl wird immer wieder ausgeführt.
Hier am konkreten Fall sieht das so aus, dass 0 das zweite Bild in der Sprite-Datei ist (Knopf aus) und 1 das dritte (Knopf an). Guckt euch die  
Sprite-Datei an, dann wisst ihr was ich meine. Beide Bilder werden immer wieder wiederholt, so dass der Knopf dauernd blinkt.
Ich habe die anderen anim Befehle nicht erklärt, da diese Erklärung reichen müsste, damit ihr auch die anderen versteht. Eine andere Hilfe ist es sich 
den Agenten im Spiel anzuschauen, was er nach welchem Klick macht.

clac 1

Dieser Befehl bewirkt, dass nach erneutem Klicken auf den Agenten wird der Activate 2 Event ausgeführt.

Zusammenfassung Activate 1 Event:
Der rote Knopf wird ausgewählt und in einer Endlosschleife animiert. Man bewirkt durch den Befehl clac 1, dass bei erneutem Klick ein anderes Event aufgerufen wird. Würde man clac 1 weglassen, würde immer nur der rote Knopf animiert werden und die anderen Teile würden unbenutzt bleiben.

scrp 2 21 20403 2

Dies ist der Activate 2 Event.

part 2

Das DULL Teil mit der Nummer 2 (die Energieanzeige) wird ausgewählt.

clac 2

Nach erneutem Klicken auf den Agenten wird der Deactivate Event ausgeführt.

Zusammenfassung Activate 2 Event:
Die Energieanzeige wird ausgewählt und in einer Endlosschleife animiert. Durch den Befehl clac 2 wird bewirkt, dass bei erneutem Klicken ein anderes Event aufgerufen wird.

scrp 2 21 20403 0

Der Deactivate Event. Lasst euch durch den Namen nicht verwirren. Es bedeutet nicht, dass dieses Event den Agenten deaktiviert. Man kann damit alles  
mögliche machen, es kommt nur darauf an, was in dem Deactivate Event steht.

part 3

Das DULL Teil mit der Nummer 3 (Feld, in dem die Medizinflaschen herauskommen) wird ausgewählt.

clac 3

Nach erneutem Klicken auf den Agenten wird der Hit Event ausgeführt.

Zusammenfassung Deactivate Event:
Das Feld, in dem die Medizinflaschen erscheinen wird ausgewählt und in einer Endlosschleife animiert.

scrp 2 21 20403 3

Der Hit Event

pose 0

Mit diesem Befehl wird das ausgewählte Teil (muss man vorher immer angeben) in die Bildposition 0 zurückversetzt.

Zusammenfassung Hit Event:
Nacheinander werden alle Teile ausgewählt und auf Bilddatei 0 zurückgesetzt. Dies hat den Effekt, dass alle Animationen stoppen und der Agent wieder aussieht wie am Anfang. Am Ende steht der Befehl clac 0, den wir auch schon in dem Installationsskript gesehen haben. Damit wird beim nächsten Klick auf den Agenten wieder der Activate 1 event ausgeführt und alles beginnt von vorne.

rscr

Nun folgt das Uninstall Skript. Wurde auch schon im Honig-Tutorial erklärt.
Noch wichtig zu wissen ist, dass man immer angeben muss, auf welches Teil des Agenten man sich bezieht (part Nummer) wenn man einen Animationsbefehl 
benutzt (bei diesem Agenten waren das anim und pose).
Einen Teil zu animieren hat keinen Effekt auf andere Teile.

Mit den Koordinaten von den DULL Teilen hatte ich anfangs etwas Probleme. Am besten ihr benutzt ein Grafikprogramm (ich habe Paint Sho Pro 5 benutzt) und fahrt mit der Maus über das Bild. Bei Paint Shop Pro waren dann unten rechts die Koordinaten angezeigt. Müsste eigentlich auch in jedem anderen Grafikprogramm der Fall sein. Die Koordianten für das DULL Teil beginnen in der linken oberen Ecke, also dort wird es am Agenten angezeigt. In der Sprite-Datei sind auch schwarze Bilder in der Größe der Teile. Diese sind bei jedem DULL Teil Bild Nr. 0, denn schwarz wird im Spiel als transparent dargestellt.

Auf der Website steht die Datei zum Download zur Verfügung.


Dockingstation ist nicht notwendig[Bearbeiten]

Für diese Beispiel ist meine c16 Datei nötig.

*Installation des Agenten
inst
new: comp 2 21 30000 "rech" 23 0 4000
pat: dull 1 "anzeige2" 0 15 15 0
pat: dull 2 "anzeige3" 0 15 80 0
pat: dull 3 "anzeige4" 0 170 80 0
attr 199
clac 0
elas 0
fric 100
perm 60
accg 5
mvto 3800 8900
cmra 3800 8900 0
endm
* Ende Install
* Aktivierung 1
scrp 2 21 30000 1
part 1
anim [2 3 4 5   255]
clac 1
endm
* Ativierung 2
scrp 2 21 30000 2
part 2
anim [1 2 3 4 5 4 3 2 1 255]
clac 2
endm
scrp 2 21 30000 0
part 3
anim [ 0 1 255]
clac 3
endm
* Hit 
scrp 2 21 30000 3
part 1
pose 0
part 2
pose 0
part 3
pose 0
clac 0
endm
*Deinstall
rscr
enum 2 21 30000
kill targ
next
scrx 2 21 30000 1
scrx 2 21 30000 2
scrx 2 21 30000 0
scrx 2 21 30000 3


Dies Beispiel ist Analog zum Obigem. Aber die Position ist in dem Test Metaroom, beim ersten Klick, vertikaler Balken , dann horizontaler Balken, dann blinkender Balken und dann Ausgangsposition. Ferner sollten so wenig wie möglich andere Agenten geladen sein. Falls script 30000 schon belegt ist, bitte andere Nummer verwenden