habs hinbekommen war einfacher als erwartet hab ein tut gelesen und es gleich hingekriegt
$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...
-
zeig mal den script her
-
Hier ist er:
#org $begin
checkflag 0x202
if b_true goto $done
lock
applymovement 0xFF $move2
pausemove 0x0
applymovement 0x04 $move3
pausemove 0x0
message $1
boxset 6
applymovement 0x04 $move4
pausemove 0x0
message $2
boxset 5
compare LASTRESULT 0x1
if 0x1 goto $JA
if 0x0 goto $NEIN
release
end#org $NEIN
message $3
boxset 5
compare LASTRESULT 0x1
if 0x1 goto $JA
if 0x0 goto $NEIN
release
end#org $JA
message $4
boxset 6
applymovement 0x04 $move5
pausemove 0x0
message $5
boxset 6
applymovement 0x04 $move6
pausemove 0x0
message $6
boxset 6
applymovement 0x04 $move7
message $7
boxset 6
setflag 0x202
release
end#org $done
release
end#org $move2
#raw 0x11
#raw 0x11
#raw 0x11
#raw 0x11
#raw 0x11
#raw 0xFE#org $move3
#raw 0x62
#raw 0x00
#raw 0xFE#org $move4
#raw 0x13
#raw 0x13
#raw 0x13
#raw 0x10
#raw 0xFE#org $move5
#raw 0x02
#raw 0x62
#raw 0x12
#raw 0x12
#raw 0x12
#raw 0x11
#raw 0xFE#org $move6
#raw 0x13
#raw 0x13
#raw 0x13
#raw 0x10
#raw 0xFE#org $move7
#raw 0x11
#raw 0x11
#raw 0x11
#raw 0x00
#raw 0xFE#org $1
$1 1 =LIND: \v\h01! Da bist du ja!#org $2
$2 1 =Ich muss dich um etwas bitten. \nIch führe gerade neue Pokemon- \pForschungen durch. Ich habe mich gefragt, \nob du mir dabei hilfst, \v\h01. \pVersteht du... Ich schreibe an etwas, \ndas ich bei einer Konferenz \pvorlegen möchte. Aber da sind \nnoch einige Dinge, die ich \pnicht ganz verstehe. Darum! \nIch möchte, dass du ein Pokemon \ptrainierst, das ich vor kurzem \ngefangen habe.#org $3
$3 1 =Aber... Ich brauche deine Hilfe!#org $4
$4 1 =Danke, \v\h01! Du bist mir \neine große Hilfe! Wenn ich \pmeine Ergebnisse vorlege, werden \nwir sicher noch weiter in \pdie Geheimnisse der Pokemon \nvorstoßen. Darauf kannst du \pdich verlassen!#org $5
$5 1 =Oh, heh! Ich habe eine E-Mail! \n....... Hm... Uh-huh... \pOkay...#org $6
$6 1 =Hör gut zu! Ich habe \peinen Bekannten namens MR. \nPOKéMON. Ständig findet er \peigenartiges Zeugs und fängt \nan, darüber zu fantasieren. \pAber jetzt hat er mir eine \nE-Mail geschickt, in der \psteht, dass es sich diesmal \num etwas Großes handeln muss. \pDas klingt zwar faszinierend, \naber wir sind derzeit mitten \pin unseren eigenen POKé- \nMON-Forschungen. \pMoment! Ich hab's! \p\v\h01, könntest du der Sache \nnachgehen?#org $7
$7 1 =Ich möchte, dass du eines der \nPOKéMON aus einem dieser BÄLLE \ptrainierst. Du wirst der erste \nKamerad dieses POKéMON sein, \p\v\h01! \nSuch dir eins aus! -
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):Code
Alles anzeigen#org $begin lock faceplayer checkflag 0x202 if b_true goto $already_done message $1 boxset 6 checkflag 0x820 if b_true goto $2o message $2 boxset 6 #org $2o checkflag 0x821 if b_true goto $3o message $2 boxset 6 #org $3o checkflag 0x822 if b_true goto $4o message $2 boxset 6 #org $4o checkflag 0x823 if b_true goto $4o message $2 boxset 6 #org $5o checkflag 0x824 if b_true goto $5o message $2 boxset 6 #org $6o checkflag 0x825 if b_true goto $7o message $2 boxset 6 #org $7o checkflag 0x826 if b_true goto $8o message $2 boxset 6 #org $8o checkflag 0x827 if b_true goto $give_pkmn message $2 boxset 6 #org give_pkmn message $3 boxset 6 givepokemon 151 5 0 fanfare 0x13E message $4 boxset 4 waitfanfare #raw 0x68 setflag 0x202 message $5 boxset 5 compare LASTRESULT 0x1 if b_true gosub $name message $6 boxset 6 release end #org already_done message $7 boxset 6 release end #org $name call 0x1A74EB return #org $1 $1 1 = Hallo \h01 \nSchön, dass du mich nochmal besuchst! #org $2 $2 1 = Bei dir alles in Ordnung?\nSchön, bei mir auch.\pBitte komm' bald wieder! #org $3 $3 1 = Wow! \h01, du hast alle Orden gesammelt?\p\h01, ich habe ein Geschenk für dich\nEs ist ein neu entdecktes Pokémon, über das wir nicht viel wissen. Sein Name ist Mew. Bitte nehme es und trainiere es, damit wir weiter daran forschen können. #org $4 $4 1 = Mew erhalten! #org $5 $5 1 = Möchtest du Mew einen Spitznamen geben? #org $6 $6 1 = Pass gut auf Mew auf! #org $7 $7 1 = Hallo, \h01! Wie ich sehe, hat sich Mew toll entwickelt.
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...Code
Alles anzeigen#org $begin lock message $1 boxset 6 applymovement 0x04 $move1 setflag 0x207 release end #org $move1 #raw 0x4A 0x62 0xFE pausemove 0x20 message $2 boxset 6 fadescreen 0x0 #raw 0x60 0xFE pausemove 0x10 fadescreen 0x1 #org $1 $1 1 = Das ist also Alabastia, der Ort \nunserer Pläne... #org $2 $2 1 = Wie viel hast du mitgehört?!
-
Code
Alles anzeigen#org $begin lock message $1 boxset 6 applymovement 0x04 $move1 setflag 0x207 release end #org $move1 #raw 0x4A 0x62 0xFE pausemove 0x20 message $2 boxset 6 fadescreen 0x0 #raw 0x60 0xFE pausemove 0x10 fadescreen 0x1 #org $1 $1 1 = Das ist also Alabastia, der Ort \nunserer Pläne... #org $2 $2 1 = Wie viel hast du mitgehört?!
*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
-
Code
Alles anzeigen#org $begin lock message $1 boxset 6 checkflag 0x206 if 0x0 jumpto $move1 release end #org $move1 applymovement 0x4 $move2 pausemove 0x20 message $2 boxset 6 fadescreen 0x0 #raw 0x60 0xFE pausemove 0x10 fadescreen 0x1 setflag 0x207 release end #org $1 $1 1 = Das ist also Alabastia, der Ort \nunserer Pläne... #org $2 $2 1 = Wie viel hast du mitgehört?! #org $move2 hier kommem deine geh befehle hin
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 ) 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?
'---------------
#dynamic 0x800000
#org $begin
lock
faceplayer
setvar 0x4001 0x2
setvar 0x4002 0x9B
setvar 0x4003 0x9E
setvar 0x4004 0x6
checkflag 0x203
if 0x1 goto $done
showpokepic 0x9B 0xA 0x3
msgbox $1 MSG_YESNO '"LIND: Möchtest du FEURIGEL, das \n..."
compare LASTRESULT 0x1
if 0x1 goto $Ja
if 0x0 goto $Nein
release
end'---------------
#org $done
msgbox $2 MSG_NORMAL '"Er beinhaltet ein von PROF. \nLIND..."
release
end#org $Ja
hidepokepic
hidesprite LASTTALKED
msgbox $3 MSG_NORMAL '"LIND: Ich bin auch der \nMeinung, ..."
copyvar 0x8012 0x8013
setflag 0x828
setflag 0x291
bufferpokemon 0x0 0x4002
givepokemon 0x4002 0x5 0x0 0x0 0x0 0x0
copyvar 0x4031 0x4002
msgbox $4 MSG_NORMAL '"[player] erhält\n[buffer1]!"
fanfare 0x13E
waitfanfare
msgbox $5 MSG_YESNO '"Möchtest du [buffer1] einen \nSpit..."
compare LASTRESULT 0x1
if 0x1 goto 0x880224C
if 0x0 goto 0x880221E
setflag 0x203
release
end#org $Nein
hidepokepic
msgbox $6 MSG_NORMAL
release
end'---------
' Strings
'---------
#org 1
= LIND: Möchtest du FEURIGEL, das \nFeuer-POKéMON?#org 2
= Er beinhaltet ein von PROF. \nLIND gefangenes POKéMON.#org 3
= LIND: Ich bin auch der \nMeinung, dass dieses POKéMON \psehr gut ist!#org 4
= [player] erhält\n[buffer1]!#org 5
= Möchtest du [buffer1] einen \nSpitznamen geben?#org 6
= LIND: Überlege es dir gut! \nDie Wahl deines Partners \pist sehr wichtig! -
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