Conversation Between FamiliaWerneck and Joexv
Showing Visitor Messages 136 to 150 of 155
-
June 16th, 2015 5:26 PMFamiliaWerneckFinding 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). -
June 16th, 2015 5:17 PMJoexvIt 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.
-
June 16th, 2015 5:05 PMFamiliaWerneckUsing 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? -
June 16th, 2015 4:34 PMJoexvIts 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.
-
June 16th, 2015 4:05 PMFamiliaWerneckI 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? -
June 16th, 2015 2:43 PMJoexvWell 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. -
June 16th, 2015 2:01 AMFamiliaWerneckI 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? -
June 15th, 2015 7:46 PMJoexvSo 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. -
June 15th, 2015 7:01 PMFamiliaWerneckNo 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? -
June 14th, 2015 9:36 AMJoexvYep that's it. There's no reason why it wouldn't be able to expand. Just make sure that it ends with FF FF.
-
June 14th, 2015 9:33 AMFamiliaWerneckGot 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? -
June 14th, 2015 8:20 AMJoexvYou 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. -
June 13th, 2015 9:18 PMFamiliaWerneckAs 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? -
June 13th, 2015 9:15 PMFamiliaWerneckSo 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? -
June 13th, 2015 9:07 PMJoexvIts 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?

