The PokéCommunity Forums

The PokéCommunity Forums (https://www.pokecommunity.com/index.php)
-   Binary Hack Tutorials (https://www.pokecommunity.com/forumdisplay.php?f=66)
-   -   Adding new evolution methods [FR] (https://www.pokecommunity.com/showthread.php?t=329357)

kearnseyboy6 June 20th, 2014 1:51 AM

Adding new evolution methods [FR]
 
Hi everyone,

Today I am going to show you how to add more evolution methods.

Step 1 (Extending the table and limiters)
Spoiler:
First, fire up your ROM in a hex editor and navigate to 0x42FC4. Select 0x3C bytes and copy them to some free space.



Next, we must change the pointers to our new location (0x900000 in my case). Search C42F0408.
There is only one pointer at 0x42FC0.

Next the game has a limit on the number of evolutions. This is at 0x42FAA. Change this to the new number of evolutions (in hex)


Step 2 (Creating evolution routines; ASM needed)
Spoiler:
That table we pointed to contains the pointers to each evolution method, so if we write our own we can have a new evolution.

However writing a method can be quite difficult to explain. I'll try my best. Here is a working* script I wrote for Goodra's evolution (raining in the overworld)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global weatherevo

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

ldr r6, currentweather
ldrb r6, [r6, #0x0]
cmp r6, #0x3
beq rain
cmp r6, #0x5
beq rain
cmp r6, #0xD
beq rain
pop {r0-r7}
ldr r0, noevo
bx r0
rain:
mov r10, r3
pop {r0-r7}
mov r1, r10
add r1, #0x2
ldr r0, levelcheckloc
bx r0

.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
currentweather: .word 0x02036E12


Now the bolded section must always be included in the start, it is consistent mostly with all evolution routines. So put that in your code. Notice the red word (ldrb). This loads the argument in the evolution (item or level). An item uses a half word and a level uses a byte. This matters and affects the size of r2

Quote:

Check for appropriate level: levelcheckloc: .word 0x08043017
Go straight to the evolution (no levelcheck): evolutionloc: .word 0x0804310D
This leads to R2... This register contains the Argument, so if you need to check for a specific item... compare the item with R2. You cannot compare items and levels at the same time.

You also might see R3 -> R10 then R10 -> R1. This is necessary because you pop R0-R7.

Finally you will need this routine: Located HERE!!
TO use it in your script you need a bl instruction
Quote:

bl decrypt

decrypt: push {r0-r7}
mov r1, #0x##
ldr r2, decryptpoke
bx r2

decryptpoke: .word 0x0803FBE9
This should be enough to get you started. I recommend using Knizz' dis-assembly for further routines. I also will update this post when I become more knowledgeable as well.

Once you are done assemble the .asm file and place it in your ROM somewhere. Now go to your table and add another entry pointing to the assembled code (you do NOT need +1). Now


Step 3 (Making the routine work in the game)
Spoiler:
To make this compatible with G3HS open up the .ini file and navigate to these lines:

Quote:

evolutionmethods =
evomethodsproperties =
Add in a name for your method, and for properties add either Level, Item, None.
Note: Follow KK552's syntax for the ini file.

Finally open your ROM and in G3HS and work add the evolution and test it!!!



Final notes, I am a bit vague on the structure of the routine musts because I am still learning it. However finally all evolutions will be open-sourced and available below in the spoiler (will add more over time).

Spoiler:
Evolutions

NOTE:
If you have used the "Changed Number of Evolutions per MON'" button on G3HS, these routines ain't going to work.

Assemble them anyway and change the .bin file accordingly.

Quote:

8 evolutions per mon: Change F0 19 to 70 00
16 evolutions per mon: Change F0 19 to B0 00
32 evolutions per mon: Change F0 19 to F0 00


Evolve with a Fairy type move (KDS Credits)

Spoiler:
.text
.align 2
.thumb
.thumb_func
.global sylveon

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 r0, r8
mov r5, #0x0
loop:
mov r1, #0xD
add r1, r1, r5
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
ldr r4, movedata
mov r6, #0xC
mul r6, r1
add r4, r4, r6
ldrb r4, [r4, #0x2]
cmp r4, #0xXX @replace XX with 16 if you are using MrDollSteak's rombase, otherwise keep the index that you have set while adding fairy type
beq true
cmp r5, #0x3
beq exit
add r5, #0x1
b loop

decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
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 0x08250C04 @if you have repointed the moves table this needs to be changed as well, for MrDollSteak's rombase set to 0x08900000
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9

Pancham Evolution (KDS Credits)


Spoiler:
.text
.align 2
.thumb
.thumb_func
.global Pancham

main:
push {r0-r7}
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
ldr r3, basestattable
mov r4, #0x1C
mul r4, r1
add r3, r3, r4
ldrb r6, [r3, #0x6]
ldrb r7, [r3, #0x7]
cmp r6, #0x11
beq levelcheck
cmp r7, #0x11
beq levelcheck
cmp r5, #0x5
beq exit
add r5, #0x1
b loop

levelcheck:
pop {r0-r7}
ldr r0, levelcheckloc
bx r0

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

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

.align
basestattable: .word 0x08254784
firstpoke: .word 0x02024284
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9


Specific Map Evolution (Not available in G3HS yet, hex edit only)

Spoiler:
.text
.align 2
.thumb
.thumb_func
.global mapbankANDnapnumber

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 r0, r8
ldr r6, mapbank
ldrh r6, [r6, #0x0]
cmp r6, r2
bne exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
mapbank: .word 0x02031DBC


Male Evolutions (please don't forget to update your pokemon base stats table...)
Spoiler:
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
bl decrypt2
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
blt exit
mov r0, r8
mov r1, #0xFF
ldr r0, [r0, #0x0]
and r1, r0
mov r0, r8
bl decrypt
mov r11, r0
pop {r0-r7}
mov r5, r11
ldr r2, pokemondata
mov r4, #0x1C
mul r5, r4
add r5, r5, r2
ldrb r5, [r5, #0x10]
cmp r1, r5
blt exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit: pop {r0-r7}
ldr r0, noevo
bx r0
decrypt: push {r0-r7}
mov r1, #0xB
ldr r2, decryptpoke
bx r2
decrypt2: push {r0-r7}
mov r1, #0x38
ldr r2, decryptpoke
bx r2
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9
pokemondata: .word 0x08254784


Female Evolutions (please don't forget to update your pokemon base stats table...)
Spoiler:
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
bl decrypt2
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
blt exit
mov r0, r8
mov r1, #0xFF
ldr r0, [r0, #0x0]
and r1, r0
mov r0, r8
bl decrypt
mov r11, r0
pop {r0-r7}
mov r5, r11
ldr r2, pokemondata
mov r4, #0x1C
mul r5, r4
add r5, r5, r2
ldrb r5, [r5, #0x10]
cmp r1, r5
bge exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit: pop {r0-r7}
ldr r0, noevo
bx r0
decrypt: push {r0-r7}
mov r1, #0xB
ldr r2, decryptpoke
bx r2
decrypt2: push {r0-r7}
mov r1, #0x38
ldr r2, decryptpoke
bx r2
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9
pokemondata: .word 0x08254784


Raining in the Overworld (Goodra)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global weatherevo

main:
push {r0-r7}
ldr r6, currentweather
ldrb r6, [r6, #0x0]
cmp r6, #0x3
beq rain
cmp r6, #0x5
beq rain
cmp r6, #0xD
beq rain
pop {r0-r7}
ldr r0, noevo
bx r0
rain:
pop {r0-r7}
ldr r0, levelcheckloc
bx r0

.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
currentweather: .word 0x02036E12


Night Time Level Up (KDS credits)

Spoiler:
.text
.align 2
.thumb
.thumb_func
.global nightlevelup
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge level
cmp r5, #0x6
blt level
b exit
level:
pop {r0-r7}
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
time: .word 0x03005542


Day Time Level Induced Tyruant (KDS credits)

Spoiler:
.text
.align 2
.thumb
.thumb_func
.global dayLevel
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge exit
cmp r5, #0x6
bge level
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
level:
pop {r0-r7}
ldr r0, levelcheckloc
bx r0

.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
time: .word 0x03005542


Night time Item Hold Induced Evolution
(if you edited the Pokemon data structure table in the RAM the item clearing will not work)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global nightevoitemhold

main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge test
cmp r5, #0x6
blt test
b exit
test:
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r0, r8
mov r1, #0xC
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
bne exit
mov r1, #0xC
mov r0, r8
bl encrypt
pop {r0-r7}
mov r9, r3
pop {r0-r7}
mov r1, r9
ldr r0, levelcheckloc
bx r0
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
encrypt:
push {r0-r7}
ldr r2, blank
ldr r5, encryptpoke
bx r5
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
time: .word 0x03005542
blank: .word 0x020242A2
decryptpoke: .word 0x0803FBE9
encryptpoke: .word 0x0804037D

Day time Item Hold Induced Evolution (if you edited the Pokemon data structure table in the RAM the item clearing will not work)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global dayevoitemhold

main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge exit
cmp r5, #0x6
blt exit
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r0, r8
mov r1, #0xC
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
bne exit
mov r1, #0xC
mov r0, r8
bl encrypt
pop {r0-r7}
mov r9, r3
pop {r0-r7}
mov r1, r9
ldr r0, levelcheckloc
bx r0
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
encrypt:
push {r0-r7}
ldr r2, blank
ldr r5, encryptpoke
bx r5
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
time: .word 0x03005542
blank: .word 0x020242A2
decryptpoke: .word 0x0803FBE9
encryptpoke: .word 0x0804037D


Night Friendship (You can edit the routine in the table already because they don't work in FR)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global dayFriendship
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge friendshipevo
cmp r5, #0x6
blt friendshipevo
pop {r0-r7}
ldr r0, noevo
bx r0

.align
friendshipevo: .word 0x08043001
noevo: .word 0x08043111
time: .word 0x03005542


Day Friendship (You can edit the routine in the table already because they don't work in FR)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global dayFriendship
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge exit
cmp r5, #0x6
bge friendshipevo
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
friendshipevo: .word 0x08043001
noevo: .word 0x08043111
time: .word 0x03005542


Evolution by Move induced
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global Evomove

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 r0, r8
mov r5, #0x0
loop:
mov r1, #0xD
add r1, r1, r5
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
beq true
cmp r5, #0x3
beq exit
add r5, #0x1
b loop

decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
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
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9


Evolve with other Pokemon in Party
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global mantykeevo

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
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
decryptpoke: .word 0x0803FBE9


Secific Map Name evolution (Joexv Credits)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global mapevo

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
ldr r6, map
ldrb r6, [r6, #0x0]
cmp r6, r2
bne exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
map: .word 0x02036E10
More to come... Send in your evolutions


Lastly, acknowledgements go to Daniils and Jambo for their guidance and locations for everything.

~ Thank you and good luck

Superjub June 20th, 2014 11:02 AM

Definitely going to keep an eye on this thread, this will be extremely helpful! :D Thanks for posting this. ^^

Joexv June 20th, 2014 3:30 PM

So in theory this could be used to make a similar asm routine that could make a pokemon evolve when levling up in a certain map? Kinda like diamond and pearl where some pokemon needed to level up in mt cornet to evolve.

kearnseyboy6 June 20th, 2014 4:05 PM

Quote:

Originally Posted by joexv (Post 8310060)
So in theory this could be used to make a similar asm routine that could make a pokemon evolve when levling up in a certain map? Kinda like diamond and pearl where some pokemon needed to level up in mt cornet to evolve.

Yeh exactly. The routine for that will be similar to the raining in overworld routine.
The map is number is stored at 0x02036E10 (0x2 behind weather byte). All you need to do is compare that byte to the map number (eg: Pallet Town = 0x58 I think). There's a list around the site.

Joexv June 21st, 2014 3:24 PM

So this would make a pokemon evolve if leveled up in pallet town.(i dont know too much about asm so hopefully this works) I used you rain routine like you said and then changed the offset it calls and the number it is compared to.
Spoiler:
Code:

.text
.align 2
.thumb
.thumb_func
.global townevo

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
ldr r6, currenttown
ldrb r6, [r6, #0x0]
cmp r6, #0x56
beq town
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
town:
mov r1, #0x38
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
blt exit
mov r10, r3
pop {r0-r7}
mov r1, r10
add r1, #0x2
ldr r0, levelcheckloc
bx r0
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2

.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
currenttown: .word 0x02036E10



SBird June 21st, 2014 4:23 PM

Instead of checking for a specific map I would take a variable and check it's value, simply because you can have multiple maps asigned to the same evolution with this. (e.g. "evolves in a desert"), also you can excatly specify the place by setting the variable via non-mapscripts.

~SBird

Joexv June 21st, 2014 4:29 PM

Yea but wouldnt that be a whole lot more work? Since you would have to set the var everytime you enter and leave one of those maps. And you can set more than just one map with the same evolution, it would just need another line of asm right after
Code:

cmp r6, #0x56
beq town


so you could just have it say
Code:

cmp r6, #0x56
beq town
cmp r6, #0x57
beq town


Like in the rain evolution script it is comparing multiple numbers to apply for more than just one type of rain.

kearnseyboy6 June 21st, 2014 8:19 PM

Quote:

Originally Posted by joexv (Post 8311578)
So this would make a pokemon evolve if leveled up in pallet town.(i dont know too much about asm so hopefully this works) I used you rain routine like you said and then changed the offset it calls and the number it is compared to.
Spoiler:
Code:

.text
.align 2
.thumb
.thumb_func
.global townevo

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
ldr r6, currenttown
ldrb r6, [r6, #0x0]
cmp r6, #0x56
beq town
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
town:
mov r1, #0x38
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
blt exit
mov r10, r3
pop {r0-r7}
mov r1, r10
add r1, #0x2
ldr r0, levelcheckloc
bx r0
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2

.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
currenttown: .word 0x02036E10



Pretty nice. It would work in theory, Pallet Town is 0x58 I think, but to make it dynamic like SBird said we need to take advantage of the 'argument' that G3HS has. Since the maps are a byte long you would keep the start. You would compare your r6 with r2 (the argument).

Unfortunately in G3HS at the moment it only features level and item, so for this to work, you would be limited to 100 levels or maps that have values 0x64 and less. The good news is KK552 will be working on the list if the list is provided to him. I have FR but none else.

So here is how I would do the map name check:

Spoiler:
.text
.align 2
.thumb
.thumb_func
.global weatherevo

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
ldr r6, map
ldrb r6, [r6, #0x0]
cmp r6, r2
bne exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
map: .word 0x02036E10


It strips the ability for a level check however... but leafeon and glaceon don't have required levels do they? Just the map?

Sorry for the double post but anyone who has used these routines with expanded evolutions read the new instructions or they will not work.

They are now compatible with DoesntKnowHowToPlay's feature http://www.pokecommunity.com/images/templates/smilies/cerulean/20.%20boogie.gifhttp://www.pokecommunity.com/images/templates/smilies/cerulean/20.%20boogie.gifhttp://www.pokecommunity.com/images/templates/smilies/cerulean/20.%20boogie.gifhttp://www.pokecommunity.com/images/templates/smilies/cerulean/20.%20boogie.gif

jirachiwishmaker June 21st, 2014 9:37 PM

Could you please do research for Emerald, too?

Avara June 22nd, 2014 7:05 AM

Thank you so much for sharing this, this is amazing! =)

STikER June 24th, 2014 11:59 PM

This is great tutorial, finally I can include new evolution methods. But is it possible to make Pokemon forms with similar method? I made eighteen different-types Arceus as separate Pokemon, and now I want when Arceus is holding a Plate, it changes form (technically evolves) to another form, but when there is no Plate, it reverts back to regular form. But I don't want to see evolution screen, simplify, you give Plate to Arceus and it changes form.

kearnseyboy6 June 25th, 2014 4:11 AM

Quote:

Originally Posted by Ollie11 (Post 8316554)
This is great tutorial, finally I can include new evolution methods. But is it possible to make Pokemon forms with similar method? I made eighteen different-types Arceus as separate Pokemon, and now I want when Arceus is holding a Plate, it changes form (technically evolves) to another form, but when there is no Plate, it reverts back to regular form. But I don't want to see evolution screen, simplify, you give Plate to Arceus and it changes form.

Yes forms are possible on the todo list. I am still thinking of a good method; I'm leaning towards making each form a different index. But we will see. Don't expect in the next month though, I'm on a break now sorry.

Phenom2122 July 2nd, 2014 10:49 PM

For anyone interested in doing this for Emerald (I'm not sure if this info is already around), the evolution table that needs repointing is at 0x06D198
Its one and only pointer is also right behind it at 0x06D194
And it appears there are an extra two bytes in whatever code runs there in Emerald so the spacing is not identical to Fire Red (it is out by two) but I am pretty sure the limit on evolutions is at 0x06D180.

I haven't tested this out for myself yet (I'm too busy on too many things and not in a position to test yet) but I am 99% sure this is correct.

jirachiwishmaker July 4th, 2014 12:49 AM

2 Attachment(s)
I used your routines and change a few pointers to match with Emerald. It showed me this warning while I am assembling the routine:
http://www.pokecommunity.com/attachment.php?attachmentid=72565&stc=1&d=1404469315

The bin file after assembled:
http://www.pokecommunity.com/attachment.php?attachmentid=72566&stc=1&d=1404469315

The routine which I using:
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global Evomove

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 r0, r8
mov r5, #0x0
loop:
mov r1, #0xD
add r1, r1, r5
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
beq true
cmp r5, #0x3
beq exit
add r5, #0x1
b loop

decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
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
levelcheckloc: .word 0x0806D32F
noevo: .word 0x0806D333
decryptpoke: .word 0x0806A519


After finished all steps, I tested and realized that the pokemon won't evolute anymore. Is this problem caused by the warning? If not, what happened?

Phenom2122 July 4th, 2014 4:07 AM

I'm afraid I'm no ASM expert so I cannot say what is wrong with the script. I just did a quick test with my repointed 255 evolution methods and a normal evolution went absolutely fine, no issues. I will try now assigning that poke the 255th evolution (they all point to the same places for now) and if that works I will try one of these routines.
I have never has an error like that compiling ASM so I'm really not sure :(
Edit: I just did the stupidest thing and wasted good time lol. I wanted to test evolving my Pokémon from somewhere around the 244th slot (a duplicate of level up). Then I saw that it did not evolve at all :O Then I sweated like crazy because I thought I had the wrong limiter byte. Tried a few things, nothing worked, then I realised I forgot to click 'save tab' in G3HS lol.
SoSo after a proper test, expanding the amount of evolutions definitely works.
Sorry I can't help you with your routine, perhaps OP can help you when they see this. (I've noticed other people aren't very quick to help around here)

jirachiwishmaker July 4th, 2014 7:26 PM

Quote:

Originally Posted by Phenom2122 (Post 8329718)
I'm afraid I'm no ASM expert so I cannot say what is wrong with the script. I just did a quick test with my repointed 255 evolution methods and a normal evolution went absolutely fine, no issues. I will try now assigning that poke the 255th evolution (they all point to the same places for now) and if that works I will try one of these routines.
I have never has an error like that compiling ASM so I'm really not sure :(
Edit: I just did the stupidest thing and wasted good time lol. I wanted to test evolving my Pokémon from somewhere around the 244th slot (a duplicate of level up). Then I saw that it did not evolve at all :O Then I sweated like crazy because I thought I had the wrong limiter byte. Tried a few things, nothing worked, then I realised I forgot to click 'save tab' in G3HS lol.
SoSo after a proper test, expanding the amount of evolutions definitely works.
Sorry I can't help you with your routine, perhaps OP can help you when they see this. (I've noticed other people aren't very quick to help around here)

Thanks a lot for your attention and testing. The new evolutions won't work because I have had expanded the number of evolution by G3HS. Kearnseyboy6 had been mentioned early but I missed it out.

mrtienduc1999 July 5th, 2014 2:04 PM

Oh, good tut! I give you a ideal :)) check gender to evolution. I think it needs 2 asm code: 1 male and 1 female. And check level to evolution. In gen 4, it has a pokemon evolution check gender...

STikER July 6th, 2014 1:49 AM

Quote:

Originally Posted by mrtienduc1999 (Post 8331973)
Oh, good tut! I give you a ideal :)) check gender to evolution. I think it needs 2 asm code: 1 male and 1 female. And check level to evolution. In gen 4, it has a pokemon evolution check gender...

For gender it might check Pokemon ID. There is 1 third gen Pokemon that have evolution with low or high PID on level 7. It's Wurmple! So, only left to find Wurmple evolution routines and edit it, so it checks not PID's 2 last bytes, but only one (last byte means gender of Pokemon). I don't have much ASM skills, so I can't do it by myself, but if anyone can, use this method.

mrtienduc1999 July 6th, 2014 3:51 AM

I dont understand personality value, but i think it has PID < 4 and it's a male or female. So if we use PID, we will have some problems with logic lol :D i hope you understand!

Doctis July 6th, 2014 11:59 AM

Is there any way to disable evolution unless the player has an item in their inventory? All evolutions would proceed normally once the item is obtained.

stephenbrook July 8th, 2014 1:18 AM

So how would I go about adding the item held item ones into a rom then? I can't really do much with regards to hex but if there is an editor out there that includes this or even if all of the ones so far were put into a base rom?

STikER July 8th, 2014 11:57 AM

Quote:

Originally Posted by stephenbrook (Post 8336710)
So how would I go about adding the item held item ones into a rom then? I can't really do much with regards to hex but if there is an editor out there that includes this or even if all of the ones so far were put into a base rom?

You mean held items? You can use any item editor to replace "?????????" items with held item. Follow this tutorial but not the last part (doing item to do something), we don't need it. Then open G3HS, and set held item evolution method on Pokemon that you want to evolve with it, and also choose your newly created item.

mrtienduc1999 July 8th, 2014 10:13 PM

Uk... I think we can write a asm code to replace evolution stones into evolution items. I viewed a topic, it show to me how to create a new evolution stones, but i dont understand it. If we create a method: evolution items: items use out of battle: potions, stones, ..etc..., we will not create a new stone. I Think it's simpler.

kearnseyboy6 July 9th, 2014 5:18 AM

Quote:

Originally Posted by jirachiwishmaker (Post 8330829)
Thanks a lot for your attention and testing. The new evolutions won't work because I have had expanded the number of evolution by G3HS. Kearnseyboy6 had been mentioned early but I missed it out.

I updated this before you posted but maybe you missed it, this wasn't in the OP until I while ago:

NOTE: If you have used the "Changed Number of Evolutions per MON'" button on G3HS, these routines ain't going to work.

Assemble them anyway and change the .bin file accordingly.

Quote:
8 evolutions per mon: Change F0 19 to 70 00
16 evolutions per mon: Change F0 19 to B0 00
32 evolutions per mon: Change F0 19 to F0 00
Try that :)

kearnseyboy6 July 9th, 2014 5:24 AM

Quote:

Originally Posted by mrtienduc1999 (Post 8333093)
I dont understand personality value, but i think it has PID < 4 and it's a male or female. So if we use PID, we will have some problems with logic lol :D i hope you understand!

Nearly, if the PID has a value less than the gender value in the pokemon stats table, then it's female or male I think. So doing a compare is quite achievable and I'll have it written up in a day or so.

kearnseyboy6 July 9th, 2014 5:30 AM

Quote:

Originally Posted by mrtienduc1999 (Post 8338535)
Uk... I think we can write a asm code to replace evolution stones into evolution items. I viewed a topic, it show to me how to create a new evolution stones, but i dont understand it. If we create a method: evolution items: items use out of battle: potions, stones, ..etc..., we will not create a new stone. I Think it's simpler.

Creating new stones can be done here:

http://www.pokecommunity.com/showthread.php?t=296729

If you want the gender check for gallade and froslass... I haven't broken down the stone routine yet so I can't do it! And it seems really difficult to accopmlish! I'll try it soon!

stephenbrook July 9th, 2014 9:56 AM

Quote:

Originally Posted by Ollie11 (Post 8337469)
You mean held items? You can use any item editor to replace "?????????" items with held item. Follow (icant post urls yet) but not the last part (doing item to do something), we don't need it. Then open G3HS, and set held item evolution method on Pokemon that you want to evolve with it, and also choose your newly created item.

I was meaning, for example, is there a way I can make it so for onix to evolve it needs to level up holding metal coat?

STikER July 9th, 2014 11:36 AM

Quote:

Originally Posted by stephenbrook (Post 8339298)
I was meaning, for example, is there a way I can make it so for onix to evolve it needs to level up holding metal coat?

Then, in G3HS simply set evolution by level-up holding an item for Onix.

Quote:

Originally Posted by kearnseyboy6 (Post 8338908)
If you want the gender check for gallade and froslass... I haven't broken down the stone routine yet so I can't do it! And it seems really difficult to accopmlish! I'll try it soon!

You might make evolution method such as Burmy's (females to Wormadam, males to Mothim), because you already made routines with level check, so it might be simplier for you.

mrtienduc1999 July 9th, 2014 9:56 PM

Quote:

Originally Posted by kearnseyboy6 (Post 8338899)
Nearly, if the PID has a value less than the gender value in the pokemon stats table, then it's female or male I think. So doing a compare is quite achievable and I'll have it written up in a day or so.

^^ Thanks you so much. it help me very much :)

stephenbrook July 12th, 2014 12:06 PM

I'm completely lost by this. Starting from scratch how do I make it so that if Onix is holding the metal coat and levels up he evolves to steelix?

I can just about get my head around hex but this ASM lark? I'm lost, I know its doable as I have seen it on heartgold hacks

STikER July 12th, 2014 1:05 PM

Quote:

Originally Posted by stephenbrook (Post 8345403)
I'm completely lost by this. Starting from scratch how do I make it so that if Onix is holding the metal coat and levels up he evolves to steelix?

I can just about get my head around hex but this ASM lark? I'm lost, I know its doable as I have seen it on heartgold hacks

Okay, so now I will explain all. First, compile 4th (for night evolution) or 5th (for day evolution) ASM routine in kearnseyboy6's list in first post. Then, to make these routines work, you must follow tutorial (finding evolution routine, repointing it changing limiters and setting new evolution method in G3HS's ini). Because they need day and night system, implement it to rom (the best for begginers is primedialga's DNS). And then, in G3HS, set evolution to Onix. And only after all of this evolution will work.
Besides, this tutorial is really simple. Idk why you getting it so hard.
P.S. If you don't know how to compile and insert ASM routine, find tutorial somewhere. I'm not going to teach you this.

mrtienduc1999 July 12th, 2014 1:39 PM

Quote:

Originally Posted by kearnseyboy6 (Post 8338908)
Creating new stones can be done here:

http://www.pokecommunity.com/showthread.php?t=296729

If you want the gender check for gallade and froslass... I haven't broken down the stone routine yet so I can't do it! And it seems really difficult to accopmlish! I'll try it soon!

Thank so much again! :) now, i can create new stones, if i want!

stephenbrook July 13th, 2014 1:03 AM

So frustrating, I have tried it but now I can't open my ROM in . I guess I'll have to hope for a program that can do this as I clearly have no chance

STikER July 13th, 2014 1:26 AM

Quote:

Originally Posted by stephenbrook (Post 8346455)
So frustrating, I have tried it but now I can't open my ROM in . I guess I'll have to hope for a program that can do this as I clearly have no chance

Okay, I hope you made backup or copy of your rom. Send me PM with your ips patch for rom (if you don't know what is that, simply PM me). And also send me your G3HS ini, so I can include all new evolution methods. Then, I will send you ips patch with all evolution methods. Simple.

anonyboy July 13th, 2014 3:39 AM

Quote:

Originally Posted by Ollie11 (Post 8346470)
Okay, I hope you made backup or copy of your rom. Send me PM with your ips patch for rom (if you don't know what is that, simply PM me). And also send me your G3HS ini, so I can include all new evolution methods. Then, I will send you ips patch with all evolution methods. Simple.

May You please publish the ips with all the evo methods here? just thought it'll ease up for many people

STikER July 13th, 2014 6:22 AM

1 Attachment(s)
Quote:

Originally Posted by anonyboy (Post 8346613)
May You please publish the ips with all the evo methods here? just thought it'll ease up for many people

Okay, I'll publish it here.

EDIT: There is archive in attachments with patch and G3HS ini (made it from fresh, because stephenbrook's rom was broken)

STikER July 13th, 2014 10:44 AM

Quote:

Originally Posted by PurpleOrange (Post 8347227)
errr is this supposed to have two mains?

Simply remove second main and it will work.

kearnseyboy6 July 14th, 2014 1:16 AM

Quote:

Originally Posted by Ollie11 (Post 8347234)
Simply remove second main and it will work.

Thanks! I will remove that main... Silly me :)

jirachiwishmaker July 14th, 2014 2:30 AM

Quote:

Originally Posted by kearnseyboy6 (Post 8348385)
Thanks! I will remove that main... Silly me :)

I have tried the Day time Item Hold Induced Evolution routine, it won't works anymore. The "main" no need to remove, it must be change to "loop". Like the following:

Spoiler:
.text
.align 2
.thumb
.thumb_func
.global dayevoitemhold

main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge exit
cmp r5, #0x6
blt exit
loop:
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r0, r8
mov r1, #0xC
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
bne exit
mov r1, #0xC
mov r0, r8
bl encrypt
pop {r0-r7}
mov r9, r3
pop {r0-r7}
mov r1, r9
ldr r0, levelcheckloc
bx r0
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
encrypt:
push {r0-r7}
ldr r2, blank
ldr r5, encryptpoke
bx r5
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
time: .word 0x03005542
blank: .word 0x020242A2
decryptpoke: .word 0x0803FBE9
encryptpoke: .word 0x0804037D

kearnseyboy6 July 14th, 2014 3:15 AM

Quote:

Originally Posted by jirachiwishmaker (Post 8348435)
I have tried the Day time Item Hold Induced Evolution routine, it won't works anymore. The "main" no need to remove, it must be change to "loop".

There should be no need to change that, I left the main in by accident. because the code doesn't even reference 'main' anywhere means that it isn't necessary. IIRC the 'main' at the start is just convention and good habitat; if you were to loop back there then it's necessary.

Your error might be the evolution expander in G3HS, as Doesn't slightly altered the game's routine I use, so just follow the instructions in the OP :)

Trainer 781 July 14th, 2014 3:28 AM

I am trying to attempt to create a routine for Evolution During Day From Certain Level (i.e. Tyrunt) by looking at routines for other evolution methods.
The pokemon by this method is evolved in day due to level up and does not evolve in night, but is unable to check the required level in the argument. (i.e. evolves at any level during day on levelling up). Can somebody tell me what I am missing>

Code:

.text
.align 2
.thumb
.thumb_func
.global daylevelup

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
ldr r6, time
ldrb r6, [r6, #0x0]
cmp r6, #0x15
bge exit
cmp r6, #0x6
blt exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
time: .word 0x03005542



kearnseyboy6 July 14th, 2014 5:49 AM

Quote:

Originally Posted by KDS (Post 8348469)
I am trying to attempt to create a routine for Evolution During Day From Certain Level (i.e. Tyrunt) by looking at routines for other evolution methods.
The pokemon by this method is evolved in day due to level up and does not evolve in night, but is unable to check the required level in the argument. (i.e. evolves at any level during day on levelling up). Can somebody tell me what I am missing>

Code:

.text
.align 2
.thumb
.thumb_func
.global daylevelup

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
ldr r6, time
ldrb r6, [r6, #0x0]
cmp r6, #0x15
bge exit
cmp r6, #0x6
blt exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
time: .word 0x03005542



0x0804310D: That location will jump straight to the evolution, ie: no check. If you want to go to the level check routine you need 0x08043017.

Now, you can either change that or do your own level check. You loaded the level into r2 with this code:

ldrb r2, [r3, #0x2]

You can decrypt your level with the decrypt function and compare, or just use the level check already in the game stated above.

PS. Can I use and credit your routine in the OP? It works on my rom :)

Trainer 781 July 14th, 2014 7:12 AM

Sure, use it. And thank you for telling the right offset

Trainer 781 July 27th, 2014 7:30 AM

^- Just remove these lines in the night time item hold evolution then you are set:

Code:

ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge test
cmp r5, #0x6
blt test
b exit
test:



Trainer 781 July 27th, 2014 8:12 AM

Yes, but not necessary. Remove it because now it has no use.

GoGoJJTech July 27th, 2014 8:26 PM

I really hope you understand that there are lines you need to change based on how many evolutions per pokemon you have. Without those changes, people will have errors.

kearnseyboy6 July 27th, 2014 11:49 PM

Quote:

Originally Posted by GoGoJJTech (Post 8372645)
I really hope you understand that there are lines you need to change based on how many evolutions per pokemon you have. Without those changes, people will have errors.

It's covered already in the tutorial ;)

jirachiwishmaker July 27th, 2014 11:52 PM

Quote:

Originally Posted by KDS (Post 8371658)
Yes, but not necessary. Remove it because now it has no use.

Do you know the RAM Map or RAM Map Name of Emerald?

Trainer 781 July 28th, 2014 7:56 AM

^ -Well no, because I have not hacked emerald yet. So I don't have much info about emerald offsets.

GoGoJJTech July 28th, 2014 8:13 AM

Quote:

Originally Posted by kearnseyboy6 (Post 8372876)
It's covered already in the tutorial ;)

o rlly
>.<
Derp moment there, continue on :D

anonyboy August 2nd, 2014 4:29 AM

I've Added move induced Evoultion To the rom, but how do i make it display on g3hs, And should i put freespace in place of the table that's repointed in the beginning of the tut?

EDIT: It Shows up In G3HS But uses the item table and A Ton of garbage after it, How do i Make it Show moves?

Trainer 781 August 2nd, 2014 10:11 AM

Quote:

Originally Posted by anonyboy (Post 8381403)
I've Added move induced Evoultion To the rom, but how do i make it display on g3hs, And should i put freespace in place of the table that's repointed in the beginning of the tut?

EDIT: It Shows up In G3HS But uses the item table and A Ton of garbage after it, How do i Make it Show moves?

You have to cross-reference the move id with item id, i.e. in G3HS suppose you want to evolve by learning the move pound, gets its move_id which is 0x1, now search the item which has the same item_id of 0x1 (say masterball for example, don't remember the item with id 0x1), set the item with the id 0x1 in G3hs, then the pokemon will evolve by learning pound. This is a bit inconvenient, but this only the way you can set the evo method for now. (The future versions of G3HS are expected to add the dropdown list for moves and mapnames).

As for filling the original table with freespace is not neccessary, but generally, it is a good practice while relocating tables as the data there is practically useless, and if big tables are repointed then you can also get some extra amount of freespace.

anonyboy August 2nd, 2014 4:09 PM

Quote:

Originally Posted by KDS (Post 8381780)
You have to cross-reference the move id with item id, i.e. in G3HS suppose you want to evolve by learning the move pound, gets its move_id which is 0x1, now search the item which has the same item_id of 0x1 (say masterball for example, don't remember the item with id 0x1), set the item with the id 0x1 in G3hs, then the pokemon will evolve by learning pound. This is a bit inconvenient, but this only the way you can set the evo method for now. (The future versions of G3HS are expected to add the dropdown list for moves and mapnames).

As for filling the original table with freespace is not neccessary, but generally, it is a good practice while relocating tables as the data there is practically useless, and if big tables are repointed then you can also get some extra amount of freespace.

Actually It eventually showed me The move list but wasn't working in the game.
BTW, What exactly do i need to edit in the Pokemon BST Table to make The gender Evolutions work?

kearnseyboy6 August 2nd, 2014 11:25 PM

Quote:

Originally Posted by PurpleOrange (Post 8381621)
i've found a bug regarding the level up with item in the night/day, when evolving if you cancel the evolution, the item used still disappears, is there any way to fix that?

Aaaaah nope, dammit sorry.

kearnseyboy6 August 4th, 2014 1:59 AM

Quote:

Originally Posted by PurpleOrange (Post 8382876)
is there any way to make it so you cannot cancel the evolution? or not get rid of the item at all? they're not ideal but they'd fix the problem

yes you can actually sorry! I'll do some research on the evolution stone as that's where you can't press the B button. I'm super busy at the moment but I'll try to have it done by the end of the week!

Mustachemon August 6th, 2014 6:57 AM

The patch someone posted does not work with MrDollSteak's rombase. Could someone please add a patch that works with the rombase?

Edit: It probably has to do with the .ini, I'll investigate.

Edit 2: Fixed it. Just a quick .ini change and I got it to work! :)

Evil Goku August 18th, 2014 10:11 AM

Thanks for information bro Now I will Evol with Day And Night Like Pokemon PPD HGSS

daniilS August 19th, 2014 4:16 AM

Quote:

Originally Posted by kearnseyboy6 (Post 8384552)
yes you can actually sorry! I'll do some research on the evolution stone as that's where you can't press the B button. I'm super busy at the moment but I'll try to have it done by the end of the week!

Hmm, new issue. I will also look into it.

persian_17 August 28th, 2014 2:26 AM

Could you do an evolution which a pokemon will evolve just by holding an item, and evolve back if you remove the held item? it could be a good alternative for mega evolution... ^_^

daniilS August 28th, 2014 2:35 AM

Quote:

Originally Posted by persian_17 (Post 8417506)
Could you do an evolution which a pokemon will evolve just by holding an item, and evolve back if you remove the held item? it could be a good alternative for mega evolution... ^_^

Yeah, it would just always be mega evolved, even in the overworld. Also it would allow players to have 6 mega evolved pokemon on their team, wouldn't require a mega ring, and probably would have to be a simple asm routine to change the index number based on a hold item (which I have made and still need to clean up before publishing) rather than an evolution routine.

I think we'd need more than that.

persian_17 August 28th, 2014 2:49 AM

Quote:

Originally Posted by daniilS (Post 8417513)
Yeah, it would just always be mega evolved, even in the overworld. Also it would allow players to have 6 mega evolved pokemon on their team, wouldn't require a mega ring, and probably would have to be a simple asm routine to change the index number based on a hold item (which I have made and still need to clean up before publishing) rather than an evolution routine.

I think we'd need more than that.

my idea is to have only 1 universal stone that will serve as a mega stone for all, and will be given only one in-game, ithink it is alright for a pokemon to stay mega evolved out of the battle, but i dont know what to do for x and y variants of charizard and mewtwo :(

i have another idea, what about a reverse type of nincada's evolution,
e.g. Slowpoke will evolve to slowbro if you have a shellder in the team. but shellder will be removed to the team after slowpoke evolved.

daniilS August 28th, 2014 3:29 AM

Quote:

Originally Posted by persian_17 (Post 8417524)
i have another idea, what about a reverse type of nincada's evolution,
e.g. Slowpoke will evolve to slowbro if you have a shellder in the team. but shellder will be removed to the team after slowpoke evolved.

I think it would be easier to edit the Mantyke-Mantine evo for that.

persian_17 August 28th, 2014 8:59 AM

Quote:

Originally Posted by daniilS (Post 8417558)
I think it would be easier to edit the Mantyke-Mantine evo for that.

But the remoraid stays in the party right? its better if shellder and slowpoke will be joined like what should happen

daniilS August 28th, 2014 9:44 AM

Quote:

Originally Posted by persian_17 (Post 8417826)
But the remoraid stays in the party right? its better if shellder and slowpoke will be joined like what should happen

That's why I said edit. randomfillertoreachcharacterminimum

kearnseyboy6 August 28th, 2014 7:08 PM

Quote:

Originally Posted by persian_17 (Post 8417826)
But the remoraid stays in the party right? its better if shellder and slowpoke will be joined like what should happen

In the last section I explain how to make it compatible with G3HS, simply for KK552's convention and you can make any pokemon evolve with any pokemon. If you want the pokemon to disappear after evolution, well that's a whole kettle of fish.

Lance32497 September 1st, 2014 6:37 PM

Quote:

Originally Posted by kearnseyboy6 (Post 8309246)
Step 2 (Creating evolution routines; ASM needed)
[SPOILER]That table we pointed to contains the pointers to each evolution method, so if we write our own we can have a new evolution.

However writing a method can be quite difficult to explain. I'll try my best. Here is a working* script I wrote for Goodra's evolution (raining in the overworld)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global weatherevo

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

ldr r6, currentweather
ldrb r6, [r6, #0x0]
cmp r6, #0x3
beq rain
cmp r6, #0x5
beq rain
cmp r6, #0xD
beq rain
pop {r0-r7}
ldr r0, noevo
bx r0
rain:
mov r10, r3
pop {r0-r7}
mov r1, r10
add r1, #0x2
ldr r0, levelcheckloc
bx r0

.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
currentweather: .word 0x02036E12[/B]

How can I insert this routine in my rom, because it is not he same in the tutorial given by other here..... He/She says that to call that routine in a rom, I must call that using XSE..... Just a noob question...xD
Quote:

Once you are done assemble the .asm file and place it in your ROM somewhere. Now go to your table and add another entry pointing to the assembled code (you do NOT need +1).
I dont get that, so after I wrote THE RAIN EVO METHOD in THUMB assembler, I need to right that again inTHUMB ASSEMBLER? then after what will I do? Do I need to edit hex or something....sorry for the questions, I just want to know how to compile that and make it works.

Quote:

Step 3 (Making the routine work in the game)
[SPOILER]To make this compatible with G3HS open up the .ini file and navigate to these lines:

Add in a name for your method, and for properties add either Level, Item, None.
Note: Follow KK552's syntax for the ini file.
another that confuses my mind.... I tried to edit that in G#HS but nothing happened... and Will you give me a link for KK552's syntax for the ini file . another one, will you give me a clearer example of what will I edit in the ini file... for example in evomethod blah blah blah, I just replace the offset of offset I placed my asm or something........


sorry for the questions

Lance32497 September 2nd, 2014 2:16 AM

Quote:

Originally Posted by kearnseyboy6 (Post 8309246)
bl decrypt
decrypt: push {r0-r7}
mov r1, #0x ##
ldr r2, decryptpoke
bx r2
decryptpoke: .word 0x0803FBE9

also, I dont know what do you mean in #0x ## is that a variable for a certain byte, example #0x16 that refers to a fairy or something,

How should I insert that in a Rom? Is that necessary to write? and Is that seperated in the first asm?

kearnseyboy6 September 2nd, 2014 8:52 PM

Quote:

Originally Posted by Lance32497 (Post 8422889)
How can I insert this routine in my rom, because it is not he same in the tutorial given by other here..... He/She says that to call that routine in a rom, I must call that using XSE..... Just a noob question...xD

I dont get that, so after I wrote THE RAIN EVO METHOD in THUMB assembler, I need to right that again inTHUMB ASSEMBLER? then after what will I do? Do I need to edit hex or something....sorry for the questions, I just want to know how to compile that and make it works.


another that confuses my mind.... I tried to edit that in G#HS but nothing happened... and Will you give me a link for KK552's syntax for the ini file . another one, will you give me a clearer example of what will I edit in the ini file... for example in evomethod blah blah blah, I just replace the offset of offset I placed my asm or something........


sorry for the questions

Firstly all routines you compile you must put anywhere in the ROM with free space that ends in either 0,4,8,C. You then take that location and put it in the next entry of the table you repointed in step 1. No SXE is needed.

Then open up the ini, and follow the format for G3HS (there is only 'level','item','trade') to add your own entries.

Lance32497 September 3rd, 2014 1:40 AM

Quote:

Originally Posted by kearnseyboy6 (Post 8424150)
Firstly all routines you compile you must put anywhere in the ROM with free space that ends in either 0,4,8,C. You then take that location and put it in the next entry of the table you repointed in step 1. No SXE is needed.

Then open up the ini, and follow the format for G3HS (there is only 'level','item','trade') to add your own entries.

sorry, but can you give the link on how to edit .ini file?
and my second question...How can I perform bl routine

TIA

Chronosplit October 6th, 2014 2:44 PM

Question, I'm curious if anyone's tried this.

Let's say I used the methods here to introduce leveling up as male only, and made Kirlia level-up as a male in to evolve into Gallade. But I leave Gardevoir's evolution at plain level-up as any gender, except at a higher level. Let's say Gallade is at 25 and Gardevoir is at 30.

Will the world explode if I left things like this? What happens if someone wants to raise a Male Gardevoir under these conditions?

Oh, and do I need to change an item into an evolutionary stone in order to use it for leveling-up while holding an item?

MrDollSteak October 6th, 2014 6:59 PM

Quote:

Originally Posted by Projectwolfie (Post 8461773)
Question, I'm curious if anyone's tried this.

Let's say I used the methods here to introduce leveling up as male only, and made Kirlia level-up as a male in to evolve into Gallade. But I leave Gardevoir's evolution at plain level-up as any gender, except at a higher level. Let's say Gallade is at 25 and Gardevoir is at 30.

Will the world explode if I left things like this? What happens if someone wants to raise a Male Gardevoir under these conditions?

Oh, and do I need to change an item into an evolutionary stone in order to use it for leveling-up while holding an item?

It wouldn't work, Gardevoir would need to be female. You can't have Level Up and Friendship evolutions for the same reason. I'm pretty sure that the game doesn't know how to differentiate between the two evolutions if they activate at the same time (if you had a lvl 29 male kirlia that hit 30)

kearnseyboy6 October 6th, 2014 10:05 PM

Quote:

Originally Posted by MrDollSteak (Post 8461962)
It wouldn't work, Gardevoir would need to be female. You can't have Level Up and Friendship evolutions for the same reason. I'm pretty sure that the game doesn't know how to differentiate between the two evolutions if they activate at the same time (if you had a lvl 29 male kirlia that hit 30)

Not exactly, the game can use 1 variable argument (visible in G3HS) which can be a level, hold item, map name, weather, move etc.

There are two branching locations as well:

Check for appropriate level: levelcheckloc: .word 0x08043017
Go straight to the evolution (no levelcheck): evolutionloc: .word 0x0804310D

Also specifics relating to the properties of the pokemon ie: gender, stats, happiness etc can all be decrypted from the pokemon. So yes you can decrypt happiness and then compare it and send it to the levelcheck location.

~SAGE October 7th, 2014 2:25 AM

when i apply the .ips in my rom, the rom crashs,
why?
i've installed the patch of jonkane with 870pkm,
cold u tell me what new types of evolution are included in this new patch?

kearnseyboy6 October 7th, 2014 2:47 PM

Quote:

Originally Posted by laflacapkm (Post 8462127)
when i apply the .ips in my rom, the rom crashs,
why?
i've installed the patch of jonkane with 870pkm,
cold u tell me what new types of evolution are included in this new patch?

No idea, you will have to discuss that with jonkane and ask where he repointed everything in his patch.

Lance32497 October 15th, 2014 10:55 PM

Hey the other routines can now import to rom? or I need to put bl code?

anonyboy October 15th, 2014 11:14 PM

Quote:

Originally Posted by kearnseyboy6 (Post 8462590)
No idea, you will have to discuss that with jonkane and ask where he repointed everything in his patch.

Basically he dosen't need to ask, he just need to go to the offset 0x42fc0 and then to the pointer located there.

Quote:

Originally Posted by PurpleOrange (Post 8473427)
i don't know if i should put this here but whatever. for emerald, the table that needs to be copied to free space is at 0x6D198. and the offset that needs to be changed to the repointed table is at 0x6D194. for ruby, the table that needs to be copied to free space is at 0x3F58C. and the offset that needs to be changed to the repointed table is at 0x3F588. however i do not know where the limiting bytes are for either of them

Try Changing In emerald 0x6D180 and in ruby it is 0x3F574.

HidoranBlaze October 19th, 2014 5:55 PM

Quote:

Originally Posted by PurpleOrange (Post 8474102)
can any one tell me what's wrong with this routine, it's for specific map name evolution in emerald

Spoiler:
.text
.align 2
.thumb
.thumb_func
.global mapevo

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
ldr r6, map
ldrb r6, [r6, #0x0]
cmp r6, r2
bne exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
levelcheckloc: .word 0x0806D32F
noevo: .word 0x0806D333
map: .word 0x02036E10

i figure it may have something to do with the numbers at the bottom, but i'm not good with asm

I just looked at your map bank offset in VBA's memory viewer, and it seems like your offset is wrong. (It had a FF byte in it, and it didn't change when I went from Petalburg City to Route 102) I'll try and find the correct map bank offset, and I'll notify you if I find it.
EDIT: the map bank offset seems to be 0x020322E4. Try that, and see if it works. If it doesn't work, the offsets for the levelcheckloc or the noevo could be wrong. (or the evolutions work differently for em, but I highly doubt that)
EDIT2: *facepalm
I misunderstood which routine you were using. I thought you were using the map bank routine, instead of the map name routine. Sorry about that. That being said though, you probably still have the wrong map name offset, since the ram offsets for fr and em are usually different.

jirachiwishmaker October 20th, 2014 4:02 AM

Quote:

Originally Posted by PurpleOrange (Post 8474102)
can any one tell me what's wrong with this routine, it's for specific map name evolution in emerald

Spoiler:
.text
.align 2
.thumb
.thumb_func
.global mapevo

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
ldr r6, map
ldrb r6, [r6, #0x0]
cmp r6, r2
bne exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
levelcheckloc: .word 0x0806D32F
noevo: .word 0x0806D333
map: .word 0x02036E10

i figure it may have something to do with the numbers at the bottom, but i'm not good with asm

The map ram of Emerald is 0x0203732C. I spent a few hours to find it out last time. I had been tested it and worked properly.

jirachiwishmaker October 20th, 2014 4:07 AM

Quote:

Originally Posted by HidoranBlaze (Post 8474647)
I just looked at your map bank offset in VBA's memory viewer, and it seems like your offset is wrong. (It had a FF byte in it, and it didn't change when I went from Petalburg City to Route 102) I'll try and find the correct map bank offset, and I'll notify you if I find it.
EDIT: the map bank offset seems to be 0x020322E4. Try that, and see if it works. If it doesn't work, the offsets for the levelcheckloc or the noevo could be wrong. (or the evolutions work differently for em, but I highly doubt that)
EDIT2: *facepalm
I misunderstood which routine you were using. I thought you were using the map bank routine, instead of the map name routine. Sorry about that. That being said though, you probably still have the wrong map name offset, since the ram offsets for fr and em are usually different.

It was fixed. The map ram is 0x0203732C. Could you tell me how to change the map bank and map number into hex code if I using the map bank routine in Emerald? Thanks in advance.

anonyboy October 20th, 2014 4:58 AM

Quote:

Originally Posted by jirachiwishmaker (Post 8474893)
It was fixed. The map ram is 0x0203732C. Could you tell me how to change the map bank and map number into hex code if I using the map bank routine in Emerald? Thanks in advance.

could you find the decryptpoke offset for emerald? if we have it that means we could port the existing evolution routines from FR to Emerald.

jirachiwishmaker October 20th, 2014 5:42 AM

Quote:

Originally Posted by anonyboy (Post 8474905)
could you find the decryptpoke offset for emerald? if we have it that means we could port the existing evolution routines from FR to Emerald.

I have all of them:
levelcheckloc: 0x0806D32F
noevo: 0x0806D333
decryptpoke: 0x0806A519
encryptpoke: 0x0806ACAD
firstpoke: 0x020244EC
mapbank: 0x020322E4
map: 0x0203732C

HidoranBlaze October 20th, 2014 6:40 AM

Quote:

Originally Posted by jirachiwishmaker (Post 8474893)
It was fixed. The map ram is 0x0203732C. Could you tell me how to change the map bank and map number into hex code if I using the map bank routine in Emerald? Thanks in advance.

I'm not sure what you're asking here. If you're asking how to assign the map bank argument to each Pokemon without using G3HS, there's an evolution table with the structure listed here: http://bulbapedia.bulbagarden.net/wiki/Pokémon_evolution_data_structure_in_Generation_III
The offset is somewhere in G3HS's ini.
If you're asking how to find the hex numbers for the map bank and map number, that's easy. AMap has the map bank and map numbers listed; just convert that to hex and you're good to go. The map number offset is right next to the map bank offset in the ram btw.

anonyboy October 20th, 2014 11:06 AM

Quote:

Originally Posted by jirachiwishmaker (Post 8474927)
I have all of them:
levelcheckloc: 0x0806D32F
noevo: 0x0806D333
decryptpoke: 0x0806A519
encryptpoke: 0x0806ACAD
firstpoke: 0x020244EC
mapbank: 0x020322E4
map: 0x0203732C

Well i think keanersboy should make a step 4 regarding methods in emerald and we should show how to port/publish ported routines.

HidoranBlaze October 20th, 2014 1:38 PM

@kearnseyboy6:
So I was looking through your methods, and I noticed this one:
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global mapbankANDnapnumber

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 r0, r8
ldr r6, mapbank
ldrb r6, [r6, #0x0]
cmp r6, r2
bne exit
ldr r6, mapbank
ldrb r6, [r6, #0x1]
cmp r6, r2
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
mapbank: .word 0x02031DBC


If we're checking for a specific map bank and map number, wouldn't it be more efficient to load a halfword into r6 and compare to r2, since the map number is stored right next to the map bank in RAM?

Basically something like this:
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global mapbankANDnapnumber

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 r0, r8
ldr r6, mapbank
ldrh r6, [r6, #0x0]
cmp r6, r2
bne exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
mapbank: .word 0x02031DBC

kearnseyboy6 October 20th, 2014 2:26 PM

Quote:

Originally Posted by anonyboy (Post 8475165)
Well i think keanersboy should make a step 4 regarding methods in emerald and we should show how to port/publish ported routines.

Quote:

Originally Posted by HidoranBlaze (Post 8475270)
@kearnseyboy6:
So I was looking through your methods, and I noticed this one:
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global mapbankANDnapnumber

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 r0, r8
ldr r6, mapbank
ldrb r6, [r6, #0x0]
cmp r6, r2
bne exit
ldr r6, mapbank
ldrb r6, [r6, #0x1]
cmp r6, r2
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
mapbank: .word 0x02031DBC


If we're checking for a specific map bank and map number, wouldn't it be more efficient to load a halfword into r6 and compare to r2, since the map number is stored right next to the map bank in RAM?

Basically something like this:
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global mapbankANDnapnumber

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 r0, r8
ldr r6, mapbank
ldrh r6, [r6, #0x0]
cmp r6, r2
bne exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0

.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
mapbank: .word 0x02031DBC

Yes you are right. I'll fix it up.

I'm happy to make an Emerald port if someone has all the offsets. I think just the limiter is left I think?

anonyboy October 20th, 2014 10:53 PM

Quote:

Originally Posted by kearnseyboy6 (Post 8475295)
Yes you are right. I'll fix it up.

I'm happy to make an Emerald port if someone has all the offsets. I think just the limiter is left I think?

I had already found the limiter, i posted it awhile ago, it 0x6D180

anonyboy October 21st, 2014 11:57 AM

I have ported some methods to emerald. here they are:
By Move
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global Evomove

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 r0, r8
mov r5, #0x0
loop:
mov r1, #0xD
add r1, r1, r5
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
beq true
cmp r5, #0x3
beq exit
add r5, #0x1
b loop

decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
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
levelcheckloc: .word 0x0806D32F
noevo: .word 0x0806D333
decryptpoke: .word 0x0806A519

With Other PKMN in Party:
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global mantykeevo

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
bx r0
exit: pop {r0-r7}
ldr r0, noevo
bx r0
decrypt: push {r0-r7}
ldr r2, decryptpoke
bx r2
.align
firstpoke: .word 0x020244EC
levelcheckloc: .word 0x0806D32F
noevo: .word 0x0806D333
decryptpoke: .word 0x0806A519

Lance32497 November 23rd, 2014 10:32 PM

You didnt mentioned if what is the argument I use in all routines

anonyboy November 24th, 2014 2:44 AM

Quote:

Originally Posted by Lance32497 (Post 8507534)
You didnt mentioned if what is the argument I use in all routines

Dude, all evo methods are of their 6th gen counterparts, check bulbapedia for some info.
Ex:http://bulbapedia.bulbagarden.net/wiki/Pancham_%28Pok%C3%A9mon%29
Pancham's Method: It says there he evoles in lvl 32, that means a level check exists.

Lance32497 December 9th, 2014 7:23 PM

Hello guys, I now Understand howto implement it but I got some errors, not ingame errors.:
First of all, I dont know if my evolution properties are correct

Fairymove-None
Pancham-Level
Male-Item(because of Gallade evolution)
female-Level
rain-Level
night time level up-Level
Day time tyrunt-Level
Night time Item Hold Induced Evolution-Item
Day time Item Hold Induced Evolution-Item
Evolution by Move induced-Item
Evolve with other Pokemon in Party-Item(Correct me if im wrong, I used item because the pokemon that will be the result of the evolution was the same in the index number of the item I used)

I Havent test those routines because the newly added evolution methods didnt appeared in G3HS although I edited the ini.
Here's the edited evo propeties:
Quote:

evolutionmethods = Breeding Only,Friendship,Friendship (Day),Friendship (Night),Level-Up,Trade,Trade (Hold Item),Stone,ATK > DEF,ATK = DEF,ATK < DEF,PID (Wurmple->Silcoon),PID (Wurmple->Cascoon),Spawn a Second,Create Spawn,Beauty,Fairy Move,Pancham,Male,Female,Rain,NightTimeLVLUP,DayTimeLVLUP,Night Time Item,Day time Item,Move induced,Other Pokemon
evomethodsproperties = None,None,None,None,Level,None,Item,Item,Level,Level,Level,Level,Level,Level,Level,None,None,Level,Item,Level,Level,Level,Level,Item,Item,None,None
and here is my entire ini.
Spoiler:

[ALL]
offsetthatcontainssecondromid = 0xFFFFFE
justusestandardini = False
checkfordevbuilds = True
checkforupdates = True
autosavepokeswhenswitching = False
notes_about_this_ini = -
note1 = justusestandardini allows you to turn the dynamic ini system on or off.
note2 = All booleans are either have two CASE-SENSITIVE states -> True or False
note3 = The lists (like EggGroups) must be in order from lowest to highest.
note4 = If you want to provide a name for your game in the ini, just do Name = X. See below examples. Eventually, I will load this name to the program and display it.
note5 = DO NOT change the gamecode property in the ini. That is used for providing the correct fix for Shedinja Evolution for your base rom.
note6 = Evolution types currently support the following CASE-SENSITIVE arguments: Level, Item, Pokemon, Move, None

[BPRE]
name = Pokemon FireRed (E)
gamecode = BPRE
numberofpokes = 412
pokebasestats = 0x254784
pokebasestatslength = 0x1C
pokenames = 0x245EE0
pokenameslength = 0xB
typenames = 0x961b50
typenameslength = 0x7
numberoftypes = 22
items = 0x3DB028
numberofitems = 0x375
itemsdatalength = 0x2C
abilities = 0x950000
numberofabilities = 0x156
abiltiesnamelength = 0xD
egggroups = Monster,Water1,Bug,Flying,Field,Fairy,Grass,Human-Like,Water3,Mineral,Amorphous,Water2,Ditto,Dragon,Undiscovered
leveluptypes = Medium-Fast,Erratic,Fluctuating,Medium-Slow,Fast,Slow
learnedmoves = 0x25d7b4
learnedmoveslength = 0x2
attacknames = 0x901800
numberofattacks = 0x511
attacknamelength = 0xD
eggmovepointer1 = 0x045C50
eggmovepointer2 = 0x045CC8
eggmovelimit = 0x045CC4
tmhmcompatibility = 0x252BC8
tmhmcompatibilitylength = 8
tmlist = 0x45A80C
tmlistentrylength = 2
numberoftms = 50
numberofhms = 8
evolutiontable = 0x73dc90
evolutionsperpoke = 5
lengthofoneentry = 8
evolutionmethods = Breeding Only,Friendship,Friendship (Day),Friendship (Night),Level-Up,Trade,Trade (Hold Item),Stone,ATK > DEF,ATK = DEF,ATK < DEF,PID (Wurmple->Silcoon),PID (Wurmple->Cascoon),Spawn a Second,Create Spawn,Beauty,Fairy Move,Pancham,Male,Female,Rain,NightTimeLVLUP,DayTimeLVLUP,Night Time Item,Day time Item,Move induced,Other Pokemon
evomethodsproperties = None,None,None,None,Level,None,Item,Item,Level,Level,Level,Level,Level,Level,Level,None,None,Level,Item,Level,Level,Level,Level,Item,Item,None,None
evolutiontablepointers = 0x42F6C,0x42FBC,0x43138,0x4599C,0xCE8C4
offsetstochangetolslr0r60x1 = 0x42f9c,0x43182,0x43026,0x43008,0x43016,0x43050,0x4307A,0x430A8,0x430C8,0x430EC,0x430FC
offsetstochangetonewminus1 = 0x43116,0x4319e,0x459A2
theshedinjafix = 0xCE766
changetonewnumbertimes8 = 0x4598A,0x459C0,0x4598E,0x459C2
pokedex = 0x44E850
lengthofpokedexentry = 0x24
nationaldexorder = 0x251FEE
numofnondexpokesbetweencelebiandtreeko = 25
numofnondexpokesafterchimecho = 28
dextype = FRLG
jambo51learnedmovehack = False
movetutorcomp = 0x459B7E
movetutorcomplen = 2
movetutorattacks = 0x459B60
mtattackslen = 2
mtattacksnum = 15
frontspritetable = 0x2350AC
backspritetable = 0x23654C
frontpalettetable = 0x23730C
shinypalettetable = 0x2380cc
enemyytable = 0x2349CC
playerytable = 0x235E6C
enemyaltitudetable = 0x23A004
iconspritetable = 0x3D37A0
iconpalettetable = 0x3D3E80
iconpalettes = 0x3D3740
numiconpalettes = 3
itemanimationtable = 0x45FD54
itemanimationtableentlen = 5
hoenncryauxtable = 0x2539D4
footprints = 0x43FAB0
habitats = 0x452c4c
habitatpointers = 0x106888,0x1068C8,0x106990,0x1069F8,0x106A98
locationnames = 0x3F1CAC
locationstart = 0x58
locationend = 0xC4
locationtblfmt = 1

anonyboy December 10th, 2014 9:58 PM

Quote:

Originally Posted by Lance32497 (Post 8526873)
Hello guys, I now Understand howto implement it but I got some errors, not ingame errors.:
First of all, I dont know if my evolution properties are correct

Fairymove-None
Pancham-Level
Male-Item(because of Gallade evolution)
female-Level
rain-Level
night time level up-Level
Day time tyrunt-Level
Night time Item Hold Induced Evolution-Item
Day time Item Hold Induced Evolution-Item
Evolution by Move induced-Item
Evolve with other Pokemon in Party-Item(Correct me if im wrong, I used item because the pokemon that will be the result of the evolution was the same in the index number of the item I used)

I Havent test those routines because the newly added evolution methods didnt appeared in G3HS although I edited the ini.
Here's the edited evo propeties:


and here is my entire ini.
Spoiler:

[ALL]
offsetthatcontainssecondromid = 0xFFFFFE
justusestandardini = False
checkfordevbuilds = True
checkforupdates = True
autosavepokeswhenswitching = False
notes_about_this_ini = -
note1 = justusestandardini allows you to turn the dynamic ini system on or off.
note2 = All booleans are either have two CASE-SENSITIVE states -> True or False
note3 = The lists (like EggGroups) must be in order from lowest to highest.
note4 = If you want to provide a name for your game in the ini, just do Name = X. See below examples. Eventually, I will load this name to the program and display it.
note5 = DO NOT change the gamecode property in the ini. That is used for providing the correct fix for Shedinja Evolution for your base rom.
note6 = Evolution types currently support the following CASE-SENSITIVE arguments: Level, Item, Pokemon, Move, None

[BPRE]
name = Pokemon FireRed (E)
gamecode = BPRE
numberofpokes = 412
pokebasestats = 0x254784
pokebasestatslength = 0x1C
pokenames = 0x245EE0
pokenameslength = 0xB
typenames = 0x961b50
typenameslength = 0x7
numberoftypes = 22
items = 0x3DB028
numberofitems = 0x375
itemsdatalength = 0x2C
abilities = 0x950000
numberofabilities = 0x156
abiltiesnamelength = 0xD
egggroups = Monster,Water1,Bug,Flying,Field,Fairy,Grass,Human-Like,Water3,Mineral,Amorphous,Water2,Ditto,Dragon,Undiscovered
leveluptypes = Medium-Fast,Erratic,Fluctuating,Medium-Slow,Fast,Slow
learnedmoves = 0x25d7b4
learnedmoveslength = 0x2
attacknames = 0x901800
numberofattacks = 0x511
attacknamelength = 0xD
eggmovepointer1 = 0x045C50
eggmovepointer2 = 0x045CC8
eggmovelimit = 0x045CC4
tmhmcompatibility = 0x252BC8
tmhmcompatibilitylength = 8
tmlist = 0x45A80C
tmlistentrylength = 2
numberoftms = 50
numberofhms = 8
evolutiontable = 0x73dc90
evolutionsperpoke = 5
lengthofoneentry = 8
evolutionmethods = Breeding Only,Friendship,Friendship (Day),Friendship (Night),Level-Up,Trade,Trade (Hold Item),Stone,ATK > DEF,ATK = DEF,ATK < DEF,PID (Wurmple->Silcoon),PID (Wurmple->Cascoon),Spawn a Second,Create Spawn,Beauty,Fairy Move,Pancham,Male,Female,Rain,NightTimeLVLUP,DayTimeLVLUP,Night Time Item,Day time Item,Move induced,Other Pokemon
evomethodsproperties = None,None,None,None,Level,None,Item,Item،Level,Level,Level,Level,Level,Level,Level,None,None,Level,Level,Level,Level,Level,Level,Item,Item,Move,Pokemon
evolutiontablepointers = 0x42F6C,0x42FBC,0x43138,0x4599C,0xCE8C4
offsetstochangetolslr0r60x1 = 0x42f9c,0x43182,0x43026,0x43008,0x43016,0x43050,0x4307A,0x430A8,0x430C8,0x430EC,0x430FC
offsetstochangetonewminus1 = 0x43116,0x4319e,0x459A2
theshedinjafix = 0xCE766
changetonewnumbertimes8 = 0x4598A,0x459C0,0x4598E,0x459C2
pokedex = 0x44E850
lengthofpokedexentry = 0x24
nationaldexorder = 0x251FEE
numofnondexpokesbetweencelebiandtreeko = 25
numofnondexpokesafterchimecho = 28
dextype = FRLG
jambo51learnedmovehack = False
movetutorcomp = 0x459B7E
movetutorcomplen = 2
movetutorattacks = 0x459B60
mtattackslen = 2
mtattacksnum = 15
frontspritetable = 0x2350AC
backspritetable = 0x23654C
frontpalettetable = 0x23730C
shinypalettetable = 0x2380cc
enemyytable = 0x2349CC
playerytable = 0x235E6C
enemyaltitudetable = 0x23A004
iconspritetable = 0x3D37A0
iconpalettetable = 0x3D3E80
iconpalettes = 0x3D3740
numiconpalettes = 3
itemanimationtable = 0x45FD54
itemanimationtableentlen = 5
hoenncryauxtable = 0x2539D4
footprints = 0x43FAB0
habitats = 0x452c4c
habitatpointers = 0x106888,0x1068C8,0x106990,0x1069F8,0x106A98
locationnames = 0x3F1CAC
locationstart = 0x58
locationend = 0xC4
locationtblfmt = 1

You're close... I've edited wrong things in your ini

Lance32497 December 11th, 2014 5:19 AM

Quote:

Originally Posted by anonyboy (Post 8528317)
You're close... I've edited wrong things in your ini

Ahhh, thanks xD,.Ill tried it asap.

EDIT: I tried your edited ini but it does not still let my new evolution methods appear in the tool...
Heres the screenshot:
http://i.imgur.com/Ub0slOE.png

AriArk December 21st, 2014 10:39 AM

Hey
How would I use the Specific Map Name evolution in G3HS?

anonyboy December 22nd, 2014 4:06 AM

Quote:

Originally Posted by AriArk (Post 8541701)
Hey
How would I use the Specific Map Name evolution in G3HS?

Write Location In the argument.
Specific Map Bank/Name Has to be edited in Hex.

AriArk December 22nd, 2014 5:54 AM

Quote:

Originally Posted by anonyboy (Post 8542665)
Write Location In the argument.
Specific Map Bank/Name Has to be edited in Hex.

I've put that, but it is not showing up in the program

anonyboy December 22nd, 2014 7:22 AM

Quote:

Originally Posted by AriArk (Post 8542734)
I've put that, but it is not showing up in the program

Have you set an evolution method's name? check it!

thehypersonic2338 January 6th, 2015 9:08 AM

how to make new evo method appear in g3hs?

AtecainCorp. January 6th, 2015 12:28 PM

Someone can translate this to EMERALD or RUBY?

Joexv January 6th, 2015 1:29 PM

Quote:

Originally Posted by thehypersonic2338 (Post 8567912)
how to make new evo method appear in g3hs?

Rea the OP it says how.:P

Quote:

Originally Posted by Ksiazek Bartlomiej (Post 8568206)
Someone can translate this to EMERALD or RUBY?

Already been done for Emerald. You will probably have to do it yourself for ruby.
http://www.pokecommunity.com/showthread.php?t=338137

anonyboy January 6th, 2015 1:46 PM

Quote:

Originally Posted by Ksiazek Bartlomiej (Post 8568206)
Someone can translate this to EMERALD or RUBY?

Somebody has the table location for Ruby in the Thread, i found the limiter. You need to make the methods for yourself cause nobody hacks ruby


All times are GMT -8. The time now is 8:50 AM.


Like our Facebook Page Follow us on Twitter © 2002 - 2018 The PokéCommunity™, pokecommunity.com.
Pokémon characters and images belong to The Pokémon Company International and Nintendo. This website is in no way affiliated with or endorsed by Nintendo, Creatures, GAMEFREAK, The Pokémon Company or The Pokémon Company International. We just love Pokémon.
All forum styles, their images (unless noted otherwise) and site designs are © 2002 - 2016 The PokéCommunity / PokéCommunity.com.
PokéCommunity™ is a trademark of The PokéCommunity. All rights reserved. Sponsor advertisements do not imply our endorsement of that product or service. User generated content remains the property of its creator.

Acknowledgements
Use of PokéCommunity Assets
vB Optimise by DragonByte Technologies Ltd © 2023.