$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“
  • 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)


  • 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

    Code
    msgbox @text 0x6


    das gleiche macht wie

    Code
    msgbox @text
    callstd 0x6


    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...

  • 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 :totumfall:

    [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 ()


  • das liegt an der auto formatierung vom Mac, ich versuchs noch mal im spoiler...

    [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]

  • 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:


    [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]


  • ahhhhja, ich komm auf 0x020245f4 für die Minuten, wer noch? :o


    lg


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

    [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]

  • 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