Ergebnis 1 bis 6 von 6
  1. #1
    yugi_fan yugi_fan ist offline

    [TUT] Neuer Pokemon TUT

    So ich werde hier mal ein aktuelles TUT zum Pokemeon Hack einfügen. Ja, einfügen. Das ist nicht von mir. Das ist sozusagen ein Zitat aus einem anderen Forum.

    Inhalt
    1. Advance Map
    2. Neue Tiles in Advance Map einfügen
    3. XSE



    Was ihr braucht:
    1. Advance Map:Advance Map

    2. Neus Tiles in Advance Map:
    1. Paint und GraphicsGale (kostenlos)
    2.Adobe Photoshop
    3.Advance Map
    4.evtl. Irfanview

    3. Für XSE:eXtreme Script Editor


    1. Advance Map:
    Advance Map Guide
    Ihr braucht als Erstes Advance Map

    Advance Map 1.92

    Als Zweites brauchen wir nur noch eine Pokemon-Rom.Die Müsst ihr per Google Finden!

    Nun könnt ihr Anfangen.

    Maps Bearbeitn
    Spoiler öffnen



    Geh Daten Infos
    Spoiler öffnen


    Header-Infos
    Spoiler öffnen


    Wilde Pokemon Infos
    Spoiler öffnen


    Event Infos
    Spoiler öffnen
    2. Neue Tiles in AM:
    Schritt 1:
    Öffnet das gewünschte Tile in Paint. Ihr könnt auch eins erstellen. Die Größe ist egal. Geht dann auf Ansicht -> Zoom-> Benutzerdefiniert -> 800%.

    Spoiler öffnen


    Schritt 2:
    Ihr müsst dem Tile einen transparenten Hintergrund hinzufügen. Ich nehme jetzt mal ein Schwarz, das dunkelste Schwarz das es gibt. Klickt zuerst auf den Farbfüller und dann oben auf das dunkelste Schwarz. Jetzt klickt ihr auf den Hintergrund eures Tiles. Wenn ihr fertig seit, speichert euer Tile als .png irgendwo ab, wo ihr es auch findet.

    Spoiler öffnen

    [align=center]
    [align=left]Schritt 3:

    Ihr habt die Wahl zwischen Photoshop und GraphicsGale. Ich empfehle aber ausdrücklich Photoshop zu benutzen. Ich werde aber beide Varianten erklären.

    Photoshop:

    Startet Photoshop und öffnet euer Tile mit STRG+O. Dann geht ihr oben auf Image -> Mode -> Indexed Color.

    Spoiler öffnen


    So, jetzt müsste sich ein Fenster öffnen. Hier werdet ihr (hoffentlich) den Punkt Colors sehen und daneben eine Zahl. Dies ist dia Anzahl der Farben in eurem Tile. Habt ihr weniger oder genau 16 Farben benutzt, habt ihr euch ein wenig Arbeit erspart. Habt ihr mehr 16 Farben benutzt, müsst ihr die Farbanzahl mit Irfanview "herunterschrauben". Das ist leider bei mir der Fall. Klickt nun auf OK. Jetzt geht ihr wieder zu Image -> Mode und dieses Mal geht ihr auf Color Table. Jetzt seht ihr eure Palette für das Tile. Klickt rechts auf Save und speichert es als .ACT-Datei.

    Für alle dessen Tile mehr als 16 Farben hat:
    Spoiler öffnen


    GraphicsGale:
    Diese Methode ist fast unbrauchbar, da durch einen Bug in GraphicsGale die Farben in der Palette dunkler gespeichert werden, als sie sind. Aber wer es trotzdem ausprobieren will:
    Öffnet euer Tile mit GraphicsGaleund klickt oben auf Image -> Count Colors Used.
    Spoiler öffnen


    Nun öffnet sich ein Fenster in dem ihr sehen könnt, wie viele Farben euer Tile hat. Wenn ihr maximal 16 Farben habt, dann habt ihr euch ein wenig Arbeit erspart. Habt ihr aber mehr als 16 Farben benutzt, lest etwas weiter unten weiter. Klickt nun auf den kleinen schwarzen Pfeil im Palettenfenster.
    Spoiler öffnen


    Dann klickt ihr auf Save Pallet und speichert die Palette ab, wo ihr sie findet.

    Für alle dessen Tile mehr als 16 Farben hat:
    Spoiler öffnen


    Schritt 4:

    Startet Advance Map und ladet mit STRG+O eure ROM. Drückt STRG+B auf eurer Tastatur um den Block-Editor zu öffnen.
    In der Mitte seht ihr eine Dropdown-Liste mit den Paletten.

    Spoiler öffnen


    Klickt auf eine der Paletten, die nicht benutzt wird, z.B. Palette 7. Klickt oben auf Paletten -> Aktuelle Palette aus Datei laden. Jetzt ladet eure Tile-Palette, die ihr bei Schritt 3 gespeichert habt. Habt ihr das getan, klickt ihr wieder oben auf Paletten und dann auf Paletten-Änderungen ins ROM schreiben.
    Jetzt müsst ihr euer Tileset speichern und zwar so: Bild -> Tileset 1/Tileset 2 speichern. Welches Tileset ihr speichern wollt, bleibt euch überlassen.

    Schritt 5:

    Startet GraphicsGale, drück STRG+O und öffnet euer zuvor gespeichertes Tileset. Nun öffnet das Raster mit 16x16. Wie das geht, siehe Spoiler.
    Spoiler öffnen


    Jetzt fügt euer Tile in das Tielset ein, indem ihr euer Tile in Paint kopiert und dann mit STRG+V in GraphicsGale einfügt. Nun speichert das neue Tileset ab.

    Schritt 6:

    Geht zurück zum Block-Editor von Aadvance Map. Klickt wieder oben auf Bild -> Tileset 1/Tileset2 laden. Habt ihr das getan, klickt ihr wieder oben auf Paletten und dann auf Paletten-Änderungen ins ROM schreiben.

  2. Anzeige

    [TUT] Neuer Pokemon TUT

    Schau dir mal diesen Bereich an. Dort ist für jeden was dabei!
  3. #2
    yugi_fan yugi_fan ist offline

    AW: [TUT] Neuer Pokemon TUT

    3. XSE
    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 )

    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:


    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 @main
    lock
    faceplayer
    msgbox @text
    callstd 0x6
    release
    end 
    
    #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:
    • Spoiler öffnen


    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 @main
    lock
    faceplayer
    msgbox @text
    callstd 0x5
    Compare LASTRESULT 0x1
    if b_true goto @ja
    compare LASTRESULT 0x0
    if b_true goto @nein
    #org @ja
    lock
    faceplayer
    msgbox @text2
    callstd 0x6
    release
    end
    #org @nein
    lock
    faceplayer
    msgbox @text3
    callstd 0x6
    release
    end
    
    #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 @main
    lock
    faceplayer
    msgbox @text
    callstd 0x4
    giveitem 0xD 0x1 0x0 0x0 0x0 0x0
    release
    end
    
    #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:
    • Spoiler öffnen


    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 @main
    lock
    faceplayer
    checkflag 0x200
    if b_true goto @done
    msgbox @text
    callstd 0x4
    giveitem 0xD 0x1 0x0 0x0 0x0 0x0
    setflag 0x200
    release
    end
    
    #org @text
    = Hier nimm einen Trank.
    
    #org @done 
    lock
    faceplayer
    msgbox @text2
    callstd 0x6
    release
    end
    
    #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 @main
    lock
    faceplayer
    fanfare 0x13E
    msgbox @text
    callstd 0x6
    waitfanfare
    givepokemon 0x1 0x64 0xD 0x0 0x0 0x0
    setflag 0x200
    release
    end
    
    #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 @main
    lock
    faceplayer
    giveegg 0x1
    fanfare 0x13E
    msgbox @text 0x6
    waitfanfare
    release
    end
    
    #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 @main
    lock
    faceplayer
    applymovement 0x1 @go
    waitmovement 0x0
    msgbox @text
    callstd 0x6
    release
    end
    
    #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
    • Spoiler öffnen



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


    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 @main
    lockall
    special 0x113
    applymovement 0x7F @go
    pause 0x60
    applymovement 0x7F @go2
    pause 0x0
    special 0x114
    releaseall
    end
    
    #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 @main
    trainerbattle 0x0 0x1 0x0 @before @after
    msgbox @text
    callstd 0x6
    release
    end
    
    #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 @main
    trainerbattle 0x1 0x1 0x0 @before @after @later
    msgbox @text
    callstd 0x6
    release
    end
    
    #org @before
    = Ich besiege dich...
    
    #org @after
    = Ich habe verloren...
    
    #org @text
    = Du warst einfach zu stark!
    
    #org @later
    lock
    faceplayer
    msgbox @text2
    callstd 0x6
    release
    end
    
    #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:
    Teenager
    Matrose
    Pokm-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:







    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!
    Das wars zu diesem Thema!

    6.4 Besondere Trainer - Scripts

    OK, dann mal los:
    Code:
    #dynamic 0x800000
    
    #org @main
    checktrainerflag 0x002
    compare 0x800D 0x1
    if b_true goto @done
    msgbox @text 0x6
    release
    end
    
    #org @text
    = Was du hast noch nicht \ngegen HANS gekämpft? \pDann solltest du das tun!
    
    #org @done
    msgbox @text2 0x6
    release
    end
    
    #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 @main
    trainerbattle 0x0 0x002 0x0 @before @after @later
    msgbox @text 0x5
    compare 0x800D 0x1
    if b_true goto @ja
    compare 0x800D 0x0
    if b_true goto @nein
    release
    end
    
    #org @before
    = Ich besiege dich...
    
    #org @after
    = Ich habe verloren...
    
    #org @text
    = Willst du nochmal kämpfen?
    
    #org @nein
    faceplayer
    msgbox @text2 0x6
    release
    end
    
    #org @text2
    = Dann nicht...
    
    #org @ja
    cleartrainerflag 0x002
    repeattrainerbattle
    release
    end
    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 @main
    lock
    fcaeplayer
    msgbox @text
    callstd 0x6
    setmaptile 0x1 0x0C 0x07 0x0 
    setmaptile 0x1 0x0D 0x07 0x0
    setmaptile 0x1 0x0C 0x06 0x0
    setmaptile 0x1 0x0D 0x06 0x0
    setmaptile 0x26 0x0C 0x05 0x1
    setmaptile 0x27 0x0D 0x05 0x1
    special 0x8E
    release
    end
    
    #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:


    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 @main
    lock
    faceplayer
    #raw 0xAC 0x09 0x00 0x0D 0x00
    #raw AE
    applymovement 0x1 @go
    waitmovement 0x0
    applymovement 0xFF @go2
    waitmovement 0x0
    #raw 0xAD 0x09 0x00 0x0D 0x00
    #raw AE
    setflag 0x267
    warp 0x0 0x3 0x48
    release
    end
    
    #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 @main
    lock
    faceplayer
    checkflag 0x200
    if b_true goto @done
    msgbox @text
    callstd 0x4
    cry 0x1 0x0
    wildbattle 0x1 0x1E 0x0 0x0
    fadescreen 0x1
    fadescreen 0x0
    setflag 0x200
    release
    end
    
    #org @done
    lock
    faceplayer
    msgbox @text
    callstd 0x6
    release
    end
    
    #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:
    Spoiler öffnen


    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 @main
    checkflag 0x200
    if b_true goto @done
    setweather 0x3
    doweather
    setflag 0x200
    release
    end
    
    #org @done
    setweather 0x2
    doweather
    clearflag 0x200
    release
    end
    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:
    Spoiler öffnen


    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 @main
    lock
    faceplayer
    pokemart @markt
    release
    end
    
    #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:
    Spoiler öffnen


    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 @main
    lock
    faceplayer
    showsprite 0x2
    msgbox @text
    callstd 0x6
    hidesprite 0x2
    release
    end
    
    #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 @main
    lock
    faceplayer
    special 0x136
    setvar 0x8004 0xF
    setvar 0x8005 0xF
    setvar 0x8006 0xF
    setvar 0x8007 0xF
    release
    end
    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 @main
    countpokemon
    compare 0x800D 0x6
    if b_true goto @done
    fanfare 0x13E
    msgbox @text 0x6
    waitfanfare
    givepokemon 0x1 0x1 0xD 0x0 0x0 0x0
    setflag 0x200
    release
    end
    
    #org @text
    = [player] erhält ein BISASAM!
    
    #org @done
    msgbox @text2 0x6
    release
    end
    
    #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 @main
    faceplayer
    bufferpokemon 0x00 0x1
    msgbox @text 0x6
    release
    end
    
    #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 @main
    faceplayer
    bufferfirstpokemon 0x00
    msgbox @text 0x6
    release
    end
    
    #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 @main
    faceplayer
    bufferitem 0x00 0x0D
    msgbox @text 0x6
    release
    end
    
    #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 @main
    faceplayer
    bufferpokemon 0x00 0x01
    bufferattack 0x01 0x002
    msgbox @text 0x6
    release
    end
    
    #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 @main
    faceplayer
    setvar 0x800D 0x64
    buffernumber 0x00 0x800D
    bufferitem 0x01 0x0D
    msgbox @text 0x6
    release
    end
    
    #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):

    Anhang 1517

    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:
    Spoiler öffnen


    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


    Pilo11
    So das war.
    Hoffe ich konnt euch helfen

    MfG
    tamilboy

  4. #3
    Mr.S

    AW: [TUT] Neuer Pokemon TUT

    Ist ja schön, dass du dir die "Mühe" mit Copy&Paste gemacht hast, aber wärs nicht ganz nett, zu sagen, wer sich damit wirklich beschäftigt hat?
    Außerdem hättest du auch einfach auf das Original verlinken können. Das wäre auch wesentlich kürzer gewesen.

  5. #4
    Dr. Cox Dr. Cox ist offline
    Avatar von Dr. Cox

    AW: [TUT] Neuer Pokemon TUT

    Was meinst du überhaupt mit neuer? NeuE Pokémon Edition, neueS Pokémon.. Was meinst du? Ich meine nicht es ist falsch, aber was meinst du mit neuer? Oder wars nur ein Tippfehler?

    Jedenfalls sollte man immer Links zum Original geben. Sonst könnte es Beschwerden hageln^^

  6. #5
    GoldSilver GoldSilver ist offline
    Avatar von GoldSilver

    AW: [TUT] Neuer Pokemon TUT

    Das mit der eigenen Poké-Edition klingt verlockend aber ich hab kein Wort von dem ganzen Text verstanden
    und es stimmt den Verfasser sollte man immer angeben

  7. #6
    nolight nolight ist offline
    Avatar von nolight

    AW: [TUT] Neuer Pokemon TUT

    Kann mich Mr. S nur anschließen. Es ist zwar gut gemeint, auf ein fremdes Tutorial hinzuweisen, um anderen zu helfen, dennoch bitte ich dich das mittels Verlinkung (nicht Zitieren!) im Tutorial Thread zu tun.

    Closed und unter Vorbehalt der Löschung.

