• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.
FamiliaWerneck
Reaction score
30

Profile posts Latest activity Postings About

  • Well if you want to find the offset really fast download my Advanced Offset tool. That's one of the main reasons it was made for the help in repointing things.
    Yea an ldr and bx is the right path to go, but... Yea no matter what it would remove shellder even if you cancel. I don't believe theres any way to check if the evolution was canceled. (well not without some hooking) but if we end u hooking, then the best option would be to leave the remove poke out of the evolution itself. It may take some research but its entirely possible.

    Also your loop is alittle odd. You should have for your ldr r0, firstpoke
    is right after it add r0, r0, r6 ---(i used r6 since that is what you set for the #0x64)
    and instead of mov r6, #0x64 use add r6, r6, #0x64
    but add in a mov r6 #0x0 before the loop is called.
    Pretty good man! I'll try to clear somethings up:
    Special routines: Don't really exist. You say ldr r0, firstpoke is a special routine. It is infact loading an address. The address is the location of the first pokemon in the party. It doesn't branch or do anything but load an address.

    The bl and bx you see later do similar things. They load an address and then jump to the address and execute the ASM there.

    Also at the end there you say B button to cancel. In a pokebattle, when the battle ends the screen goes black. HERE is where the routine runs. If it is true it loads the evolution screen, if not you go to the overworld. So there is no way to stop the evolution as of yet...
    I will have exam tomorrow and the following two weeks I will have numerous exams... All students are suffering exams, haha. :)
    That's a good and straight idea. I think you can add breakpoints to get the location of code which call the "encrypt" or "recalculate stat" function through bl to set a branch. In the evolution you can set a var using var decrypter function (you can set it to the shellder's index in your team), and do a branch from where something like "bl encrypt" happen, which checks the variable and if the variable is set to a value different from 0. After that simply delete the shellder in the code you branch to. I think it's a fast way, but not sure if it will work as i do not have enough time to try it. (Sorry my English is very bad)
    Nope. For example:
    Slowpoke is the second pokemon in your team and the shellder is the first one. Before the game run the evolution routine you wrote whose pointer is in the table (do not need to +1 as it simply changes r15 and does not use bx to get to the routine), it loads into r0 the pointer of the slowpoke's data in the WRAM and then in some location gives it to r8 which can be used in the evolution routine. Then as the shellder is deleted the slowpoke becomes the first pokemon in ur team and in the evolution routine you will absolutely change r8 to get the new pointer (As the index of slowpoke has changed, the pointer need a change). However, that doesn't work unfortunately and it seems the value is used before the evolution routine so the second pokemon in your team will evolve into slowbro, which is not slowpoke now.
    You can't do that to get the slowpoke's evolution with shellder as the index of slowpoke in your team may change but the game get the pointer of its original location before the evolution routine so you will get an error even you change r8 to the new pointer if I haven't mistaken it. I think the best way to do it is to branch from other locations of code but not the evolution routine, absolutely. (And if the player press b to exit the evolution routine, the shellder will be deleted as well, which can be called a serious glitch.)
    So it works perfectly then? I didn't get a chance to test it.

    That could very possibly be used, but it will take a big script, I'll try to get on it soon.
    Spoiler:
    Yep that's it. There's no reason why it wouldn't be able to expand. Just make sure that it ends with FF FF.
    You can only edit the item via table as G3HS doesnt allow more than one argument. And the level is set in g3hs.

    And those are previously set, cause the game runs other routines before running each evolution routine. Those must be included otherwise there will be issues.
    I try to keep my facebook and many things confidential, but lay out all your problems here and I will tackle them when I have time. barely use facebook, I work 8-14 hours a day, looking for a better career and rather be outside in my spare time. So I am massively offline but I can try my best. Maybe try the linkandzelda chat room... they know way more about asm than me!
    .text
    .align 2
    .thumb
    .thumb_func
    .global sylveon

    main:
    push {r0-r7}
    add r0, r6, r7 @standard in every routine
    lsl r0, r0, #0x3 @standard in every routine
    add r0, r2, r0 @standard in every routine
    add r3, r0, r3 @standard in every routine
    ldrh r2, [r3, #0x2] @this loads the 'argument' you see in G3HS. There is no need for this...
    mov r0, r8 @standard in every routine
    mov r5, #0x0 @this is the move counter (read on)

    loop:
    bl decrypt @go to the decrypt section in the routine and return when finished it
    mov r4, r0 @safely moves the returned move to r4
    pop {r0-r2} @clears the registers we pushed in the branch
    mov r1, r4 @move the move ID back to r1
    ldr r4, movedata @must be the move data ADDRESS LOCATION
    mov r6, #0xC @move data is 12 bytes long ie. 0xC
    mul r6, r1 @ Move ID times 0xC
    add r4, r4, r6 @adds this value to the start of the table to get to the move fingerprint data
    ldrb r4, [r4, #0x2] @loads the byte 2 bytes after the current byte... The move type hint hint!
    cmp r4, #0x16 @This must be the value assigned to Fairy? check the MrDS ini to confirm.
    beq true @If the moveID was 0x16 goto true
    cmp r5, #0x3 @if the counter is 3 (checked for 4 moves) then quit
    beq exit @goto no evolution
    add r5, #0x1 @add 1 to the loop counter for the next move
    b loop @start the loop again

    decrypt:
    push {r0-r2}
    mov r1, #0xD @sets the Move1 attribute
    add r1, r1, r5 @adds the counter to r1 (for Move2,3,4)
    ldr r2, decryptpoke @loads the special routine
    bx r2 @gets the move and puts it in r2 and goes back to the loop

    true:
    mov r9, r3
    pop {r0-r7}
    mov r1, r9
    ldr r0, levelcheckloc
    bx r0
    exit:
    pop {r0-r7}
    ldr r0, noevo
    bx r0

    .align
    movedata: .word 0x08900000
    levelcheckloc: .word 0x0804310D
    noevo: .word 0x08043111
    decryptpoke: .word 0x0803FBE9
    Its not too difficult once you get the hang of it. And all the commands are pretty much abbreviations of words, like cmp is compare, and mov is move(or set).

    I have Skype, no facebook.
    Also try this sucker out:
    Spoiler:
    "You guys" you make it sound like people who know asm are geniuses. I just learned a few months ago.:P
    I learned for the same reason you want to. No one wanted to help out with EM asm so I made my own.

    But I will get to work on those tonight.
    Well originaly i meant just the level and item, but i can help with the delete pokemon too! Hiw much are you willing to help out with? Cause when i get on my computer i can probably make one of them reletively fast.
    We use IDA, which is an interactive disassembler for reverse engineering. We have quite a lot of mechanics worked out in the IDBs (IDA database, see my signature) and we build on those. Using a combination of the database and a debugger we can locate any routine. It takes a bit of skill to be able to understand it, however (that is, if someone hasn't beaten you to it). You need to be quite familiar with ASM.
    Just bug fixing. It should be fine. Maybe some extra miscellaneous decapitalisation or new abilities from the thread. I'm mostly working on the Emerald version.
  • Loading…
  • Loading…
  • Loading…
Back
Top