Conversation Between jiangzhengwenjzw and FamiliaWerneck
1 to 13 of 13
  1. FamiliaWerneck
    June 20th, 2015 2:04 AM
    FamiliaWerneck
    Thanks for the idea. I'll try that after I make the Level + Item routine work properly.
  2. jiangzhengwenjzw
    June 19th, 2015 8:46 PM
    jiangzhengwenjzw
    If evo-stone evolution can't be quit as you said, I think the way is possible. But as you can see, we all don't know much about the evolution routine @0x43110. However, as I've said before, you can add a breakpoint through your debugger(such as vba-sdl-h and no$gba debugger version) on condition that an instruction branch to the "encrypter" function (or the function to recalculate the stats of the evolving pokemon). So the general idea:
    1. find the location i've mentioned above
    2. in your evolution routine set a safe flag by using flag setter function. (abort if there's no shellder in your team and do not set the flag)
    3. make a branch after the instruction "bl recalculate stat function" (or you can adjust yourself), and in your new code simply check the flag and if it was set, find the shellder in your team and delete it, then you can branch back to the code. Absolutely you should clear the flag in this section of the code.

    I think this way is feasible though I haven't tried it.
  3. FamiliaWerneck
    June 19th, 2015 8:49 AM
    FamiliaWerneck
    I don't have an IDA and everything you said (at least the way you said) seems so much above my current level. =P
    Maybe checking the Evolutionary Stones won't give you an idea what routines they call when used in a Pokémon...
    I asked this, because me and joexv were thinking how we could bypass the problem with loosing Shellder when evolution is cancelled. kearnseyboy6 told me something about the Evolutionary Stones not being cancellable, so I thought about putting it to run with Slowpoke's evolution. That possible, right?
  4. jiangzhengwenjzw
    June 19th, 2015 8:37 AM
    jiangzhengwenjzw
    I don't know and I'm sorry about that as I even don't know that we can't use "b" to quit the evolution if we use an evolution stone. If you look into the evolution method pointer table @0x42fc4, you will find the evolution method of evolution stone is located at 0x43110 (which is the 7th pointer), which is also used as the abort routine pointer in the routines in the thread written by kearnseyboy6. I'm quite confused about that function as it is used as the pointer of 6 different evolution methods. Then it's obvious that there're something different in the registers or other things before entering the evolution code. However, I look into the routine that branch to the evolution routine and I haven't got useful information. The routine is located at around 0x42f96 and you can use ida to look into it.
    @0x42f86: get the pokemon index number
    @0x42fa4: get the evolution method index number
    @0x42fb6: get the evolution method pointer
    @0x42fb8: go to the evolution routine
    An interesting thing I've found is that the function use this instruction @0x42fa8: mov r3, r0
    Actually at that time r0 is [the evolution method index number -1]. As r0 will be immediately refreshed when branching to 0x43110 so r3 may give some useful information to the function at 0x43110. (The possibility is tiny as I think the function @0x43110 does not always use it's value.
    Another interesting thing is that the function around 0x42f86 stores the pokemon number to [r13, #8] and stores 0 to [r13, #4] and the function @0x43110 will use the first value. But I don't have enough time to look into the routine @0x43110 currently because I will have exams the next week.

    I really hope that these information will help you but all that I've said may be rubbish at all. :)
  5. FamiliaWerneck
    June 19th, 2015 6:37 AM
    FamiliaWerneck
    Bro, do you know what is the difference between regular evolutions and the stone evolutions that makes cancelling the evolution impossible?
    In other words, how can I make an evolution uncancellable?
  6. FamiliaWerneck
    June 16th, 2015 5:16 AM
    FamiliaWerneck
    Well, good luck there then. Hope we all make it through! HAHAHA
  7. jiangzhengwenjzw
    June 16th, 2015 5:13 AM
    jiangzhengwenjzw
    I will have exam tomorrow and the following two weeks I will have numerous exams... All students are suffering exams, haha. :)
  8. FamiliaWerneck
    June 16th, 2015 5:04 AM
    FamiliaWerneck
    I can try that later, surely. Not until next week, though. I'm on test week. =/
  9. jiangzhengwenjzw
    June 16th, 2015 4:56 AM
    jiangzhengwenjzw
    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)
  10. FamiliaWerneck
    June 16th, 2015 4:35 AM
    FamiliaWerneck
    Got what you meant. Yeah, I was thinking about this kind of glitches too. Two, three or five Slowpokes or Shellders in my party and stuff would get psyducked.
    I'm also thinking how to make an evolution for Slowbro and other for Slowking.
    But man, deleting the Pokémon after the evolution wouldn't solve the issue? Since they would stay in the same position in the party until the evolution is over, only then deleting Shellder seems to work.
  11. jiangzhengwenjzw
    June 16th, 2015 3:40 AM
    jiangzhengwenjzw
    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.
  12. FamiliaWerneck
    June 16th, 2015 1:49 AM
    FamiliaWerneck
    You saw the code I posted?
    Well, that b cancel thing is one of my doubts, as I never see where it goes in the other evolutions.
    Maybe using a compare with the "b cancel" option and if true, "beq exit". Else, it would just remove Shellder and get back to the OW.
    Plus, I didn't understand what is the problem with Slowpoke's index change. Won't all evolving Pokémons' index change?
  13. jiangzhengwenjzw
    June 15th, 2015 10:21 PM
    jiangzhengwenjzw
    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.)