$cript&ASM Help

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

Zu der Infoseite von „Die Mo-Mo-Manie“
  • Schmeiß am anfang noch ein lock hin(ist ja wirklich sinnfrei sonst)
    Wenn es NICHT funktioniert, ersetze den Trainer Befehl mit: trainerbattle 0x1 0x138 @before @after @later
    Kann sein dass er den nop nicht mehr verträgt, ich kann es nicht genau sagen ;)


    ~Sturmvogel

  • Yay, mir fällt was auf, was SBird nicht auffällt!
    Aber im Ernst: Der @later Pointer zeigt nicht auf einen Text, sondern einen Code-Block, z.B.

    Code
    #org @later
    msgbox @later_text 0x6
    // bspw. Setflag für Orden oder ähnliches
    end
    
    
    #org @later_text
    = ???


    Den restlichen Script habe ich mir nicht angeschaut und - falls notwendig - entsprechend NICHT berichtigt. So sollte aber zumindest der trainerbattle-Befehl gescheit funktionieren.

    [tabmenu][tab=YT-Channel]DarkTekHacks
    In Bearbeitung: Scripting Tutorial #001 - Grundlagen zu Events
    Ich habe im Moment keine Zeit für Tutorials, sorry.
    [tab=dA-Account]TheDarkShark
    Ab sofort wird immer, wenn ich was sehenswertes mache, hochgeladen![/tabmenu]

    Einmal editiert, zuletzt von Darkshark ()

  • Bräuchte mal Hilfe.
    Ich will, das sich eine Person auf mich bewegt, mir etwas sagt, mich nach unten drückt und dann wieder an seine Ausgangspoisition geht.
    Jedoch hängt sich daraufhin die Rom auf.


  • lock vor checkflag...
    faceplayer dürfte nur dann benötigt werden, wenn der Spieler einen NPC anspricht, jedoch nicht wenn das durch ein Script-Feld ausgelöst wird.
    msgbox und callstd kannst du zusammen fassen, aber das sollte eigentlich keine Probleme bereiten.
    Nach dem Applymovements fehlen noch die "Applymovement end"-Befehle (=#raw 0xFE oder so...).

  • Funktioniert noch immer nicht wirklich.



  • Wozu haben Trigger-Events denn die tolle Variablen-Funktion, wenn man sie nicht nutzt? ;)
    Lass checkflag raus und setze anstatt der Flag die Trigger-Variable auf 0x1. Wenn du bei AdvanceMap also bei Var-Nummer beispielsweise 0x4050 eingibst, bei Var-Wert 0x0; anstatt setflag 0x201 einfach setvar 0x4050 0x1 benutzen. Bin mir nicht sicher, ob die Flag-Befehle bei Trigger-Events anders funktionieren, aber sonst fällt mir nichts auf.
    Ich würde an deiner Stelle das weitmovement 0x0 in Zeile 11 weglassen, dann sieht es eher danach aus, dass der Spieler weggedrückt wird, daran sollte sich der Script allerdings nicht aufhängen.
    Edit: Ach ja, ich bin mir nicht sicher, ob diese Konstruktion


    msgbox @text
    callstd 0x6


    immer noch unterstützt wird, versuche lieber


    msgbox @text 0x6


    mfg, Darkshark

    [tabmenu][tab=YT-Channel]DarkTekHacks
    In Bearbeitung: Scripting Tutorial #001 - Grundlagen zu Events
    Ich habe im Moment keine Zeit für Tutorials, sorry.
    [tab=dA-Account]TheDarkShark
    Ab sofort wird immer, wenn ich was sehenswertes mache, hochgeladen![/tabmenu]

  • So, der Doppel-Post tut mir Leid, aber da mein letzter Post ja nun einen Monat her ist, dachte ich, ein Edit würde unbemerkt bleiben. Außerdem scheint SBird momentan im Urlaub zu sein :P benötige ich diesmal Hilfe, anstatt zu helfen. ACHTUNG: es folgt eine Menge Text!


    Ich arbeite jetzt schon seit längerem mit ASM um mir das Scripten zu erleichtern (erweiterte Variablen-Zugriffe etc. ), aber ich dachte mir, ich versuche mich mal an einem richtigen Code-Hack. In meinem Hack benutze ich für Signposts (dementsprechend muss ich nicht mehr sagen, dass ich Feuerrot hacke, oder? ) und die normale Textbox die gleiche Grafik, nur mit verschiedenen Paletten. Um eine zweite Text-Box mit einer anderen Grafik und Palette anderweitig nutzen zu können, will ich die Routine hacken, die die Palette für die Text-Boxen lädt, so dass basierend auf der Variable 0x8000 (RAM-Offset = 0x020270B6 + [0x8000 * 2] = 0x20370B6) das Paletten-Offset aus einem Header geladen wird. Eine Sub-Routine zu schreiben war nicht schwierig (Variable laden, mit 4 multiplizieren, zum Header-Offset hinzu addieren und mit swi 0xB rüber kopieren). Die Text-Box benutzt übrigens die BG-Palette 15 (PRAM Offset = 0x050001E0), diese wird vom Offset 0x020375F8 geladen. Also einen Break Point on Write auf besagtes Offset und da hab ich die Routine (Das Spiel stoppt bei Zeile 17) :

    Code
    081e7a2c  8001 strh r1, [r0, #0x0]081e7a2e  0000 lsl r0, r0, #0x00081e7a30  0120 lsl r0, r4, #0x04081e7a32  0400 lsl r0, r0, #0x10081e7a34  494e ldr r1, [$081e7b70] (=0c3846a2)081e7a36  0000 lsl r0, r0, #0x00081e7a38  0257 lsl r7, r2, #0x09081e7a3a  0000 lsl r0, r0, #0x00081e7a3c  0128 lsl r0, r5, #0x04081e7a3e  0400 lsl r0, r0, #0x10081e7a40  df0a swi $0a081e7a42  4770 bx lr081e7a44  df0e swi $0e081e7a46  4770 bx lr081e7a48  df0c swi $0c081e7a4a  4770 bx lr081e7a4c  df0b swi $0b081e7a4e  4770 bx lr081e7a50  df06 swi $06081e7a52  4770 bx lr


    Achja, hier noch die Register:

    Code
    Breakpoint (on write) address 020377d8 old:532e new:532e
    R00=084711dc R04=020377d8 R08=00000000 R12=0841f504
    R01=020377d8 R05=00000010 R09=00000000 R13=03007dd8
    R02=00000010 R06=084711dc R10=00000000 R14=08070379
    R03=00000000 R07=03004030 R11=00000000 R15=081e7a50
    CPSR=0000003f (......T Mode: 1f)
    081e7a4c  df0b swi $0b
    > 081e7a4e  4770 bx lr
    081e7a50  df06 swi $06


    Mein Problem ist: Ich habe das noch nie gemacht - ich weiß nicht, welche Teile des Codes ich unbedacht weglassen bzw. umschreiben kann, um auf meine Sub-Routine zu springen. Natürlich weiß ich, dass ich vor allem Zeile 17 löschen darf, da dort die Palette geladen wird, aber 2 Bytes reichen ja nicht für einen Branch zur Sub-Routine.
    Außerdem traue ich dem Code in Zeile 2 bis 10 nicht. Ich bin beim Disassemblieren vorsichtshalber 0x20 Bytes zurückgegangen, wie kann ich sicher sein, dass es sich wirklich um Code handelt bzw. dass der Code zur gleichen Routine gehört? Ich verstehe die Struktur des Codes allgemein nicht, zuerst so viele scheinbar wahrlose lsl-Befehle, danach immer Abwechselnd verschiedene swi Funktionen und bx lr Befehle.


    Ich wäre wirklich sehr, sehr dankbar für Hilfe jeder Art. Auch wenn ich nicht sicher bin, ob ich mit solchen Fragen lieber ins RHR wechseln sollte...


    mfg Darkshark

    [tabmenu][tab=YT-Channel]DarkTekHacks
    In Bearbeitung: Scripting Tutorial #001 - Grundlagen zu Events
    Ich habe im Moment keine Zeit für Tutorials, sorry.
    [tab=dA-Account]TheDarkShark
    Ab sofort wird immer, wenn ich was sehenswertes mache, hochgeladen![/tabmenu]

    Einmal editiert, zuletzt von Darkshark () aus folgendem Grund: Habe mal was evtl. wichtiges hinzugefügt.

  • höhöhö, SBird ist weg und damit bin ich wohl auch eine der wenigen hier aktiven Personen, die dir diese Frage beantworten kann :>


    Also, das Schlüsselwort ist der Befehl "n" (wenn ich es richtig im kopf hab :P) n wie next läd den nächsten befehl und führ auch jumps aus.


    Nun zur Routine:
    du kannst eigentlich alles ignorieren, bis auf

    Code
    081e7a4a  4770 bx lr
    081e7a4c  df0b swi $0b
    081e7a4e  4770 bx lr


    ein bx ist, wie du wissen solltest, ein jump der immer ausgeführt werden muss, daher muss die Routine direkt an 081e7a4c angesprungen werden. da du über ein bx lr zurück springst muss es sich auch um einen bl-jump handeln, mit dem die beiden Befehle angesprungen werden. Insgesammt hast du also 8 Bytes Platz eine Jumproutine zu schreiben, was zwar gehen würde, aber wegen diversen Gründen nicht schön und je nach Beschaffenheit des Umfeldes in der ROM auch nicht gerade einfach sein kann. Auch lassen solche Routinen darauf schließen, das sie öffters angesprungen werden und nicht nur von einem Befehl, weshalb du es auch generell einfach lassen solltest an diesem bereich herrum zu spielen.


    Wir benutzten also den oben genannten Befehl n um solange weiter zu gehen, bis wir wieder auf der standart Routine sind (ein oder zwei mal n, jenachdem ob du schon bei bx lr oder noch bei der swi bist), überprüfen, ob vor dem Zielopcode des "bx lr"-Opcodes einen bl jump oder generell einen Jump auf das Offset 0x081e7a4c bzw 0x081e7a4d haben und haben damit unsere Routine.


    Hier kannst du dich dann austoben und rum scripten, also z.B. eine "ldr r0, [irgdwas]; bx r0; [irgendwas]"-Routine schreiben, um zu jumpen.


    PS: in RHR würde man dir auch nicht unbedingt um so viel schneller helfen, da dort auch nur ein paar Leute mehr ASM können als hier und davon auch nur wirklich driver aktiv ist... (neben SBird und mir)

  • WOW, das ging unerwartet schnell! Ich hatte damit gerechnet eine gute Woche zu warten o.O
    Ich bin ja auch ein Held, dass ich nicht mal auf die Idee komme weiter zu debuggen >< Naja, so lerne ich wohl am ehesten draus xD


    Dass ein bx unkonditional ist (und dementsprechend immer ausgeführt wird) hätte ich eigentlich wissen sollen, und tatsächlich habe ich auch, wie gesagt, vermutet, dass es sich nicht um eine ganze Routine handelt, sondern um mehrere, einzeln angesprungene Teile. Den logischen Zusammenhang nicht zu sehen ist ja fast schon deprimierend D=


    Auf jeden Fall danke ich dir, prime! Ich werde mich morgen mal ran setzen, ist schon einigermaßen spät und ich bin auch gerade erst heim gekommen...


    Edit:
    Ich habe jetzt recht lange vorm VBA-SDL-H gesessen und mir das, was ich für die Haupt-Routine gehalten habe ein wenig angesehen, um zu gucken, welche Befehle ich streichen kann und welche nicht. Auf den Branch zur swi Funktion (s. mein letzter Post) folgen einige returns (?). Besser gesagt Kombinationen aus pop {r0} und bx r0. Ich muss noch ein wenig weiter arbeiten, aber beim debuggen musste ich die Rom ein mal resetten. Aus dem, was ich gesehen habe, schluss folgere ich, dass es sich bei der Routine, die ich umschreiben wollte um meine Sub-Routine anzuspringen, um eine Funktion handelt, die Daten kopiert und dabei das Ziel anhand eines Algorithmus berechnet, den ich nicht ein mal richtig verstehe. Ich werde gleich überprüfen, ob die Routine von verschiedenen Stellen angesprungen wird, oder ob sie sogar nur Teil einer größeren Funktion ist. Dass sie von verschiedenen Stellen angesprungen wird ist klar, denn mit THUMB-Breakpoint auf dem Start der Routine bricht das Spiel sofort ab, wenn man die Rom resettet. Mit THUMB-Breakpoint weiter innerhalb der Routine bricht das Spiel auch ab, wenn man auf ein Script-Feld tritt, oder eine Person anspricht.
    Bevor ich zu meinem aktuellen Vorhaben komme, hier die Routine:

    Ich habe nach dem Breakpoint noch so viel weiter debuggt, weil ich sehen wollte, in wie weit die Register 1 und 2 noch gebraucht werden, allerdings wäre es mit einem konditionalen Branch weiter gegangen und ich war mir nicht ganz sicher wie ich da weiter verfahren sollte, außerdem hatte ich nicht wirklich viel Lust dazu ;>
    Mein Ursprünglicher Plan war, neben dem bl in Zeile 22 auch zwei der add Befehle in Zeile 18 bis 21 zu löschen um Platz für meine ldr-/bx-Kombo zu schaffen. Allerdings war die Rom anderer Meinung und wollte anschließend nicht mehr booten. Ich dachte schon, meine Sub-Routine wäre Schuld, war sie aber nicht, wie sich nach 5 Minuten testen erwiesen hat. Diese Funktion wird also anscheinend auch zum kopieren anderer, wichtigeren Daten, nicht nur von Paletten benutzt.
    Meine momentan einzige Idee ist folgende: Erst einmal mit THUMB-Breakpoint prüfen ob ich recht habe und die Routine wirklich von verschiedenen Orten aus angesprungen wird. Falls ja, die Routine finden, die die Funktion zum Laden der Text-Box-Palette nutzt und eine neue, den Umständen angepasste Sub-Routine schreiben und einbinden.
    Falls tatsächlich jemand den Edit bemerken sollte und eine bessere Idee hat möge er sie bitte anmerken.
    Danke im Vorraus,


    Edit 2:
    Okay, gestern Abend noch ein wenig gearbeitet (ja, jetzt will ich's endlich hinbekommen ><) und verstehe jetzt zumindest die Funktion, die die beiden swi's anspringt. Ich weiß zwar nicht, warum das so furchtbat inkonsequent gelöst wurde, aber sei's drum.
    Aber ich habe mich nicht nur um diese Routine gekümmert, sondern auch ihren Urspung zurück verfolgt. Sie wird von mindestens drei verschiedenen Routinen gecallt, eine davon wird zum laden der Text-Box-Palette, aber auch im Intro genutzt. Also bin ich noch weiter zurück gegangen und habe (glaube ich zumindest oO) die Routine gefunden, die mit den vielen Funktionen ausschließlich die Palette der ganz normalen Text-Box lädt. Ich bin mir nicht sicher, ob ich davon auch ein Text-File auf meiner Festplatte rumfliegen habe, daher erst mal kein Code. Jetzt frage ich mich aber was sinnvoller ist: die Routine bearbeiten, die ausschließlich die Text-Box lädt, oder die Funktion.
    Ich könnte mir vorstellen, die Funktion um zwei Opcodes zu kürzen, einen bl-jump zu platzieren, und eine Mini-Routine zu laden, die zur Sub-Routine springt. Diese müsste ich natürlich um einen Sicherheits-Check erweitern, damit ich nicht zur falschen Zeit die Text-Palette lade. Was ich mir weniger leicht vorstelle, ist die Routine für die Text-Box zu bearbeiten um meine Sub-Routine anzuspringen, da die Routinen, die dazwischen liegen, auch andere Aufgaben übernehmen zu scheinen, die meine Sub-Routine definitiv nicht übernimmt.
    Wobei, während ich das schreibe kommt mir eine weitere Idee, da müsste ich aber erst noch einmal was überprüfen... Ich poste sie später, Ich habe schon genug geschrieben, glaube ich ^^

    [tabmenu][tab=YT-Channel]DarkTekHacks
    In Bearbeitung: Scripting Tutorial #001 - Grundlagen zu Events
    Ich habe im Moment keine Zeit für Tutorials, sorry.
    [tab=dA-Account]TheDarkShark
    Ab sofort wird immer, wenn ich was sehenswertes mache, hochgeladen![/tabmenu]

    2 Mal editiert, zuletzt von Darkshark () aus folgendem Grund: Ich möchte nicht schon wieder Doppel-Posten, SBird würde mir ja bald den Kopf abreißen =D Ich muss wohl hoffen, dass irgendjemand den Edit bemerkt... Kleines Update

  • Hätte eine Frage.
    Da ich gerade mit dem Scripten anfange, und erstmal schauen will, wie das Ganze überhaupt funktioniert, habe ich den ersten Beispielscript von Haro100s "Scripten via Pokescript" Tut kopiert, mit Pokescript geburned und in AM eingefügt.


    Nur das "Text"-Befehl hinter message $ habe ich in 1 geändert, aber das gehört glaube ich eh so. Auf jeden Fall kommt das raus:
    Klick!
    Wieso erscheinen diese komischen Zeichen? Hab's auch ohne Umlaute versucht :/


    Mfg, Adrix.

  • Hallo, ich habe auch ein kleines Problem, hoffe ihr könnt mir helfen.
    Ich habe mir dieses Tutorial angeschaut und mein Code sieht so wie ich das sehe genau so aus, wie der Beispielcode zu Givepokemon.
    Aber irgendwie wird das release igoriert, also ich kann mich nicht mehr bewegen, nachdem da steht: "... Hat ein Loturzel erhalten"


    Ich hoffe, ihr könnt mir helfen
    LG - Nervensäge


    PS: An der Flag kann es eigentlich nicht liegen, ich habe auch schon andere ausprobiert


    Edit: Habe nach einigen Ausprobieren doch schon die Lösung gefunden. Ich musste die Pokémonnummer einfach in Hexadezimal angeben, also 127 statt 295
    Edit²: Danke für die Tipps! Ich habe direkt nach dem Tutorial gearbeitet und da wurden die Sachen alle noch hingeschrieben, aber ich werds mir angewöhnen.

  • Adrix: Ich selbst arbeite zwar nicht mit Pokescript (sondern mit XSE, ist imo besser), aber soweit mein ungeschultes Auge erkennen kann ist der Script an sich richtig. Versuche mal ein Leerzeichen zwischen dem = und deinem Text, ich weiß nicht, ob Pokéscript dort ein Leerzeichen erwartet, oder nicht. Aber allgemein gilt, wenn ein Script nicht richtig funktioniert und kein Fehler ersichtlich ist, einfach noch einmal kompilieren, gerade Pokescript macht gerne mal Fehler (XSE hat das bei mir erst ein mal gemacht, und ich scripte seit fast 2 Jahren mit XSE).


    @Nervensäge: Das 0x steht ja auch für Hexadezimal. Wenn du es weg lässt, kannst du die Nummer auch in Dezimal angeben ;) Ach ja, und bitte gewöhne dir an, msgbox und callstd nicht zu seperieren, schreib lieber msgbox @text 0x5. Außerdem brauchst du nur ein mal lock und faceplayer, das muss nicht vor jede Textbox. Außerdem kannst du statt

    Code
    lockfaceplayermsgbox @text 0x6release


    auch direkt

    Code
    msgbox @text 0x2


    schreiben. Spart sowohl Tipp-Arbeit, als auch Platz im Rom.

    [tabmenu][tab=YT-Channel]DarkTekHacks
    In Bearbeitung: Scripting Tutorial #001 - Grundlagen zu Events
    Ich habe im Moment keine Zeit für Tutorials, sorry.
    [tab=dA-Account]TheDarkShark
    Ab sofort wird immer, wenn ich was sehenswertes mache, hochgeladen![/tabmenu]

  • Erstmal danke für die Antwort. Ich habe nach der ersten Probe noch mehrmals versucht, diese Probescripts einzufügen, allerdings erfolglos. Auch das =-Zeichen habe ich unter Bedacht genommen, jedoch scheint die Leerzeichensetzung meinen Versuchen nach nicht von großer Bedeutung zu sein, zumindest sind mir keine Veränderungen aufgefallen.
    Mein letzer Probescript schaut so aus:


    Nichtmal kurze Englische Texte machen einen Unterschied, aber wieso sollten sie auch, Buchstaben sind Buchstaben, habe nur auf die Umlaute geachtet, da meine Rom Englisch ist.


    Mfg, Adrix.

  • Umlaute sollten eigentlich auch gehen, da in der deuteschen ROM auch zeichen aus anderen Sprachen sind. Höchstens Pokescript kann diese Zeichen nicht.


    Nunja, ich bin auch ein Vertreter vom XSE, da man nicht 2 Programme braucht um das Script in die ROM zu brennen und man auch die ROM decompilieren kann (für jemanden der nicht dynamisch arbeitet ist sowas sehr wichtig, da es sonst zu Problemen kommen kann ^^)


    Wie auch immer, kann es vielleicht sein, das du das $1 und oder die 1 vor dem = weg lassen musst? Im XSE wird es nicht benötigt und zumindest das $1 sieht blöd vor dem "1 = How are you?" aus...

  • Wenn mich meine spärlichen Erinnerungen an meine Zeit mit Pokescript nicht täuschen, ist das alles in Ordnung so. Was mir noch ein viele: hast du irgendwelche dateien im Instalationsordner von Pokescript bzw. Bufrite geöffnet? Soweit ich mich erinnere konnte das bloße öffnen des Ordners sehr fiese Bugs auslösen, bei denen dann nur löschen des Ordners und neu herunter laden geholfen hat. Irgendwas in der Richtung war da, ich glaube Haro hat es zu Beginn seines Tutorials erwähnt...


    @prime-dialga: Ich habe so eben den Code-Hack zum laufen gekriegt, ohne dass mir die Rom abschmiert. Ich habe mich letzt endlich für die vermutlich ineffizienteste aber leichteste Variante entschieden und die Funktion bei 08070350 durch eine komplett andere Routine ersetzt, die nur mit einer ldr / bx Kombination zur Sub-Routine springt. Diese führt zunächst Code aus, der identisch mit dem Code ist, der ursprünglich an 08070350 war. Anstatt zurück zu branchen (pop {r0} / bx r0 Kombination) führt er einige Sicherheits-Checks durch z.B. ob eine Variable eingeschaltet ist, damit ich die dynamischen Paletten auch ausschalten könnte, wenn ich wollte (dieser Teil scheint noch nicht ganz zu funktionieren. Ich werde das morgen mal debuggen :/ ). Sofern die Variable 0x8012 != 0 ist, läuft die Routine weiter. Jetzt wird zunächst das Ziel-Offset mit dem RAM-Offset der Palette verglichen um sicher zu gehen, dass die BG Palette 15 geladen wird. Um sicher zustellen, dass es sich um die Text-Box-Palette handelt vergleiche ich das Source Offset mit dem Rom-Offset der Text-Box-Palette und nur wenn all diese Bedingungen erfüllt sind wird meine ursprüngliche Sub-Routine gecallt. Da ich das Source Offset habe, kann ich die Routine jetzt auch dazu benutzen, verschiedene Paletten für die Signpost-Text Box abzurufen :D
    Danke für deine Start-Hilfe jedenfalls, dafür gibt's später ganz dicke Credits im Hack ;3


    mfg, Darkshark
    OT: Ich kann's einfach nicht lassen, ich schreibe dauernd meterweise Text ohne wirklich brauchbare Informationen zu überbringen ><

    [tabmenu][tab=YT-Channel]DarkTekHacks
    In Bearbeitung: Scripting Tutorial #001 - Grundlagen zu Events
    Ich habe im Moment keine Zeit für Tutorials, sorry.
    [tab=dA-Account]TheDarkShark
    Ab sofort wird immer, wenn ich was sehenswertes mache, hochgeladen![/tabmenu]

  • Hallo allerseits, ich hab letztens mal den Emerald Hack Flora Sky durchgespielt (das Original auf Englisch)
    und mir ist aufgefallen, dass dort Attacken hinzugefügt wurden, die es bei Gen 3 noch nicht gibt (ist auch nicht verwunderlich, gibt ja auch Gen 4 und 5 Pokés).
    Es gibt sogar selbst dazu erfundene Attacken, soweit ich weiß (Shadowflame, FlameOfRage...).
    Natürlich bedingen neue Attacken auch neue Animationen. Dazu wurden Grafiken und Paletten editiert, was ja an sich auch nix "specialiges" ist.
    Aber um NEUE Attacken hinzuzufügen, sprich Attacken >0x162 (Psyschub, IIRC) zu machen, müssen ja komplett neue Sachen hinzugefügt worden sein.
    Da Nintendo ja von Natur aus ziemliche Platzsparer sind, und sich Animationen unter den Attacken wiederholen, hab ich mir gedacht,
    dass jede Teil-Animation irgendwie indiziert sein muss.
    Ein Beispiel:


    Härtner -> Eisenglanz/-; Metallklaue -> Eisenglanz/Klauenattacke; Eisenschweif -> Eisenglanz/Schweifhieb;
    Zermalmklaue -> Klauenattacke/-; Drachenklaue -> Drachenfeuer/Klauenattacke


    Dies ließ mich zum Schluss gelangen, dass jede Attacke aus bis zu zwei Teil-Animationen aufgebaut ist,
    und diese in irgendeiner Art Tabelle (Indiziert oder Zeigertabelle) augelistet sein muss
    (auch mit Zeigern für die Palette, denn der Schild von Lichtschild/Reflektor/Barriere usw. hat je nach Attacke eine unterschiedliche Palette, die Animation an sich ist aber gleich).
    Ich habe das Experiment mit "Drachenstoß" gemacht: Attackennamen-Tabelle verschoben, Attackenwirkungen-Tabelle verschoben
    und die Attacke genauso gemacht wie Drachenstoß, die Attacke war Nummer 0x163. Ich hätte eig. gedacht, dass das Spiel stehenbleibt, wenn ich sie einsetze,
    aber stattdessen stand dann da: "KNAKRACK setzt eine DRA.-Attacke ein". Alles normal nur halt keine Animation.
    Natürlich, wenn ich die Attacke als 0x162 gemacht hätte, also Psyschub ersetzt hätte, wäre die Animation von Psyschub abgespielt worden.
    Also, weiß hier jemand von Euch, ob es diese Tabelle wirklich gibt, und wo ich sie finden kann?
    (Die Tabelle für das Laden der Attackengrafiken und Paletten habe ich schon gefunden, aber wenn man das editiert, ändert das die Animationenfolge kein bisschen, ändert halt nur Grafiken/Palette der Attacken, die die jeweilige Grafik/Palette nutzen)
    Speziell für Drachenstoß würde sich eine Kombi aus Drachenfeuer/Risikotackle eignen.
    Ich glaub' neue Animationen zu machen ist ZIEMLICH kompliziert und brauch ich auch nicht wirklich.
    Will halt nur vorhandene Animationen in bestimmter Reiheinfolge für bestimmte Attacken nutzen.
    Für die Feuerrote Edition, bitte!


    Das wär's, hoffe mir kann hier jemand helfen.
    Und danke fürs Lesen, falls sich einer das angetan hat :P

  • Okay, also ich habe ein Problem mit den folgenden Scripts. (Ich weiß, ich konnte das alles mal, aber ich muss mich wieder einarbeiten.. ;_; ) Ich benutze die deutsche Blattgrün-ROM.


    1. Movements. Dieser Code soll den Player in der Tür anhalten, zuhören und einen Schritt zurückgehen lassen, bis er ein Pokémon hat. Leider funktionieren die Movements aber nicht- die Textbox erscheint, aber dann kann ich ganz normal weiter durch die Tür gehen. Ideen?

    Code
    #dynamic 0x800000#org @startcheckflag 0x828if 0x1 goto @donemsgbox @1 0x6applymovement 0xFF @movewaitmovement 0x0releaseend#org @donereleaseend#org @1= [red_fr][player]?\nKommst du bitte kurz zu mir?#org @move#raw 0x11#raw 0xFE


    2. Givepokemon. Das ist schon komplizierter- es geht eigentlich nur um folgendes: Wenn die Frage erscheint: "Willst du Pikachu einen Spitznamen geben?" Und ich "Ja" anklicke, dann ist der Script beendet und ich kann durch die Gegend laufen, aber keinen Spitznamen eingeben oder weiter reden. Wieso?


    Also ich wäre für eine Antwort auf eines der beiden Probleme schon seeehr dankbar. Außerdem habe ich noch ein eher minores Problem, ich weiß aber nicht, ob das hergehört: Wenn ich OWs auf der Map platziere, sind die Ingame auf einmal ganz woanders? Wieso ist das so?
    Schon einmal Danke im Voraus!!

    You always wanted to be part of a circus company for the fun and death defying
    But in time you forgot; life is small in the big top and your dreams are slowly dying
    What you wanted was not a crime- you could have done it but you needed time

  • du hast das lock oder lockall am Anfang der Scripts vergessen
    Bei den calls die du im 2. Script verwendet hast, weiß ich nicht genau wie die dahinterliegenden Befehle aussehen (müsste ich erst in einer ROM nachschauen). Sollte also das lock/lockall nicht das Problem beheben, kann ich dir da auf die schnelle auch nicht helfen.

  • Hallohallo, Pin mal wieder!
    Ich habe einen schönen, ewig langen Leute-laufen-herum-und-reden-und-bla Script, der auch ganz wunderbar funktioniert, deswegen möchte ich euch die 400 Zeilen hier nicht antun. Das einzige Problem ist: am Ende verschwindet einer der Sprites nicht, obwohl ich das aber will (wäääh). Wahrscheinlich benutze ich das hidesprite-command falsch. Ich versuche, das ganze auf eine Kurzform runterzubrechen. Das Script wird gestartet, wenn man mit Prof. Eich redet; verstecken will ich aber einen Assistenten, der auch rumläuft und redet.



    03 ist in diesem Fall die Personen-Nr in Advance Map. (Im Klartext: Person Nummer 2, Personen-Nr. 3) Die Person hat keine Personen-ID (00). Mein Plan war also, dass Person 03 erst herumläuft (funktioniert) und dann verschwindet und dies wird mit einer Flag (201) besiegelt. Und dann sollte sie meinen Wünschen folgend nie wieder in diesem Raum zu sehen sein... Aber wenn ich ein paar Schritte nach unten gehe, steht sie wieder da, wo sie vor dem Start des Scripts gestanden hat, und sagt das Gleiche wie vorher!


    Kann mir jemand den Fehler finden (bittöh?), mir das hidesprite-command erklären oder mich alternativ zu einem entsprechenden TUT (auch auf Englisch) weiterleiten? Bitte-Dankeschön im Vorraus! (-:


    -Pin

    You always wanted to be part of a circus company for the fun and death defying
    But in time you forgot; life is small in the big top and your dreams are slowly dying
    What you wanted was not a crime- you could have done it but you needed time