XSE Scripting

Wir sammeln alle Infos der Bonusepisode von Pokémon Karmesin und Purpur für euch!

Zu der Infoseite von „Die Mo-Mo-Manie“
  • HINWEIS: Der Originale Imagehoster existiert leider nicht mehr. Daher ist es uns leider nicht mehr möglich die originalen Bilder wiederherzustellen und in das Tutorial einzufügen.



    XSE Tutorial by pilo11


    Inhaltsverzeichnis:
    1. Einführung/ Funktionen
    2. Text - Script
    2.1 callstd Extras
    3. Giveitem/Pokemon/Egg - Script
    3.1 Flag
    3.2 Giveegg
    4. AdvanceMap Script einfügen
    5. Applymovement - Script
    5.1 Besondere Movements
    6. Trainer/ Kampf - Script
    6.1 Trainerbattle 0
    6.2 Trainerbattle 1
    6.3 AdvanceMap und A-Trainer
    6.4 Besondere Trainer - Scripts
    7. Sonstige
    7.1 Setmaptile
    7.2 Tür - Scripts/ Warp
    7.3 Wildbattle
    7.4 Wetter - Scripts
    7.5 Pokemart
    7.6 Hidesprite/ Showsprite
    7.7 Erdbeben
    7.8 Countpokemon
    7.9 Buffer - Scripts
    7.9.1 Bufferpokemon
    7.9.2 Bufferfirstpokemon
    7.9.3 Bufferitem
    7.9.4 Bufferattack
    7.9.5 Buffernumber
    8. Extras/ Listen
    9. Nachwort
    10. Credits


    1. Einführung/ Funktionen


    Benötigte Programme:
    eXtreme Script Editor
    AdvanceMap (Ich glaube das haben alle :lol: )


    Anfangs öffnen wir XSE


    Nun gibt es verschiedene Funktionen:
    Wir öffnen am besten mal eine Rom:
    Datei -> Öffnen


    Dann können wir einen Script eingeben und wenn wir ihn in die Rom (brennen) wollen,
    drücken wir einfach auf diese Taste

    [Originale Grafik nicht mehr darstellbar: siehe Hinweis am Anfang]


    Dann erscheint das und mit der Taste kopieren, kann man sogar das Offset in die Zwischenablage kopieren, toll oder?


    Rechts kann man sogar Dezimalzahlen in Hexzahlen umwandeln und anders herum, weil auch bei givepokemon Befehlen nicht wie in Poke(t)script givepokemon 11 5 0 im Dezimalsystem steht, sondern in Hex -> givepokemon 0xB 0x5 0x0 0x0 0x0 0x0


    Hier kann man auch Scripts dekompilieren. Dazu muss man nur das Offset des Scriptes angeben oder man lädt sich den XSE.exe als Script-Editor in AdvanceMap und drückt dann entsprechend auf Script-Öffnen


    AdvanceMap


    Wer mehr Fragen zu den Funktionen hat, kann das gerne Posten! Oder per PN!




    2. Text - Script:


    So nun haben wir die einfachste Variante um einen Script zu schreiben. Einen ganz normalen Text - Script:
    Beginnen wir mit den ersten Befehlen, die erklärt werden


    Code
    #dynamic 0x800000#org @mainlockfaceplayermsgbox @textcallstd 0x6releaseend #org @text= Hallo, ich heiße Nils und mache \ndieses Tutorial...


    Code
    #dynamic 0x800000


    Der Befehl sucht ein Offset mit "FF"s ab dem Offset 800000, die genug Bytegröße haben, dass er auch ja nicht andere Offsets/ Bytes überschreibt, passiert gar nicht so selten!


    Code
    #org @main


    Das "main" muss nicht sein, man hätte auch start oder so nehmen können. Der Befehl leitet den Start des Scripts ein.


    Code
    lock


    lock bringt den Player zum Stehen und er kann sich nicht mehr bewegen.


    Code
    faceplayer


    faceplayer sorgt dafür, dass der andere, den man anspricht, sich zu dem Player umdreht.


    Code
    msgbox @text


    msgbox öffnet eine Textbox, wo etwas hinein geschrieben werden kann. Wird häufig beim Sprechen mit einer Person benutzt.


    Code
    msgbox @text 0x6


    Den Befehl benutzt man bei der neuen XSE-Version. 0x6 ist ein callstd-Befehl. Aber hier wird er nicht gebrauch, er ist im msgbox mit drin.


    Code
    callstd


    Nur bei der alten Version, des XSE.
    callstd öffnet verschiedene Arten von Textboxen. Hier eine Kleine Liste:


    Code
    release


    Lässt den Player wieder gehen.


    Code
    end


    Beendet den Script.


    Code
    #org @text=


    Damit ihr auch was schreiben könnt, müsst ihr auch einen Befehl nach dem end nehmen: #org @text (oder was ihr bei msgbox @? genommen habt) dann Absatz
    = Bla Bla Bla...


    Es gibt aber auch noch verschiedene Farben, womit man die Schrift schöner machen kann!
    Dazu seht euch am besten das Tut von driver an:
    Hier


    Auch wenn es mit Poke(t)script-Befehlen ergänzt wurde übertragt einfach nur das "\c\..." Also womit man die Farben ändert.


    Das war ein normales Beispiel zu einem callstd 0x6 Script, aber wie funktioniert er mit callstd 0x5, also Ja/Nein Box?


    2.1 callstd Extras:


    Das klären wir anhand dieses Beispieles:

    Code
    #dynamic 0x800000#org @mainlockfaceplayermsgbox @textcallstd 0x5Compare LASTRESULT 0x1if b_true goto @jacompare LASTRESULT 0x0if b_true goto @nein#org @jalockfaceplayermsgbox @text2callstd 0x6releaseend#org @neinlockfaceplayermsgbox @text3callstd 0x6releaseend#org @text= Möchtest du mich begleiten?#org @text2= Das finde ich toll.#org @text3= Das ist schade


    Code
    Compare LASTRESULT 0x1


    Dieser Befehl kontrolliert, was er eben gerade gedrückt hat, in diesem Fall kontrolliert er, ob man ja gedrückt hat, weil am Ende 0x1 steht.


    Code
    Compare LASTRESULT 0x0


    Der kontrolliert nein, weil da 0x0 steht.


    Code
    if b_true goto @ja


    Dieser befehl muss unter "compare LASTRESULT 0x1", weil er sagt, wenn ja gedrückt wurde, dann geh zu Script 1.


    Code
    if b_true goto @nein


    Dieser Befehl muss unter "Compare LASTRESULT 0x0", weil er sagt, wenn nein gedrückt wurde, dann geh zu Script 2.


    In diesem Fall spaltet sich der Script also. Das kennst man auch von Programmen oder vom Essen.
    Falls Spinat = Bäääääähhhhhh. Und kotz.
    Falls Pommes = Mmmmhhhhhhh. Und genieß.
    xD
    Wichtig ist nur, dass man bei #org @ja oder #org @nein einen neuen Script anfängt wie bei #org @main (start, ...)


    Ein kleines Erkenntnis habe ich auch gemacht, z. B., dass man nach 35 Buchstaben oder Zahlen oder so, besser ein \n setzt um in die nächste Zeile zu gelangen und wenn dann wieder 35 Buchstaben oder Zahlen kommen nicht wieder \n sondern \p kommen sollte! WICHTIG!
    Aber nach den 35 Buchstaben, Zahlen wieder \n dann wieder \p usw...
    Mein Erkenntnis war aber das mit den 35 Buchstaben oder Zahlen xD.



    Ich glaube das wars auch schon zu den Text - Scripts


    Für besondere Fragen, PN an mich...


    3. Giveitem/ Pokémon - Script


    Ich werde hier einfach wieder einen typischen Script hinzufügen, wo ich dann die Befehler erklaren werde:


    Code
    #dynamic 0x800000#org @mainlockfaceplayermsgbox @textcallstd 0x4giveitem 0xD 0x1 0x0 0x0 0x0 0x0releaseend#org @text= Hier nimm einen Trank.


    Code
    giveitem 0xItem 0xAnzahl 0x0 0x0 0x0


    Ok, ich glaube, das klärt den neuen Befehl. Das einzige, was ich selber nicht weiß, ist, dass am Ende vier mal 0x0 steht, aber es muss sein, sonst geht es nicht...
    Im giveitem-Befehl ist die fanfare + Du erhältst... mit eingebaut.


    Hier eine List von mir:


    So schwer ist das doch gar nicht. Aber es gibt ein Problem, wenn wir die Person nochmal ansprechen, kriegen wir das Item nochmal, hmm...
    Hier kommen wir zum Unterthema
    3.1 Flag:


    Was soll das sein? Flag...
    Flag kann man sich wie eine Fahne vorstellen. Man hisst eine Fahne und der Script weiß, aha jetzt muss ich das machen.


    Es gibt 3 Befehle von Flag
    1. setflag
    2. clearflag
    3. checkflag


    Beginnen wir mit 1. setflag und 3. checkflag
    Dazu nehmen wir unser Item Beispiel:

    Code
    #dynamic 0x800000#org @mainlockfaceplayercheckflag 0x200if b_true goto @donemsgbox @textcallstd 0x4giveitem 0xD 0x1 0x0 0x0 0x0 0x0setflag 0x200releaseend#org @text= Hier nimm einen Trank.#org @done lockfaceplayermsgbox @text2callstd 0x6releaseend#org @text2= Hey, du hast schon einen Trank!


    Gehen wir das wieder gemeinsam durch:


    Code
    checkflag


    Dieser Befehl prüft, ob die Fahne 200 gehisst ist.


    Code
    if b_true goto @done


    Dieser Befehl ist uns schon mal begegnet. Er leitet uns zu einem neuen Script, wenn 200 schon gehisst wurde, nämlich zu #org @done.


    Code
    setflag


    Dieser Befehl hisst eine Fahne, sodass er, wenn man ihn ein zweites oder ein drittes oder ein noch öfteres mal anklickt, sagen wird, dass man schonmal was bekommen hat.


    Ich glaube zu

    Code
    clearflag

    kann ich auch so etwas sagen:
    Dieser Befehl macht die Fahne wieder start bereit. Also wenn z.B. eine andere Person den Script mit einem clearflag 0x200 beinhaltet, kann man wieder einen Trank bekommen.
    Das war ein Beispiel für einen Flag-Befehl. Man benutzt die Flags nur einmal. Man darf aber keine X-Beliebigen nehmen, sondern nur Freie! Hier eine Liste mit Flags, die es gibt und wo man das bekommt. Freie gibts ab 200 bis 2A0 und 600 bis 6A0, aber da wäre ich vorsichtig.
    Tipp: Macht euch ne Liste mit den Flags, die ihr benutzt und wo ihr sie benutzt!
    Liste: Pokescript Scripting Tutorial
    In diesem Tut findet ihr alle Flags in verschiedenen Editionen.


    Nun kommen wir zum Givepokemon - Befehl, der ja dem Give - Item Befehl ziemlich ähnlich ist.


    Hier nun wieder unser Beispiel:


    Code
    #dynamic 0x800000#org @mainlockfaceplayerfanfare 0x13Emsgbox @textcallstd 0x6waitfanfaregivepokemon 0x1 0x64 0xD 0x0 0x0 0x0releaseend#org @text= [Player] hat ein Bisasam erhalten.


    So gehen wir es durch:


    Code
    fanfare 0x13E


    Dieser Befehl lässt einen Sound laufen, der in dem Giveitem - Script mit intigriert war, aber hier muss er selbst eingefügt werden!


    Code
    waitfanfare


    Dieser Befehl lässt den Script erst fortfahren, wenn der Sound fertig abgespielt wurde. Man schreibt ihn hinter dem msgbox - Script, damit der Text + dem Sound gleichzeitig laufen und nicht erst der Sound und dann das "Du erhältst ein Bisasam".


    Code
    givepokemon 0xPokemon 0xAnzahl 0xItem 0x0 0x0 0x0


    Auch hier muss man wieder drei Nullen dahinter hängen, aber dem Pokemon kann man hier auch ein Item geben, die aus der Item-Liste.


    Liste:
    [TUT] Scripten via POKéScript
    Da bekommt ihr eine Liste mit Pokemon, leider Englisch, hatte keine Zeit ein deutsche zu erstellen, aber die mit den Items hatte ich schon vor Jahren gemacht...


    3.2 Giveegg:


    Code
    #dynamic 0x800000#org @mainlockfaceplayergiveegg 0x1fanfare 0x13Emsgbox @text 0x6waitfanfarereleaseend#org @text= [player] hat ein Ei mit \nBISASAM erhalten.


    Also, es ist ganz einfach:

    Code
    giveegg 0xPokemon-Nr. (in Hex)


    Der Befehl gibt dem player ein Ei, in dem Bisasam ist.


    Aber was im allgemeinen bei givepokemon und giveegg fehlt sind die Prüfer! Lest einfach bei 7.8 weiter, wenn ihr das wissen wollt.


    Das wars auch schon über Item/ Pokemon/ Egg - Scripts


    Für besondere Fragen, PN an mich...


    4. AdvanceMap Script einfügen


    Es ist ja auch wichtig Scripts mit AdvanceMap zu den Leuten zu bringen. Das ist einfach:


    Erstellen wir einfach eine neue Person in AdvanceMap und geben wir ihr das Offset vom Script


    Nun kann man die Person ansprechen und der Script startet sofort.
    Aber manchmal möchte man, dass ein Script losgeht, wenn man zu einer bestimmten Stelle geht. Wie das geht beschreibe ich hier kurz:


    Erst erstellen wir neue Events auf der Map.


    Wir erhöhen einfach die Anzahl der Scripts um einen und drücken auf Events ändern. Dann haben wir dieses Event (grünes S). Es erscheint genau wie auch bei allen anderen Events am Anfang ganz oben links in der Map. Wir verschieben es da hin, wo der Script starten soll, wenn man auf das Feld kommt.


    Nun kommt die Flag, ohne die kann man den Script nicht starten, aber hier ist das nicht 200 oder so sondern alles unter 4050, sind meine ich Frei. Hier würde ich auch wieder 'ne Liste mit den Flags machen. Dann fehlt natürlich noch das Offset.


    Ich habe noch eine Person hinzugefügt, die einen Applymovement - Script hat, also dazu kommen wir aber später. Jetzt habe wir es geschafft, nur wie soll die Person zu dir oder du zu ihr. Das wird später geklärt. Jetzt sollten wir aber vorher noch einen Script unten einsetzen.


    Es gibt da den Befehl setvar. Mit dem kann man verhindern, dass der Script ein zweites mal startet, wenn man die Fläche betritt, also einfach:


    Code
    setvar 0xFlag 0x1


    0x1 ist ein Ersatz für setflag, aber in diesem Fall darf man kein setflag benutzen, sondern nur setvar!


    Das war ein Script mit einer bestimmten Stelle, es geht aber auch so, dass, wenn man die Map gerade betritt, der Script sofort beginnt. Den nennt man Levelscript.


    Tut


    Für besondere Fragen, PN an mich...


    5. Applymovement - Script


    Jetzt kommen wir zu einem Teil, der sehr wichtig ist und oft verwendet wird!


    Hier wieder ein Beispiel:

    Code
    #dynamic 0x800000#org @mainlockfaceplayerapplymovement 0x1 @gowaitmovement 0x0msgbox @textcallstd 0x6releaseend#org @text= Blabla#org @go#raw 0x13#raw 0x13#raw 0x13#raw 0x13#raw 0xFE


    Gehen wir es am besten einfach gemeinsam durch!


    Code
    applymovement 0xPersonennummer @go


    Mit diesem Befehl lässt man die Person 1 in der Map laufen. Wie kriege ich raus, ob das 1 oder 2 oder... ist? So.


    Code
    waitmovement 0x0


    Dieser Befehl wartet darauf, dass der Applymovement-Befehl beendet wurde und führt dann den Script fort. (Danke an Driver.)


    Code
    #raw 0x13


    Dieser Befehl bestimmt, wohin die Person geht. In diesem Fall 0x13 nach rechts in normaler Geschwindigkeit. Wichtig! Am Ende des Movements mit #raw 0x13 usw. immer raw 0xFE!!! Sonst stürzt der Script ab.


    Hier eine Liste von den Movements aus Feuerrot:
    Ich habe die Liste aus dem Script-Tut von thethethethe



    Und die Liste für Rubin/Saphir/Smaragd:
    Auch aus dem Tut von thethethethe


    Also wir haben einen grünen S Script in AdvanceMap mit einer Var-Nummer als Flag und eine Pers. mit einer Pers.-Nr. Dann müssen wir nur noch einen Script damit machen. Was kann man dazu noch groß sagen.


    5.1 Besondere Movements


    Schön jetzt können wir alles mit Applymovements. Ok, aber wie bewege ich die eigene Figur, also Player? Diese Pers.-Nr. findet man auf der Map nicht...
    Das kann man so sagen:
    Die Pers.-Nr. für den Player ist in jeder Map 0xFF. (Danke an driver!)


    Ok, das wissen wir jetzt auch, aber was ist mit der Ansicht. Es ist möglich die Kamera zu verschieben, also die Ansicht bewegen. Wie geht das? Nicht sehr schwer:


    Code
    #dynamic 0x800000#org @mainlockallspecial 0x113applymovement 0x7F @gopause 0x60applymovement 0x7F @go2pause 0x0special 0x114releaseallend#org @go#raw 0x13#raw 0xFE#org @go3#raw 0x12#raw 0xFE


    Ok

    Code
    lockall


    lockall blockt die Bewegungen aller Personen auf der Map und lock nur die Bewegung der Person die man ansprichst. (Von driver)


    Code
    special 0x113


    Das einzige was es macht ist die Kamera "freizusetzen", damit man sie mit der PersonenNummer 0x7F bewegen kannst. (von Driver)


    Code
    0x7F


    Das ist die Pers.-Nr. der Kamera


    Code
    special 0x114


    Der Befehl neutralisiert special 0x113 wieder.


    Code
    releaseall


    Neutralisiert lockall.


    6. Trainer/ Kampf - Script


    Das ist eine Scriptart, wo es einfache und erweiterte Kämpfe gibt. Der einfache ist, wenn man in die Sichtweite eines Trainers reinläuft beginnt der Kampf, man besiegt ihn und das wars...


    Bei der anderen Scriptart kann man den Script nach dem Kampf weiterlaufen lassen.


    Wir beginnen mit der ersten:


    6.1 Trainerbattle 0


    Ich werde wieder ein Beispiel zeigen und dann weiter erklären:

    Code
    #dynamic 0x800000#org @maintrainerbattle 0x0 0x1 0x0 @before @aftermsgbox @textcallstd 0x6releaseend#org @before= Ich besiege dich...#org @after= Ich habe verloren...#org @text= Du warst einfach zu stark!


    Code
    trainerbattle 0xArt des Kampfes 0xTrainer-ID 0x0 @before @after


    Also die Art des Kampfes habe ich erläutert. Hier ist es ein einfacher Trainer-Kampf, also 0x0. Die Trainer-ID. Das erkläre ich noch und 0x0 als Platzhalter. @before ist das, was am Anfang des Kampfes gesagt wird und @after nach dem Kampf, logisch oder?...


    Was macht das

    Code
    msgbox @text

    da?
    Nachdem der Trainer besiegt wurde, wird der Trainerbattle-Befehl beim Ansprechen übersprungen, also würde die Rom crashen, wenn wir nichts dahinter setzen würden.


    Das wars zum Script, aber wie man das in AdvanceMap einstellt, erkläre ich später.


    6.2 Trainerbattle 1


    Der Script ist nicht viel anders als Trainerbattle 0 seht her:


    Code
    #dynamic 0x800000#org @maintrainerbattle 0x1 0x1 0x0 @before @after @latermsgbox @textcallstd 0x6releaseend#org @before= Ich besiege dich...#org @after= Ich habe verloren...#org @text= Du warst einfach zu stark!#org @laterlockfaceplayermsgbox @text2callstd 0x6releaseend#org @text2= Du hast mich zwar besiegt, \naber du wirst das Ewige Eis \ptrotzdem nicht bekommen...


    Code
    trainerbattle 0x1 0x1 0x0 @before @after @later


    Wie man hier erkennen kann, gibt es noch einen zweiten Script @later, der nach dem Kampf gestartet wird.


    Wie wir sehen können ist der Script nicht viel anders.


    6.3 AdvanceMap und A-Trainer


    Nun kommen wir zum Interessanteren. Zuerst zeige ich was man in AdvanceMap einstellen muss, wenn es Trainerbattle 0 ist.


    Bei Trainer muss ein Haken sein, es muss die Sichtweite angegeben sein, die bestimmt wie viele Schritte man im Kampf gefangen ist, also in dem Bild habe ich die beiden Felder neben dem Trainer markiert um zu zeigen, dass, wenn man nur Sichtweite 1 hätte, der Player ganz rechts einfach vorbei gehen kann. Die Richtung, wo er hinschaut muss man natürlich auch bestimmen.


    Und nun die Einstellungen bei Trainerbattle 1


    Kaum Einstellungen, keine Sichtweite. Da nimmt man meistens einen "Grünen S" - Script (xD). Auf diesem Bild, aber ist das Offset bei der Person. (Danke an Driver!)


    Und nun zu A-Trainer:
    Download


    Wir wollen jetzt also die Trainer-ID und den Trainer bestimmen, welche Pokémon er haben soll usw...
    Fangen wir an.


    Ok. Name dürfte sich von selbst klären. Sex ist das Geschlecht, auch logisch. Bildnummer 72 ist die Bildnummer die zum Trainer passen muss. Man soll ja nicht einen Matrosen Ryu mit einem Team Aqua Bild machen xD. In deutschen Feuerrot Roms ist es hier so, dass man bei Trainer Class einen weiter unten nehmen muss, also wenn da ist:

    Code
    TeenagerMatrosePokm-Trainer


    und ich einen Matrose will, muss ich Pokm-Trainer wählen.
    Bei Money-Rate kann man einstellen, wie viel Geld man bekommen soll. Bei Items nimmt man nur Tränke oder so, damit die Pokémon von Ryu sich auch erholen können. Wenn man aber einen Ball nimmt, ähh, wirft Ryu einen Ball, hmmm, Blödsinn! Schauen wir nun zur Pokémon-Data, aber vorher "Save"


    Ok, hier kann man Pokémon auswählen, alles wunderbar. Beispiel: Ich erhöhe die Zahl der Pokémon bei Pokémon Amount wähle fröhlich meine Pokémon und plötzlich kann er nicht abspeichern. Hier brauchen wir einen Re-Point. Dazu drücken wir Repoint und machen das:


    [Originale Grafik nicht mehr darstellbar. Siehe Hinweis oben]


    Falls der OK-Button nicht frei wird, ist zu wenig Platz in dem Offset, also müssen wir per Hex-Editor nach freien Offsets suchen. Denkt dran nicht nach 00 sondern FF.


    Ich hoffe, dass ihr es Verstanden habt. Die Trainer-ID steht bei Trainer Selection links neben dem Trainer. Man kann auch PET benutzen, aber damit hatte ich oft Probleme!


    6.4 Besondere Trainer - Scripts


    OK, dann mal los:

    Code
    #dynamic 0x800000#org @mainchecktrainerflag 0x002compare 0x800D 0x1if b_true goto @donemsgbox @text 0x6releaseend#org @text= Was du hast noch nicht \ngegen HANS gekämpft? \pDann solltest du das tun!#org @donemsgbox @text2 0x6releaseend#org @text= Du hast HANS besiegt, Super!


    Gehen wir das einfach mal durch!


    Code
    checktrainerflag 0xTrainer-ID


    Prüft, ob man schon gegen einen TRAINER gekämpft hat.


    Code
    compare 0x800D 0x1


    Das ist dasselbe wie compare LASTRESULT 0x1. Das ist nur eine andere Schreibweise.


    Nächster Befehl:


    Code
    #dynamic 0x800000#org @maintrainerbattle 0x0 0x002 0x0 @before @after @latermsgbox @text 0x5compare 0x800D 0x1if b_true goto @jacompare 0x800D 0x0if b_true goto @neinreleaseend#org @before= Ich besiege dich...#org @after= Ich habe verloren...#org @text= Willst du nochmal kämpfen?#org @neinfaceplayermsgbox @text2 0x6releaseend#org @text2= Dann nicht...#org @jacleartrainerflag 0x002repeattrainerbattlereleaseend


    Gehen wir das nochmal langsam durch!


    Code
    cleartrainerflag 0xTrainer-ID


    Löscht eine Trainerflag, sodass man nochmal gegen den Trainer kämpfen kann.


    Code
    repeattrainerbattle


    Wiederholt den Trainerbattle von eben. Man spart sich einen neuen trainerbattle 0x0 0x002 0x0 @before @after usw.


    Und den letzten:
    Jetzt mal ohne Beispiel.


    Code
    settrainerflag 0xTrainer-ID


    Wenn man z.B. in einer Arena ist und man einem Trainer ausgewichen ist, muss man nach dem Arenaleiterkampf die Flag setzen, damit man nicht gegen den Trainer kämpfen muss, denn man hat ja schon den Orden!


    Das wars zu diesem Thema!


    7. Sonstige


    Hier werde ich ein paar andere Befehle vorstellen.


    7.1 Setmaptile:
    Tja, ok, ich werde mal die Funktion dieses Script-Befehls erklären. Setmaptile ersetzt in der Map z.B. einen Baum mit gewöhnlichem Gras. Beispiel mal wieder (xD):


    Code
    #dynamic 0x800000#org @mainlockfcaeplayermsgbox @textcallstd 0x6setmaptile 0x1 0x0C 0x07 0x0 setmaptile 0x1 0x0D 0x07 0x0setmaptile 0x1 0x0C 0x06 0x0setmaptile 0x1 0x0D 0x06 0x0setmaptile 0x26 0x0C 0x05 0x1setmaptile 0x27 0x0D 0x05 0x1special 0x8Ereleaseend#org @text= Hallo, wir sind der \nMotorsägenvertrieb Müller. \pIch zersäge diesen Baum.


    Ok, gehen wir es langsam durch:


    Code
    setmaptile 0xBlock 0xX-Kordinate 0xY-Kordinate 0xBegehbar?


    ok, Block ist der neue Block, wenn ich den Baum wegmache, nehme ich Rasen als neuen Block. "0xX-Kordinate" Hier schreibt man die X-Kordinate des alten Blockes hin, wo der Block in der Map ersetzt werden soll. "0xY-Kordinate" Das ist der Y-Wert, der den Platz des Blockes angibt. "0xBegehbar?" da gibt es zwei Möglichkeiten. Entweder "0x0" für begehbar oder "0x1" für nicht begehbar.


    Code
    special 0x8E


    Der Befehl aktualisiert die Map im Spiel, sodass der Baum sofort weg ist.


    Nun dazu, wie ich den Block und die X- und Y-Kordinate herausfinde. Dies geht auch mit AdvanceMap!
    Hier ein Bild davon:
    [Blockierte Grafik: http://pilo14.pi.funpic.de/XSE%20Tut/18.jpg]


    Ja das wars auch dazu, ich hoffe, dass ihr alles verstanden habt, falls nicht Post oder PN, wie immer.


    7.2 Tür-Scripts/ Warp:


    Dieser Befehl ist eigentlich ganz simpel. Gehen wir das einfach wie immer durch.


    Code
    #dynamic 0x800000#org @mainlockfaceplayer#raw 0xAC 0x09 0x00 0x0D 0x00#raw AEapplymovement 0x1 @gowaitmovement 0x0applymovement 0xFF @go2waitmovement 0x0#raw 0xAD 0x09 0x00 0x0D 0x00#raw AEsetflag 0x267warp 0x0 0x3 0x48releaseend#org @go#raw 0x11#raw 0x60#raw 0xFE#org @go2#raw 0x12#raw 0x11#raw 0x60#raw 0xFE


    Gehen wir es einfach mal durch.

    Code
    #raw 0xAC 0x09 0x00 0x0D 0x00


    0xAC bereitet das Öffnen einer Tür vor. 0x09 und 0x00 X-Kordinaten, 0x0D und 0x00 Y-Kordinaten der Map.


    Code
    #raw 0xAE


    Führt das Vorbereitete aus.


    Code
    #raw 0xAD 0x09 0x00 0x0D 0x00


    Bereitet das Schließen einer Tür vor.


    Nun noch:

    Code
    warp 0xWarp-Nummer in Hex 0xMap-Bank in Hex 0xMap in Hex


    Der Warp-Befehl bringt den Player in eine andere Map. Hier zum Beispiel in die Warp-Nummer 0 in der Map-Bank 3, in der Map 72 (48 ist Hex). Das ist der normale Warp-Befehl. Wenn man allerdings auf einer bestimmten Stelle in der Map landen soll, nimmt man den sogenannten Warp to Position-Befehl:

    Code
    warp 0xMapbank 0xMap 0xFF 0xX-Kordinat 0xY-Kordinat


    Das erklärt sich glaub ich von selbst.
    Das wars auch schon.


    7.3 Wildbattle:


    Nun kommen wir zu einem recht simplen Befehl, der einen Wild-Pokemon-Kampf enthält, also kämpft man gegen wilde Pokemon xD.


    Ich stelle wieder ein Beispiel rein:

    Code
    #dynamic 0x800000#org @mainlockfaceplayercheckflag 0x200if b_true goto @donemsgbox @textcallstd 0x4cry 0x1 0x0wildbattle 0x1 0x1E 0x0 0x0fadescreen 0x1fadescreen 0x0setflag 0x200releaseend#org @donelockfaceplayermsgbox @textcallstd 0x6releaseend#org @text= Bisa, Bisasam...


    Ok, gehen wir es wieder durch:


    Code
    cry 0xPokemon 0xPlatzhalter


    Ich glaube das erklärt das fast schon. Cry lässt den Pokemon-Schrei eines bestimmten Pokemon ertönen. 0xPokemon, da fügt man einfach das Pokemon ein, das schreien soll ein.


    Code
    wildbattle 0xPokemon 0xLevel 0xItem 0xArt des Kampfes


    Der Befehl startet den Wild-Pokemon-Kampf. 0xLevel, das Level des Pokemon (in Hex), 0xItem, da kann man dem Pokemon ein Item geben.


    Hier eine Liste zu Fadescreen:


    Ich glaube, das ist erklärt!


    7.4 Wetter - Scripts:


    Dieser Befehl ist einfacher, als man sich ihn vorstellt...
    Beginnen wir wieder mit einem Beispiel:


    Code
    #dynamic 0x800000#org @maincheckflag 0x200if b_true goto @donesetweather 0x3doweathersetflag 0x200releaseend#org @donesetweather 0x2doweatherclearflag 0x200releaseend


    Gehen wir das wieder durch:


    Code
    setweather 0xWetterart


    Wie das da steht: Der Befehl bereitet ein Wetter vor.


    Code
    doweather


    Wer ein wenig Englisch kann, müsste hinter diesen Befehl kommen. (Doweather = Machwetter)
    Dieser Befehl startet das vorbereitete Wetter.


    Hier eine Liste mit Wettern:


    7.5 Pokémart:
    Dieser Befehl ist auch ganz simpel. Mit dem Befehl kann man einen Pokémarkt erstellen. In dem Befehl steckt, das "Guten Tag, was möchten sie", die Liste zum Kaufen, "Kaufen, Verkaufen, Tschüssi!". Man muss praktisch nur angeben, was man Kaufen kann.


    Ein Beispiel:

    Code
    #dynamic 0x800000#org @mainlockfaceplayerpokemart @marktreleaseend#org @markt#raw word 0x1#raw word 0x2#raw word 0x3#raw word 0x4#raw word 0x5#raw word 0x6#raw word 0x7#raw word 0x8#raw word 0x9#raw word 0xA#raw word 0xB#raw word 0xC#raw word 0x13#raw word 0x14#raw word 0x0


    Gehen wir die Befehle durch:


    Code
    pokemart @markt


    Dieser Befehl startet den Pokémarkt-Script.


    Code
    #raw word 0xItem


    Hier kann man auswählen, was gekauft werden kann.


    Hier eine Liste mit ein paar Items:


    Ich glaube das wars hierzu.


    7.6 Hide-/ Showsprite:
    Dieser Befehl ist wieder etwas komplexer, aber trotzdem gut zu verstehen.


    Nehmen wir wieder ein Beispiel:

    Code
    #dynamic 0x800000#org @mainlockfaceplayershowsprite 0x2msgbox @textcallstd 0x6hidesprite 0x2releaseend#org @text= Hallo, wie geht's?


    Gehen wir das einfach mal durch:


    Code
    showsprite 0xPers-Nr.


    Dieser Befehl lässt eine Pers. erscheinen, die mit hidesprite schonmal versteckt worden war oder man kann clearflag nehmen, falls man die Pers. entfernt hat mit setflag, und sie mit showsprite nach clearflag wieder erscheinen lassen.


    Code
    hidesprite 0xPers.-Nr.


    Dieser Befehl lässt eine Pers. verschwinden.


    Andere:


    Code
    hidesprite 0x800F


    Dieser Befehl lässt die Pers. verscheinden, die man gerade angesprochen hatte. Eigentlich auch nützlich...


    Das wars auch schon dazu.


    7.7 Erdbeben:
    Dieser Befehl ist simpel und einfach:


    Code
    #dynamic 0x800000#org @mainlockfaceplayerspecial 0x136setvar 0x8004 0xFsetvar 0x8005 0xFsetvar 0x8006 0xFsetvar 0x8007 0xFreleaseend


    Gehen wir es einfach durch:


    Code
    special 0x136


    Der Befehl bereitet das Erdbeben vor.


    Code
    setvar 0x8004 0xF  setvar 0x8005 0xF  setvar 0x8006 0xF  setvar 0x8007 0xF


    Die Befehle starten das Erdbeben und bestimmen die Länge (Zeit) und die Stärke des Erdbebens. Dieses Erdbeben ist sehr stark!
    Man kann die Stärke und die Zeit ändern, aber genaueres weiß ich darüber nicht, aber eigentlich ist es egal. Erdbeben ist Erdbeben.


    Das wars auch schon dazu!


    7.8 Countpokemon:
    Ein sehr nützlicher Befehl:


    Code
    #dynamic 0x800000#org @maincountpokemoncompare 0x800D 0x6if b_true goto @donefanfare 0x13Emsgbox @text 0x6waitfanfaregivepokemon 0x1 0x1 0xD 0x0 0x0 0x0setflag 0x200releaseend#org @text= [player] erhält ein BISASAM!#org @donemsgbox @text2 0x6releaseend#org @text2= Du musst ein Pokemon in \ndie Box bringen!OK, gehen wir das mal durch![code]countpokemon


    Überprüft die Anzahl der Pokemon im Team.


    Code
    compare 0x800D 0xAnzahl der Pokemon


    Hier muss man einfach die Anzahl der Pokemon eingeben, die man haben soll, damit ein Script umgeleitet wird. Z.B. Bei 0x6, wenn man ein Pokemon soll, aber 6 im Team hat, kann man keins dazubekommen. Also leiten wir den Script auf @done um.


    Das wars hierzu.


    7.9 Buffer:
    Es gibt verschiedene Buffer-Befehle. Beginnen wir mit:


    7.9.1 Bufferpokemon


    Beispiel:

    Code
    #dynamic 0x800000#org @mainfaceplayerbufferpokemon 0x00 0x1msgbox @text 0x6releaseend#org @text= Wie geht's denn dir \nund [buffer1]?


    Gehen wir das mal durch:


    Code
    bufferpokemon 0xVariabel 0xPokemon ID (in Hex)


    Dieser Befehl läd das Pokemon bei Pokemon-ID in die Variabel 0x0, also schreibt man in einer Textbox [buffer1], denn dort erscheint der Name des Pokemon, das wir gerade bei bufferpokemon bei der Pers-ID hingeschrieben haben.


    Wenn wir mehrere Pokemon in so ein Buffer laden wollen nehmen wir beim nächsten Mal 0x01 und im Text [buffer2].
    7.9.2 Bufferfirstpokemon


    Beispiel:


    Code
    #dynamic 0x800000#org @mainfaceplayerbufferfirstpokemon 0x00msgbox @text 0x6releaseend#org @text= Wie geht's denn dir \nund [buffer1]?


    Code
    bufferfirstpokemon


    Der Befehl läd das erste Pokemon im Team in den Buffer.


    7.9.3 Bufferitem


    Beispiel:

    Code
    #dynamic 0x800000#org @mainfaceplayerbufferitem 0x00 0x0Dmsgbox @text 0x6releaseend#org @text= Willst du einen \n[buffer1]?


    Code
    bufferitem 0x00 0xItem-Nr. (in Hex)


    Dasgleiche geht auch mit Items.


    7.9.4 Bufferattack


    Beispiel:

    Code
    #dynamic 0x800000#org @mainfaceplayerbufferpokemon 0x00 0x01bufferattack 0x01 0x002msgbox @text 0x6releaseend#org @text= Dein [buffer1] kann kein \n[buffer2] erlernen!


    Code
    bufferattack 0x00 0xAttack-Nr.


    Dasgleiche geht auch mit Attacken. Eine Liste gibt es bei Punkt 8: Extras und Listen.


    7.9.5 Buffernumber


    Beispiel:

    Code
    #dynamic 0x800000#org @mainfaceplayersetvar 0x800D 0x64buffernumber 0x00 0x800Dbufferitem 0x01 0x0Dmsgbox @text 0x6releaseend#org @text= Das Item [buffer2] \nkostet [buffer1] Pokedollar!


    Code
    setvar 0x800D 0xZahl (in Hex)


    Der Befehl läd die Zahl, die man eingibt, in meinem Beispiel 100, in die Variabel 800D.


    Code
    buffernumber 0x00 0x800D


    Der Befehl läd die vorhin geladene Zahl, die in 800D drinsteckt, in den Buffer.


    So schwer war das nicht, aber diese Variabeln und Valuen können eine verwirren, oder? Naja heiter weiter!


    8. Extras/ Listen:


    Hier eine Liste mit Flags, die im Spiel schon benutzt wurden (Feuerrot/Blattgrün):



    Alternativ:
    Hier


    Falls ihr bestimmte Tuts sucht um Ähnliches zu machen, hat Aeonos ein Inhaltsverzeichnis gemacht:
    Hier


    Ein Super XSE Tut, leider Englisch:


    Hier


    Die Attackenliste:


    Das wars zu Extras und Listen, nicht viel, aber etwas.


    9. Nachwort:


    Ich danke allen in RHW/RR, die mich immer wieder unterstützt haben, Tipps zu diesem Tut usw.
    Besonders danke an:
    driver
    red-ex (Gruß nach Italien)
    Agi (Wegen dem Tut, der Anzahl der Zeichen usw.)


    10.Credits:
    diegoisawesome
    HackMew
    Lu-Ho


    Dieses Tut ist von Pilo11 geschrieben und darf nicht ohne meine Erlaubnis kopiert werden. Es ist erlaubt es zu verlinken, aber mit Credits.


    Pilo11 :D

    Immer Logger :P

    2 Mal editiert, zuletzt von Trikeyyy () aus folgendem Grund: siehe Hinweis. Bilder/Links entfernt, die nicht mehr funktionieren.

  • Neinnein, ich bin nicht abgehauen, und meine Kristallkugel habe ich noch ;)
    Ich würde probieren die aktuellste Version von XSE zu verwenden: board.romresources.net/index.php?page=Attachment&attachmentID=7727
    Sollte dies nicht funktionieren wäre der genaue Wortlaut der Fehlermeldung für eventuelle Helfer interessant, wie prime schon sagte...


    ~Sturmvogel

  • 1. Das Tutorial ist schon etwas älter und zum Teil funktionieren die Befehle inzwischen bzw je nach XSE-Version anderst. Drück mal F1 bei den Befehlen, bei denen du Fehler vermutest und schau nach, ob es immer noch passt.


    2. ich bin zwar kein Mod, würde aber doch vermuten, dass dieser Thread $cript&ASM Help besser für deine Frage geeignet wäre. Ggf kann ja jemand mit mehr Rechten diesen und den letzten Post dort hin verschieben.


    3. Damit man den Script sich nicht oben raussuchen muss, könntest du ihn auch einfach noch mal hier in einen code-Tag packen.

  • Zitat

    Bei Wildbattle kommt bei mir nur der fadescreen, kann mir jemand sagen warum der kampf nicht startet?
    Ich habe das Script 1 zu 1 kopiert


    m7x


    Huhu, hast du XSE 1.0.0 oder 1.1.1?


    Für XSE 1.0.0


    Code
    wildbattle 0xParameter blablawaitstate


    Für XSE 1.1.1 nur


    Code
    wildbattle 0xParameter blabla


    XSE 1.1.1 hat nämlich den waitstate Befehl schon im wildbattle integriert ;)

  • Hallo zusammen erstmal danke für den guide sehr gut geschrieben bzw übersetzt danke dafür :)
    Dann hab ich ne frage und zwahr kann ich denn txt/script denn ich geschrieben habe nicht in eine Rbc datei umwandeln habe das dokument gespeichert und dahinter .Rbc und unten die txt datei auf alle daten geendert aber funktioniert bei mir leider nicht ich benutze folgende programme A.map, A.starter, A.trainer und pokescript. Fehlt da noch was oder wieso geht das nicht bitte um hilfe und danke schon mal im voraus :D