$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“
  • So, da bin ich wieder. Hab das mit dem Map-Script jetzt mal probiert, funzt aber nicht GANZ so, wie ichs wollte. Bis zum Schluss ist alles super, aber dann funktioniert das "release" nicht und das Spiel friert ein. Ich hab das Script nicht geändert ich bin nur dem Tut gefolgt und hab dieses RAW-WORD und den andern Kram eingefügt...

  • Hier ist er:

  • Sorry fürs Doppelposten, aber ich hab mal ne Frage. Die Chance, dass ein Shiny auftaucht steht ja 0,01220703125%
    Das sind 8 zu 65536. Heißt also auf gut deutsch, dass es doch eine variable, bestehend aus 2 Bytes geben muss, die als Wert 8 hat. Das Höchstmögliche sind 100%, also wäre das [FF FF] (0xFFFF=65536). Wahrscheinlich ist dieser Wert wieder Mal Byte-vertauscht, heißt also, er sollte [08 00] sein. Weiß jemand, wo er ist? Ich würde gerne die Wahrscheinlichkeit auf ein Shiny auf 0,5 oder 1% erhöhen.

  • Die warscheinlichkeit dass ein Pokemon Shiny ist wird berechnet. Dafür gabs mal irgendwo eine Formel, jedenfalls sind die verwendeten Variablen die sichtbare Trainer ID, die unsichtbare Secret ID und die Pokemon ID selbst.(mmx hat dazu mal was veröffentlicht, mehrere Seiten lang)
    Die Chance selbst zu verändern dürfte schwierig werden und das ganze funktioniert sicher nicht so wie du es dir vorstellst. Der Shiny Cheat beispielsweiße ändert ein bestimmtes Byte in der Berechnungsroutine, das reicht aus dass das Pokemon IMMER Shiny ist, aber wirklich die Chance verändern kannst du wohl eher nicht(oder durch viel Geschick *hust*), durch die Informationen vom Shinycheat(oder aber mmx Tutorial) kannst du aber einen Script schreiben der Pokemon verinzelt Shiny werden lässt. Allerdings musst du auch hier Assembler beherrschen :)
    Naja ich hoffe ich konnte dir helfen.


    lg


    PS: Beim überfliegen deines Scripts liegt es wohl eher an einer fehlerhaften Einstellung irgendwo anders, Mapscripts haben sowas gerne mal(zumindest habe ich die Erfahrung gemacht)

  • So... Ich stehe vor einem kleinen Problem:
    Ich möchte den folgenden Skript einbauen. Aber immer, wenn ich die Person anspreche, macht sie was anderes, als ich erwarte. Bau ich den Skript ein, wieder was anderes.
    Beim Ersten mal hatte ich die Auswahl zwischen 60 Pokédollar, 120 Pokédollar und Nichts. Egal, was ich machte, das Spiel crasht.
    Hab' ich mir wieder ne saubere ROM gesaugt und den Skript wieder eingebaut. Spreche ich jetzt mit dem Typen, kommt ein Auswahlmenü mit "Ausruhen" und "Zurück". Wenn ich was auswähle, erscheint eine Textbox mit ASCII-Zeichen.
    Ich weiß echt nicht, was ich falsch mache, ich habe es 10x gemacht, immer hat die Person etwas anderes gemacht. Ich habe GENAU die Anleitung hier befolgt. So sieht das Skript aus (Rombase ist Feuerrot):


    Am Skript finde ich keine Fehler - ihr etwa?

  • Auf den ersten Blick sehe ich bei givepokemon fehlen einige Pararmeter, unter Pokescript braucht das ganze imo 6(einfach 0 benutzen)
    Ich denke aber eher dass du beim schreiben ein paar Fehler machst...(natürlich kann ich nicht sagen was)
    Kannst ja versuchen XSE zu verwenden, auch wenn die "Syntax" leicht anders ist.


    lg

  • Ah, OK, danke Sturmvogel!
    Wie sieht's denn mit "selbstgemachter" Musik aus?
    Ich glaube, der GBA hat 16 Kanäle. Welche "Instrumente" hat er?
    Ich brauche die zusätzliche Musik für die Arenaleiter und für die Kämpfe gegen die Beschützer von Mew. (Vielleicht auch noch andere legendäre Pokémon)
    (Referenz zu Gold, Silber und Kristall) Aurius, Argentis und Crysthor (Bessere Vorschläge werden dankend angenommen, die Namen müssen aber eine Referenz zu den lateinischen Begriffen aufweisen) Der Kampf gegen Aurius und Argentis ist n Doppelkampf, sprich mit 2 Pokés auf jeder Seite.
    Hier sind n paar Midis. Die werde ich wahrscheinlich für die Beschützer von Mew nehmen, falls man Musik einfügen kann. Vielleicht erkennt jemand, von welchen Spielen die Musik kommt. Ich habe sie aber ein klein wenig bearbeitet.

  • Noch mal zu meinem Post oben: Fehler gefunden: Hacken bei "Assign" in BufRite gemacht und $-Zeichen bei AM entfernt. Jetzt klappt's super :]


    Und noch eine Frage:
    Folgendes Skript, aber es wird mir nur der erste Text angezeigt, das applymovement, der fadescreen und der zweite Text wird anscheinend nicht verarbeitet...


  • *autsch*, du kannst doch nicht bei einer Bewegungsfolge Scriptbefehle reinschreiben, das gehört oben hin wenn schon, falls das da unten eine neue Bewegung sein soll muss dafür natürlich ein neues Offset her.


    lg



  • so sollte es gehen

  • So, ich hab jetzt mit XSE n bisserl gescriptet, aber wenn ich es kompiliere ist alles falsch. (Der Map-Script klappt jetzt aber, das war eigene Doofheit, ich hab vergessen den Befehl SETVAR auch im Script selbst zu benutzen :patsch: ) Ich muss es mit BufRite kompilieren, weil man mit XSE ja nicht kompilieren kann. Es ist ein dynamischer Script. Und immer wenn ich versuche, ihn irgendwie mit XSE zu kompilieren, sagt er mir, dass die Pointer fehlerhaft sind, weil sie ja dynamisch sind und nicht auf ein bestimmtes Offset zeigen. Hier ist der Script:


    Nebenbei: Kann man auch Map-übergreifende Scripts machen, wie in Kristall (ich glaub da ist so ein Trigger, sobald man bei Mr. Pokémon war, verliert Lind den 2. Pokéball. Sowas mein ich. Wenn man auf Map A.B ist und das Script ausgeführt wird, passiert etwas auf Map X.Y), oder braucht man dazu ASM?


  • Um soetwas zu machen wie das bei dem Prof in GSK/C musst du nur die Personen-ID als Flag setzten, dann ist der OW weg. und es ist dabei egal, wo du dich befindest.


    Ansonsten musste mit Flags arbeiten, die du setzt und löschst und damit dann über ein Mapscript, Script-Event etwas entsprechendes auslöst.

  • Ach so! Das heißt also, wenn ich ne Person mit der ID 8C3 hab, muss ich einfach [checkflag 0x8C3] schreiben und dann ist sie weg?
    Das Problem ist ja jetzt, dass es einer von den drei Bällen sein kann. Da mach ich dann einfach: Wenn ich ENDIVIE genommen hab, geht der Pokéball mit FEURIGEL weg, wenn ich KARNIMANI genommen hab, geht ENDIVIE weg und wenn ich FEURIGEL genommen hab, geht KARNIMANI weg.
    Wie sieht das mit dem falschen Kompilieren aus? Weiß jemand, wie ich das beheben kann. Ich geh mal davon aus, dass BufRite ein paar Befehle nicht kennt, die XSE kennt. Gibt's noch ein andere Compiler-Programm?


    (Falls es hier irgendjemanden interessiert: Ich werde Gengars Typ in Geist/Unlicht umwandeln, dieser Typ hat keine Schwächen!)
    (Und falls es dich interessiert, Prime, die TMs wurden von Zel in seiner Shiny Gold version geändert, vielleicht ist es so leichter, herauszufinden, wie's gemacht wird)

  • ja, nur das der Befehl Checkflag die Flag checkt und nicht setzt. dafür brauchst du setflag.
    also, jeder Ball hatt eine Personen-ID, du prüfst, ob welche gesetzt ist und setzt dementsprechend eine andere.


    Das Falsche Kompilieren kann daher kommen, dass du die Angebane teilweise Falsch setzt halt so wie im Pokescript, was natürlich der XSE nicht schluckt. Wenn du es kompilieren willst, dir aber der XSE Probleme bereitet:
    geh auf debuggen, der gibt dir dann die DynamischenPointer als festen hex Werte raus. Diese Werte kannste dann einfach anstelle der entsprechenden Pointer schrieben. Damit sollte es es schlucken.


    PS:

    Zitat von Yoshis Fan

    (Und falls es dich interessiert, Prime, die TMs wurden von Zel in seiner Shiny Gold version geändert, vielleicht ist es so leichter, herauszufinden, wie's gemacht wird)


    Naja, das war eine Englische Rom und die Hacker in den englischen undspanischen Foren sind da schon etwas weiter. Ausserdem war ein TM-Editor nicht geplant...

  • Ja, ich meinte ja setflag.
    Nicht der XSE bereitet mir Probleme sondern BufRite. Wenn ich z.B. ein Script, das schon im Spiel drin ist, öffne und daraus ein paar etwas "exotischere" Befehle wie z.B. setvar benutzen will, kompiliert BufRite diesen falsch. Wenn ich den Befehl "setvar 0x4002 0x3" z.B. benutzen will und ihn mit BufRite kompiliere (den Script habe ich vorher auch mit XSE geschrieben) kommt da irgendein Kauderwelsch raus, der dann keinen Sinn mehr macht. Wenn ich dann in AM auf das Script-Offset gehe und den Script öffne, steht da nur irgendwas sinnloses ab da, wo der "exotische" Befehl stehen sollte. Und im Nachhinein noch ein Script zu editieren ist auch blöd, weil man dann ein Byte-Limit hat.

  • es gibt kein "Byte-Limit", ausser du machst dir eines.
    warum kompilierst du das ganze dann nicht gleich mit dem XSE? Wenn es dir probleme Bereitet hat gibt es ja oben die Lösung.
    Das mit BufRite ist generell nur für Pokescripts gedacht, natürlich versteht er eine menge Befehle aus dem XSE nicht.
    diese musst du dann als raw verpacken und die Befehle direkt binär schrieben.

  • Ach so! Danke sehr!
    Aber ich meine es gäb wirklich ein Byte-Limit. Wenn ich ein existierendes, kompiliertes Script von AM aus in XSE editiere und Bytes (in Form von Befehlen) hinzufüge, nimmt er das nicht. Wenn ich es dann kompiliere, das Script schließe und danach wieder öffne, sieht es aus wie vorher. (Eigentlich muss es ja so sein, weil existierende Scripts sonst andere Sachen überschreiben würden)

  • Aber ich meine es gäb wirklich ein Byte-Limit. Wenn ich ein existierendes, kompiliertes Script von AM aus in XSE editiere und Bytes (in Form von Befehlen) hinzufüge, nimmt er das nicht. Wenn ich es dann kompiliere, das Script schließe und danach wieder öffne, sieht es aus wie vorher. (Eigentlich muss es ja so sein, weil existierende Scripts sonst andere Sachen überschreiben würden)

    Stichwort Repoint, ja es gibt ein Byte Limit von afaik 8*1024², also 8 MB, aber auch das kann man umgehen(wenns denn nicht reicht^^)
    Zum Repointen, einfach in XSE die Offsets abändern, müssen natürlich wieder zusammenstimmen.


    lg