Ähnliche Themen


  1. Neuer Computer oder nur Neuer Prozessor: Hey Leute, und schon wieder stellt sich mir eine Frage in den Weg. Soll ich mir einen neuen PC oder nur einen neuen Prozessor kaufen. Mein...

  2. Neuer Zelda und neuer Mario Titel BESTÄTIGT!!: Die Mitteilung kommt etwas spät, sry. War nich da.... xD Endlich! Die Nachricht auf die wir uns solange gefreut haben ist nun endlich da! Vorhin...

  3. Pokemon Diamnat AR code neuer nickname: So wollt mal fragen ob jmd ein AcitionReplay code für diamant hat wo mann sein namen ändern kann , falls namen schon vorgeben sind als beispiel...

  4. pokemon mystery doungeon ( oder wie es geschrieben wird ) team rot pokemon freunde: also ich habe mir pokemon team rot geholt hab mir solche "freunschafts orte" geholt und geguckt welche pokemon ich da kriegen kann. die hab ich dann...

  5. Suche alle Legends und starke pokemon lv 90-100! Biete: Ich klone für euch Pokemon!: Hey Leutz! Richtig gehört Ich suche wie immer Legenäre Pokemon und starke lv 90.100! Als gegenleistung klne ich euch jedes Pokemon! PS: Weist mich...