bei FR kann man aber ab den 3. orden fliegen einsetzen
$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“-
-
dann musst du eben auch die Flag von dem Orden nehmen(0x222 wenn ich mich nicht verschätzt habe, genaueres in einem Scriptingtutorial oder der XSE std.rbh Datei)
lg
-
0x822 ist der 3. Orden ;D
driver
Meinte ich ja^^
~SBird~ -
Ich brauche hilfe und zwar habe ich für eine neue person ein script gemacht aber wenn ich sie anspreche kommt zwar der text aber immer doppelt kann mir irgenteiner sagen was ich falsch gemacht habe!!!
-
nein, können wir nicht, da wir nicht wissen, was du gemacht hast... (Script wäre schon mal ein guter anfang, wir haben keine Kristallkugel oder deinen PC gehackt um sofort auf deine Daten zuzugreifen, wenn du ein Problem hast)
-
#dynamic 0x800000
#org @main
lock
faceplayer
msgbox @text 0x6
callstd 0x6
release
end#org @text
= Hi! Ich liebe Pokemon! Darf \naber leider keines haben. Hast du \pschon ein eigenes Pokemon?da is der script ka was ich falsch gemacht habe
-
#dynamic 0x800000
#org @main
lock
faceplayer
msgbox @text 0x6
callstd 0x6
release
end#org @text
= Hi! Ich liebe Pokemon! Darf \naber leider keines haben. Hast du \pschon ein eigenes Pokemon?da is der script ka was ich falsch gemacht habe
du hast zuerst msgbox @text 0x6 und dann zusetzlich callstd 0x6 geschrieben. wobei msgbox @text die msg vorbereitet und 0x6 (hinter dem msgbox) oder callstd 0x6 (in einer neuen Zeile) die Nachricht ausgibt.
Da
das gleiche macht wie
musst du dich für eines von beidem entscheiden... -
aso danke hab aba noch ein problem und zwar den script kann ich nicht kompilieren da kommt imma so ne fehlermeldung: Fehler13 ''Type mismatch'' in zeile 7.
#define fehlt.
und der script^^:
#dynamic 0x800000
#org @main
lock
faceplayer
msgbox @text 0x5
callstd 0x5
Compare LASTRESULT 0x1
if b_true goto @ja
compare LASTRESULT 0x0
if b_true goto @nein
#org @ja
lock
faceplayer
msgbox @text2 0x6
callstd 0x6
release
end
#org @nein
lock
faceplayer
msgbox @text3 0x6
callstd 0x6
release
end#org @text
= Hi! Ich liebe Pokemon! Darf \naber leider keines haben. Hast du \pschon ein eigenes Pokemon?#org @text2
= Ist ja toll. Ich hätte auch \ngern eines. seufts!#org @text3
= Da sitzen wir wohl im selben \nBoot. Nur wenn es halt nicht sein \psoll... -
LASTRESULT wurde nicht definiert...
hast vermutlich die Datei verschlampt, in der es definiert wird.
anstelle von LASTRESULT kannste auch 0x800D schreiben -
Ich würde an deiner Stelle auch noch das callstd entfernen (ist wieder genau das gleiche wie beim vorigen script xD)
-
Danke dass hat mir sehr geholfen
-
Ich bin mittlerweile zwar recht erfahren was Standard-RH angeht, aber ich bin noch blutiger Anfänger was ASM angeht, wahrscheinlich ein fetter Fehler den ich aus Dummheit übersehen habe -.-
Code.text.align 2.thumb.thumb_func.global get_playtime main: push {r0-r1, lr} ldr r0, .PLAYER_DATA ldr r0, [r0] ldr r1, .VAR_1 ldrh r0, [r0, #0xE] strh r0, [r1] ldr r0, .PLAYER_DATA ldr r0, [r0] ldr r1, .VAR_2 ldrb r0, [r0, #0x10] strb r0, [r1] ldr r0, .PLAYER_DATA ldr r0, [r0] ldr r1, .VAR_3 ldrb r0, [r0, #0x11] strb r0, [r1] pop {r0-r1, pc} .align 2.PLAYER_DATA: .word 0x0300500C .VAR_1: .word 0x020270B6 + (0x8004 * 2) .VAR_2: .word 0x020270B6 + (0x8005 * 2) .VAR_3: .word 0x020270B6 + (0x8006 * 2)
Der Code ist für BPRE und soll die Spielzeit in die Variablen 0x8004 (Stunden), 0x8005 (Minuten) und 0x8006 (Sekunden) kopieren.
Das Problem ist, dass mir egal wie lange ich schon Gespielt habe, eine Spielzeit von 00:00:00 ausgegeben wird. Ich habe keine Ahnung woran das liegen könnte (deswegen poste ich ja auch)...BTW: Kann es sein, dass die Variablen byteverkehrt im RAM gespeichert sind? Dürfte eigentlich keine Fehlerquelle sein, da die Werte von Minuten und Sekunden mit 0x100 mutipliziert werden müssten (wenn ich das ganze richtig verstanden habe oO)
Edit: Boah, langsam geht mir die Auto-Formatierung vom Mac (über den ich gezwungener Maßen surfen muss, normalerweise benutze ich WinXP, falls es was zur Sache tut) ziemlich auf den Sack ><
Edit2: F***, der code ist ja immer noch auf nur 4 Zeilen -
Das Format ist Little-Endian.
Das heißt, dass JEDER Wert byteverkehrt gespeichert wird...Und mach bitte mal die Formatierung richtig, das kann man ja nicht lesen^^
driver
-
.text
.align 2
.thumb
.thumb_func
.global get_playtime
main:
push {r0-r1, lr}
ldr r0, .PLAYER_DATA
ldr r0, [r0] ldr r1, .VAR_1
ldrh r0, [r0, #0xE]
strh r0, [r1]
ldr r0, .PLAYER_DATA
ldr r0, [r0]
ldr r1, .VAR_2
ldrb r0, [r0, #0x10]
strb r0, [r1]
ldr r0, .PLAYER_DATA
ldr r0, [r0]
ldr r1, .VAR_3
ldrb r0, [r0, #0x11]
strb r0, [r1]
pop {r0-r1, pc}.align 2
.PLAYER_DATA:
.word 0x0300500C
.VAR_1:
.word 0x020270B6 + (0x8004 * 2)
.VAR_2:
.word 0x020270B6 + (0x8005 * 2)
.VAR_3:
.word 0x020270B6 + (0x8006 * 2)das liegt an der auto formatierung vom Mac, ich versuchs noch mal im spoiler...
-
Byteverkehrt gespeichert wird sowieso alles, eben wegen dem Lesesystem, aber natürlich ließt auch ldrh von rechts ein(wäre ja sonst sinnlos das ganze System)
Ich würde mal die Offsets alle überprüfen. Die Variablen könnten so stimmen, wie das mit Playerdata aussieht weiß ich nicht. 03 gefällt mir da eigentlich nicht(hab mir das auch lange nicht angeschaut) kannst ja alles mal im Memory Viewer nachprüfen und ggf. durch einen Debugger schmeißen(Ich würde eigentlich die Offsets prüfen, aber ich habe gerade keinen VBA zur Hand, weswegen ich dir nur Tipps geben kann.lg
-
An den offsets kann es eigentlich nicht liegen, da die aus dem SID-Leser von Hackmew stammen und ich die gleiche Rom verwende...
Hier mal der Script der die Routine callt:#dynamic 0x720000
#org @main
callasm 0x730001
buffernumber 0x0 0x8004
buffernumber 0x1 0x8005
buffernumber 0x2 0x8006
msgbox @text 0x2
end#org @text
= [buffer1]:[buffer2]:[buffer3] -
ahhhhja, ich komm auf 0x020245f4 für die Minuten, wer noch? :o
lg
Edit: DMA ist da auch noch dabei, würde ich aufpassen ;)
-
ahhhhja, ich komm auf 0x020245f4 für die Minuten, wer noch? :olg
Edit: DMA ist da auch noch dabei, würde ich aufpassen ;)
Nach meinen Infos ist der DMA-Pointer (nennt man das so?) am Offset das ich als ".PLAYER_DATA" verwendet habe, deswegen zweimal ldr und dann erst ldrh (so habe ich DMA verstanden...)
-
DMA(zumindest das was gemeint ist) ist dafür da um es den Hackern schwer zu machen, bzw. auch den Hackern, es gibt Möglichkeiten das abzuschalten(wie genau weiß ich nicht, du könntest ja den Code von mx analysieren)
Jedenfalls ist der Teil den ich dir genannt habe(bzw. der Bereich um diese Position) der, der für die Zeit verwendet wird :)lg
-
Code
0x0206459A -> Millisekunden Spielzeit (byte) 0x02064599 -> Sekunden Spielzeit (byte) 0x02064598 -> Minuten Spielzeit (byte) 0x02064596 -> Stunden Spielzeit (halfword)
Das habe ich rausgefunden, mit abgeschalteter DMA....
Um die DMA abzuschalten, verändere den die 2 Bytes im ROM an 0x04C084 von 0140 zu 0021 ;)
Da wird der ASM-Opcode "and r1, r0" zu "mov r1, #0" umgewandelt^^
driver