Conversation Between FamiliaWerneck and Joexv
136 to 150 of 155
  1. FamiliaWerneck
    June 16th, 2015 5:26 PM
    FamiliaWerneck
    Finding anything for me is difficult. I don't know how to. and I have a big list of stuff to find. =P
    Can you teach me that?
    Plus, I know the evolution routine is the same. I actually meant that creating this routine, which indeed doesn't seem that hard, would be a problem as it has to work only for Slowpoke.
    If the game spends time running this routine for every Pokémon that evolves, it's not going to be efficient.
    As for the item check, Slowpoke would evolve anyway. But if he is holding a king's rock, he becomes Slowking. If not, Slowbro.
    In a parallel line of thinking, how does the original Fire Red game keep an evolutionary stone/item, if the Pokémon's evolution is cancelled? We could keep Shellder the same way (and king's rock, for that matter).
  2. Joexv
    June 16th, 2015 5:17 PM
    Joexv
    It is entirely possible to add in the item chck without even adding in a new table, we could just simply check the evolving pokemon for the item. There is no specific animation per pokemon as its all one routine. But i dont believe finding it and hooking into it would be too difficult.
  3. FamiliaWerneck
    June 16th, 2015 5:05 PM
    FamiliaWerneck
    Using the same thinking, we could actually jump deletion and doing the check I said after, but without the backup. If Slowpoke's species saved on a register (that would contain only an address or a value, not 100 bytes) is different after the animation, the Shellder is deleted.
    Problem with either solution would be to find the evolution animation spcifically for Slowpoke and putting a routine to work after it.
    Also, is it possible to put a checker to see if Slowpoke is holding a king's rock or not? As we are allowed only one argument, I thought about using that Pokémon/Item table for it. Is it possible?
  4. Joexv
    June 16th, 2015 4:34 PM
    Joexv
    Its is possible.. But saving 100 bytes of data is no easy task and that is why it would be simpler to instead use the delete pokemon routine after the animation/species check that way you save lots of work on backing up and restoring Shellders data.
  5. FamiliaWerneck
    June 16th, 2015 4:05 PM
    FamiliaWerneck
    I just took Mantyke's evo routine and added the remove Pokémon string.
    I had an idea, but I don't know if it is possible.
    What if after comparing if the Pokémon argument (Shellder) is in the party, you made a backup of Shellder and saving Slowpoke's species in a register, or variable, I don't know.
    That way, if the evolution is to happen, Shellder would be deleted with or without the evolution cancel option. Buuuut, after the animation, you check Slowpoke's species. If it's the same as before (not Slowbro's nor Slowking's, thus the evolution was cancelled), Shllder would be restored to your party, after being deleted.
    Is this possible?
  6. Joexv
    June 16th, 2015 2:43 PM
    Joexv
    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.
  7. FamiliaWerneck
    June 16th, 2015 2:01 AM
    FamiliaWerneck
    I didn't test neither. I have to find out where is the evolutions table in my ROM, as I used that Evolution patch Ollie11 has posted. In the ini he provided, there's no reference to where is the expanded evolution table.
    After I find it, I will test your code, and my code, though it's clearly not complete. I don't know how I would call the Pokémon removal routine. I believe the code I posted here is right, I would have to "ldr r#, takepoke" and specify down there the location of the special routine. Or branch the code in the same routine, but I believe it would be simpler the first way.

    jiangzhengwenjzw warned me about the glitch where if you cancel the evolution, Shellder would still be removed. I could set a compare if there was an "evo cancel", and if true, "bl exit". If not, "ldr takepoke and stuff". He also said something about Slowpoke's index changing, so we are not going to be able to evolve him with Shellder. Something like that.

    Besides all this, my other concern is how to make Slowpoke evolve into Slowbro or Slowking by the same methods.
    I thought about using your trick with the Item + Pokémon tables and set a King's Rock for Slowpoke to evolve to Slowking if you have a Shellder in the party, or to Slowbro if you don't have the King's Rock. Just an idea, we may discuss it later.
    Let's focus on removing a Pokémon after this evolution. Is what I did right?
  8. Joexv
    June 15th, 2015 7:46 PM
    Joexv
    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.
  9. FamiliaWerneck
    June 15th, 2015 7:01 PM
    FamiliaWerneck
    No problem. You should really post this routine in the thread. kearnseyboy6 would definetely update OP with it.

    Check this:
    Spoiler:
    .text
    .align 2
    .thumb
    .thumb_func
    .global slowpokeevolution

    main:
    push {r0-r7}
    add r0, r6, r7
    lsl r0, r0, #0x3
    add r0, r2, r0
    add r3, r0, r3
    ldrh r2, [r3, #0x2]
    mov r5, #0x0

    loop: ldr r0, firstpoke
    mov r1, #0xB
    mov r6, #0x64
    add r4, r5, #0x0
    mul r4, r6
    add r0, r0, r4
    bl decrypt
    mov r9, r0
    pop {r0-r7}
    mov r1, r9
    cmp r1, r2
    beq levelcheck
    cmp r5, #0x5
    beq exit
    add r5, #0x1
    b loop

    levelcheck: mov r10, r3
    pop {r0-r7}
    mov r1, r10
    ldr r0, levelcheckloc
    ldr r#, takepoke
    bx r0

    exit: pop {r0-r7}
    ldr r0, noevo
    bx r0

    decrypt: push {r0-r7}
    ldr r2, decryptpoke
    bx r2

    .align
    firstpoke: .word 0x02024284
    levelcheckloc: .word 0x0804310D
    noevo: .word 0x08043111
    takepoke: .word 0xoffset (special routine for removing a Pokémon from the party that should be previously assembled and just called here)
    decryptpoke: .word 0x0803FBE9

    Having HackMew's (or anyone else's) Pokémon removal routine already assembled in the hack as a special routine, and calling it after the evolution is complete. Would that be a solution to the Slowpoke evolution?
  10. Joexv
    June 14th, 2015 9:36 AM
    Joexv
    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.
  11. FamiliaWerneck
    June 14th, 2015 9:33 AM
    FamiliaWerneck
    Got it. Thanks a lot for this bro!
    So, for the tables, I just put every Pokémon that will use this evolution method into the Pokémon table, and each respective item in the same order in the items table.
    I repoint the tables into the code and then I enter G3HS and just choose the level. The game will know which item I need for that Pokémon.
    Is that it?
    And I believe I can't just expand the tables once I insert Generation IV into the game?
  12. Joexv
    June 14th, 2015 8:20 AM
    Joexv
    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.
  13. FamiliaWerneck
    June 13th, 2015 9:18 PM
    FamiliaWerneck
    As for the codes doubt, I showed kearnseyboy6 the Male Evolution code.
    This has the same thing I didn't understand at first.
    Why do you add r6 and r7 and place them on r0 after you push registers r0 to r7 into the stack?
    I mean, weren't those registers supposed to be empty? Why adding their values, then?
  14. FamiliaWerneck
    June 13th, 2015 9:15 PM
    FamiliaWerneck
    So basically, this works for a lot of items?
    Will I be able to set a level so the evolution works? Or it will evolve the next level whilst holding the item?
    Can I edit both item and level via G3HS?
  15. Joexv
    June 13th, 2015 9:07 PM
    Joexv
    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:
    .text
    .align 2
    .thumb
    .thumb_func
    .global LevelItemEvo

    main:
    push {r0-r7}
    add r0, r6, r7
    lsl r0, r0, #0x3
    add r0, r2, r0
    add r3, r0, r3
    ldrb r2, [r3, #0x2]
    mov r0, r8
    @decrypt Pokemon Species and Held Item
    mov r1, #0xc
    bl Decrypt
    mov r6, r0
    mov r0 r8
    mov r1, #0xB
    bl Decrypt
    mov r5, r0
    mov r0, r8
    mov r3, #0x0
    bl Loop

    @Checks species to table(looped)
    Loop:
    ldr r4, CustoPokeTable
    ldrh r4, [r4, r3]
    cmp r4, r5
    beq Item
    cmp r4, #0xFFFF
    beq Fail
    add r3, #0x2
    bl Loop

    @checks if item is good(not looped)
    Item:
    ldr r4, CustoItemTable
    ldrh r4, [r4, r3]
    cmp r4, r6
    beq Evo
    bl Fail

    Decrypt:
    ldr r2, decryptpoke
    bx r2

    Fail:
    pop {r0-r7}
    ldr r0, noevo
    bx r0

    Evo:
    mov r10, r3
    pop {r0-r7}
    mov r1, r10
    add r1, #0x2
    ldr r0, levelcheckloc
    bx r0

    .align
    levelcheckloc: .word 0x08043017
    noevo: .word 0x08043111
    CustoItemTable: .word 0x08######
    CustoPokeTable: .word 0x08######
    DecryptPoke: .word 0x083FBE8




    CustoItemTable
    00 c7 00 c7 00 c1 00 c0 FF FF
    {key: Metal Coat, Metal Coat, Deepseascale, deepseatooth}

    CustoPokeTable
    00 5f 00 7b 01 75 01 75 FF FF
    {Key: Onix, Scyther, Clamperl, Clamperl}

    Instructions:
    Insert the 2 tables into free space and adjust offsets in routine to reflect insertion.
    The two tables can be literally any size just end it with FF FF. The tables work as follows:
    Lets say your evolving a pokemon and it is in the table, it will check to see if your pokemon is in the table and then if it find it(lets say it was the fifth in the table) it will check to see if the pokemon is holding the item that is fifth in the table. Simple right?