Advertiser Content

Tutorial Adding new evolution methods [FR] Page 8

Started by kearnseyboy6 June 20th, 2014 1:51 AM
  • 54633 views
  • 226 replies
Male
São Paulo, Brasil
Seen September 7th, 2019
Posted September 7th, 2019
275 posts
4.5 Years
kearnseyboy6, update your thread!
Got the Level+Item routine working!
Now before I start, the item is kept after the evolution. I'll dig into this now, but me myself, I'll keep items after the evolution. Just a heads up.
There are lots of ways of doing this. While I think the way I did was pretty nice and intuitive (hence why I did it), many people might say it's unefficient or whatever.
But the importante part: IT WORKS!

1. Generic Routine
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global LevelItemEvo

Main:
	mov r0, r8
	mov r5, r2
	mov r10, r3
	bl Decrypt
	mov r2, r5
	mov r5, #0x0
	mov r3, r10
	mov r10, r0
	add r0, r6, r7
	lsl r0, r0, #0x3
	add r0, r2, r0
	add r1, r0, r3
	ldrb r0, [r1, #0x2]
	mov r2, r10
	mov r10, r1

LevelA:
	mov r1, r9
	cmp r1, #0x(A-1)
	bhi LevelAItem1
LevelB:
	cmp r1, #0x(B-1)
	bhi LevelBItem2
	mov r2, #0x0
	b ArgumentCheck

LevelAItem1:
	cmp r2, #0x(Item1 ID)
	bne LevelAItem2
	mov r2, #0x1
	b ArgumentCheck
LevelAItem2:
	cmp r2, #0x(Item2 ID)
	bne LevelB
	mov r2, #0x2
	b ArgumentCheck

LevelBItem1:
	cmp r2, #0x(Item1 ID (not necessarily the same Item1 from Level A))
	bne LevelBItem2
	mov r2, #0x3
	b ArgumentCheck
LevelBItem2:
	cmp r2, #0x(Item2 ID (not necessarily the same Item2 from Level A))
	bne LevelBItem3
	mov r2, #0x4
	b ArgumentCheck
LevelBItem3:
	cmp r2, #0x(Item3 ID)
	bne WrongItem
	mov r2, #0x5
	b ArgumentCheck

Decrypt:
	mov r1, #0xC
	ldr r2, DecryptPoke
	bx r2

WrongItem:
	mov r2, #0x0
	b ArgumentCheck

ArgumentCheck:
	mov r1, r10
	mov r10, r5
	cmp r0, r2
	bne NoEvo
	b Evo

NoEvo:
	ldr r2, NoEvolution
	mov pc, r2

Evo:
	ldrh r0, [r1, #0x4]
	ldr r2, Evolution
	mov pc, r2

.align 2
NoEvolution: .word 0x08043110
Evolution: .word 0x080431A4
DecryptPoke: .word 0x0803FBE9

This first code is the generic version of my code. You only need to update Levels, Items IDs and the labels (that you can name after the items, or however you want. Also, delete all the parenthesis when you are done, or it won't work).
For example, see the code I'll use for my game below.

2. Example Routine
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global LevelItemEvo

Main:
	mov r0, r8
	mov r5, r2
	mov r10, r3
	bl Decrypt
	mov r2, r5
	mov r5, #0x0
	mov r3, r10
	mov r10, r0
	add r0, r6, r7
	lsl r0, r0, #0x3
	add r0, r2, r0
	add r1, r0, r3
	ldrb r0, [r1, #0x2]
	mov r2, r10
	mov r10, r1

Level10:
	mov r1, r9
	cmp r1, #0x9
	bhi Level10SilverPowder
Level12:
	cmp r1, #0xB
	bhi Level12BeigeBelt
Level20:
	cmp r1, #0x13
	bhi Level20DeepSeaTooth
Level30:
	cmp r1, #0x1D
	bhi Level30RazorFang
Level40:
	cmp r1, #0x27
	bhi Level40Magnet
Level50:
	cmp r1, #0x31
	bhi Level50MetalCoat
	mov r2, #0x0
	b ArgumentCheck

Level10SilverPowder:
	cmp r2, #0xBC
	bne Level10PoisonBarb
	mov r2, #0x1
	b ArgumentCheck
Level10PoisonBarb:
	cmp r2, #0xD3
	bne Level12
	mov r2, #0x2
	b ArgumentCheck

Level12BeigeBelt:
	cmp r2, #0xED
	bne Level12RedBelt
	mov r2, #0x3
	b ArgumentCheck
Level12RedBelt:
	cmp r2, #0xEE
	bne Level12BlueBelt
	mov r2, #0x4
	b ArgumentCheck
Level12BlueBelt:
	cmp r2, #0xEF
	bne Level20
	mov r2, #0x5
	b ArgumentCheck

Level20DeepSeaTooth:
	cmp r2, #0xC0
	bne Level20DeepSeaScale
	mov r2, #0x6
	b ArgumentCheck
Level20DeepSeaScale:
	cmp r2, #0xC1
	bne Level30
	mov r2, #0x7
	b ArgumentCheck

Level30RazorFang:
	cmp r2, #0xEB
	bne Level30RazorClaw
	mov r2, #0x8
	b ArgumentCheck
Level30RazorClaw:
	cmp r2, #0xEC
	bne Level30MetalCoat
	mov r2, #0x9
	b ArgumentCheck
Level30MetalCoat:
	cmp r2, #0xC7
	bne Level40
	mov r2, #0xA
	b ArgumentCheck

Level40Magnet:
	cmp r2, #0xD0
	bne Level40DragonScale
	mov r2, #0xB
	b ArgumentCheck
Level40DragonScale:
	cmp r2, #0xC9
	bne Level40MetalCoat
	mov r2, #0xC
	b ArgumentCheck
Level40MetalCoat:
	cmp r2, #0xC7
	bne Level40Electirizer
	mov r2, #0xD
	b ArgumentCheck
Level40Electirizer:
	cmp r2, #0xEA
	bne Level40Magmarizer
	mov r2, #0xE
	b ArgumentCheck
Level40Magmarizer:
	cmp r2, #0xE9
	bne Level40SpellTag
	mov r2, #0xF
	b ArgumentCheck
Level40SpellTag:
	cmp r2, #0xD5
	bne Level50
	mov r2, #0x10
	b ArgumentCheck

Level50MetalCoat:
	cmp r2, #0xC7
	bne WrongItem
	mov r2, #0x11
	b ArgumentCheck

Decrypt:
	mov r1, #0xC
	ldr r2, DecryptPoke
	bx r2

WrongItem:
	mov r2, #0x0
	b ArgumentCheck

ArgumentCheck:
	mov r1, r10
	mov r10, r5
	cmp r0, r2
	bne NoEvo
	b Evo

NoEvo:
	ldr r2, NoEvolution
	mov pc, r2

Evo:
	ldrh r0, [r1, #0x4]
	ldr r2, Evolution
	mov pc, r2

.align 2
NoEvolution: .word 0x08043110
Evolution: .word 0x080431A4
DecryptPoke: .word 0x0803FBE9

As you can see, you can add checks for how many levels and items you want. The evolution argument is not level, not item, but a "combo" of both. For example, in my routine, 1 = Level 10 + Silver Powder, 2 = Level 10 + Poison Barb, 11 = Level 50 + Metal Coat, etc.
So the limitation is 255 combinations of level and item (probably more, but I didn't test, nor will, and I'm weak to think right now)
Now, to change the Pokémon's evolutionary argument, simply add an evolution method on G3HS and as argument type, use Level. Now, it's going to show up as "Level: x" in G3HS, but read "Combo: x", since that number also represents the "combo id" number. You can also go to the Pokémon's Evolutionary Information table at 08249754 and have fun finding your specific Pokémon's argument and simply change it. The rest can be changed in G3HS, you only really have to go there if you have more than 100 combos (same number as level numbers go).
Here's an example of my compiled routine, if anyone is happy with my code in its current disposition.

3. Compiled Example
Spoiler:
40 46 15 1C 9A 46 00 F0 5E F8 2A 1C 00 25 53 46 82 46 F0 19 C0 00 10 18 C1 18 88 78 52 46 8A 46 49 46 09 29 0B D8 0B 29 11 D8 13 29 1B D8 1D 29 21 D8 27 29 2B D8 31 29 41 D8 00 22 48 E0 BC 2A 01 D1 01 22 44 E0 D3 2A ED D1 02 22 40 E0 ED 2A 01 D1 03 22 3C E0 EE 2A 01 D1 04 22 38 E0 EF 2A E3 D1 05 22 34 E0 C0 2A 01 D1 06 22 30 E0 C1 2A DD D1 07 22 2C E0 EB 2A 01 D1 08 22 28 E0 EC 2A 01 D1 09 22 24 E0 C7 2A D3 D1 0A 22 20 E0 D0 2A 01 D1 0B 22 1C E0 C9 2A 01 D1 0C 22 18 E0 C7 2A 01 D1 0D 22 14 E0 EA 2A 01 D1 0E 22 10 E0 E9 2A 01 D1 0F 22 0C E0 D5 2A BD D1 10 22 08 E0 C7 2A 04 D1 11 22 04 E0 0C 21 08 4A 10 47 00 22 FF E7 51 46 AA 46 90 42 00 D1 01 E0 02 4A 97 46 88 88 01 4A 97 46 10 31 04 08 A4 31 04 08 E9 FB 03 08

Hope you guys enjoy!

EDIT:
And just because I worked hard for this, here's where I used my evolutions in my hack:
Spoiler:
Level 10 + Silver Powder - Wurmple - Silcoon
Level 10 + Poison Barb - Wurmple - Cascoon
Level 12 + Beige Belt - Tyrogue - Hitmonlee
Level 12 + Red Belt - Tyrogue - Hitmonchan
Level 12 + Blue Belt - Tyrogue - Hitmontop
Level 20 + DeepSea Tooth - Clamperl - Huntail
Level 20 + DeepSea Scale - Clamperl - Gorebyss
Level 30 + Razor Fang - Gligar - Gliscor
Level 30 + Razor Claw - Sneasel - Weavile
Level 30 + Metal Coat - Nosepass - Probopass
Level 40 + Magnet - Magneton - Magnezone
Level 40 + Dragon Scale - Seadra - Kingdra
Level 40 + Metal Coat - Scyther - Scizor
Level 40 + Electirizer - Electabuzz - Electivire
Level 40 + Magmarizer - Magmar - Magmortar
Level 40 + Spell Tag - Dusclops - Dusknoir
Level 50 + Metal Coat - Onix - Steelix
My Main Team:


Joexv

joexv.github.io

Age 22
Male
Oregon
Seen 4 Weeks Ago
Posted August 7th, 2018
1,031 posts
7.1 Years
kearnseyboy6, update your thread!
Got the Level+Item routine working!
Now before I start, the item is kept after the evolution. I'll dig into this now, but me myself, I'll keep items after the evolution. Just a heads up.
There are lots of ways of doing this. While I think the way I did was pretty nice and intuitive (hence why I did it), many people might say it's unefficient or whatever.
But the importante part: IT WORKS!

1. Generic Routine
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global LevelItemEvo

Main:
	mov r0, r8
	mov r5, r2
	mov r10, r3
	bl Decrypt
	mov r2, r5
	mov r5, #0x0
	mov r3, r10
	mov r10, r0
	add r0, r6, r7
	lsl r0, r0, #0x3
	add r0, r2, r0
	add r1, r0, r3
	ldrb r0, [r1, #0x2]
	mov r2, r10
	mov r10, r1

LevelA:
	mov r1, r9
	cmp r1, #0x(A-1)
	bhi LevelAItem1
LevelB:
	cmp r1, #0x(B-1)
	bhi LevelBItem2
	mov r2, #0x0
	b ArgumentCheck

LevelAItem1:
	cmp r2, #0x(Item1 ID)
	bne LevelAItem2
	mov r2, #0x1
	b ArgumentCheck
LevelAItem2:
	cmp r2, #0x(Item2 ID)
	bne LevelB
	mov r2, #0x2
	b ArgumentCheck

LevelBItem1:
	cmp r2, #0x(Item1 ID (not necessarily the same Item1 from Level A))
	bne LevelBItem2
	mov r2, #0x3
	b ArgumentCheck
LevelBItem2:
	cmp r2, #0x(Item2 ID (not necessarily the same Item2 from Level A))
	bne LevelBItem3
	mov r2, #0x4
	b ArgumentCheck
LevelBItem3:
	cmp r2, #0x(Item3 ID)
	bne WrongItem
	mov r2, #0x5
	b ArgumentCheck

Decrypt:
	mov r1, #0xC
	ldr r2, DecryptPoke
	bx r2

WrongItem:
	mov r2, #0x0
	b ArgumentCheck

ArgumentCheck:
	mov r1, r10
	mov r10, r5
	cmp r0, r2
	bne NoEvo
	b Evo

NoEvo:
	ldr r2, NoEvolution
	mov pc, r2

Evo:
	ldrh r0, [r1, #0x4]
	ldr r2, Evolution
	mov pc, r2

.align 2
NoEvolution: .word 0x08043110
Evolution: .word 0x080431A4
DecryptPoke: .word 0x0803FBE9

This first code is the generic version of my code. You only need to update Levels, Items IDs and the labels (that you can name after the items, or however you want. Also, delete all the parenthesis when you are done, or it won't work).
For example, see the code I'll use for my game below.

2. Example Routine
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global LevelItemEvo

Main:
	mov r0, r8
	mov r5, r2
	mov r10, r3
	bl Decrypt
	mov r2, r5
	mov r5, #0x0
	mov r3, r10
	mov r10, r0
	add r0, r6, r7
	lsl r0, r0, #0x3
	add r0, r2, r0
	add r1, r0, r3
	ldrb r0, [r1, #0x2]
	mov r2, r10
	mov r10, r1

Level10:
	mov r1, r9
	cmp r1, #0x9
	bhi Level10SilverPowder
Level12:
	cmp r1, #0xB
	bhi Level12BeigeBelt
Level20:
	cmp r1, #0x13
	bhi Level20DeepSeaTooth
Level30:
	cmp r1, #0x1D
	bhi Level30RazorFang
Level40:
	cmp r1, #0x27
	bhi Level40Magnet
Level50:
	cmp r1, #0x31
	bhi Level50MetalCoat
	mov r2, #0x0
	b ArgumentCheck

Level10SilverPowder:
	cmp r2, #0xBC
	bne Level10PoisonBarb
	mov r2, #0x1
	b ArgumentCheck
Level10PoisonBarb:
	cmp r2, #0xD3
	bne Level12
	mov r2, #0x2
	b ArgumentCheck

Level12BeigeBelt:
	cmp r2, #0xED
	bne Level12RedBelt
	mov r2, #0x3
	b ArgumentCheck
Level12RedBelt:
	cmp r2, #0xEE
	bne Level12BlueBelt
	mov r2, #0x4
	b ArgumentCheck
Level12BlueBelt:
	cmp r2, #0xEF
	bne Level20
	mov r2, #0x5
	b ArgumentCheck

Level20DeepSeaTooth:
	cmp r2, #0xC0
	bne Level20DeepSeaScale
	mov r2, #0x6
	b ArgumentCheck
Level20DeepSeaScale:
	cmp r2, #0xC1
	bne Level30
	mov r2, #0x7
	b ArgumentCheck

Level30RazorFang:
	cmp r2, #0xEB
	bne Level30RazorClaw
	mov r2, #0x8
	b ArgumentCheck
Level30RazorClaw:
	cmp r2, #0xEC
	bne Level30MetalCoat
	mov r2, #0x9
	b ArgumentCheck
Level30MetalCoat:
	cmp r2, #0xC7
	bne Level40
	mov r2, #0xA
	b ArgumentCheck

Level40Magnet:
	cmp r2, #0xD0
	bne Level40DragonScale
	mov r2, #0xB
	b ArgumentCheck
Level40DragonScale:
	cmp r2, #0xC9
	bne Level40MetalCoat
	mov r2, #0xC
	b ArgumentCheck
Level40MetalCoat:
	cmp r2, #0xC7
	bne Level40Electirizer
	mov r2, #0xD
	b ArgumentCheck
Level40Electirizer:
	cmp r2, #0xEA
	bne Level40Magmarizer
	mov r2, #0xE
	b ArgumentCheck
Level40Magmarizer:
	cmp r2, #0xE9
	bne Level40SpellTag
	mov r2, #0xF
	b ArgumentCheck
Level40SpellTag:
	cmp r2, #0xD5
	bne Level50
	mov r2, #0x10
	b ArgumentCheck

Level50MetalCoat:
	cmp r2, #0xC7
	bne WrongItem
	mov r2, #0x11
	b ArgumentCheck

Decrypt:
	mov r1, #0xC
	ldr r2, DecryptPoke
	bx r2

WrongItem:
	mov r2, #0x0
	b ArgumentCheck

ArgumentCheck:
	mov r1, r10
	mov r10, r5
	cmp r0, r2
	bne NoEvo
	b Evo

NoEvo:
	ldr r2, NoEvolution
	mov pc, r2

Evo:
	ldrh r0, [r1, #0x4]
	ldr r2, Evolution
	mov pc, r2

.align 2
NoEvolution: .word 0x08043110
Evolution: .word 0x080431A4
DecryptPoke: .word 0x0803FBE9

As you can see, you can add checks for how many levels and items you want. The evolution argument is not level, not item, but a "combo" of both. For example, in my routine, 1 = Level 10 + Silver Powder, 2 = Level 10 + Poison Barb, 11 = Level 50 + Metal Coat, etc.
So the limitation is 255 combinations of level and item (probably more, but I didn't test, nor will, and I'm weak to think right now)
Now, to change the Pokémon's evolutionary argument, simply add an evolution method on G3HS and as argument type, use Level. Now, it's going to show up as "Level: x" in G3HS, but read "Combo: x", since that number also represents the "combo id" number. You can also go to the Pokémon's Evolutionary Information table at 08249754 and have fun finding your specific Pokémon's argument and simply change it. The rest can be changed in G3HS, you only really have to go there if you have more than 100 combos (same number as level numbers go).
Here's an example of my compiled routine, if anyone is happy with my code in its current disposition.

3. Compiled Example
Spoiler:
40 46 15 1C 9A 46 00 F0 5E F8 2A 1C 00 25 53 46 82 46 F0 19 C0 00 10 18 C1 18 88 78 52 46 8A 46 49 46 09 29 0B D8 0B 29 11 D8 13 29 1B D8 1D 29 21 D8 27 29 2B D8 31 29 41 D8 00 22 48 E0 BC 2A 01 D1 01 22 44 E0 D3 2A ED D1 02 22 40 E0 ED 2A 01 D1 03 22 3C E0 EE 2A 01 D1 04 22 38 E0 EF 2A E3 D1 05 22 34 E0 C0 2A 01 D1 06 22 30 E0 C1 2A DD D1 07 22 2C E0 EB 2A 01 D1 08 22 28 E0 EC 2A 01 D1 09 22 24 E0 C7 2A D3 D1 0A 22 20 E0 D0 2A 01 D1 0B 22 1C E0 C9 2A 01 D1 0C 22 18 E0 C7 2A 01 D1 0D 22 14 E0 EA 2A 01 D1 0E 22 10 E0 E9 2A 01 D1 0F 22 0C E0 D5 2A BD D1 10 22 08 E0 C7 2A 04 D1 11 22 04 E0 0C 21 08 4A 10 47 00 22 FF E7 51 46 AA 46 90 42 00 D1 01 E0 02 4A 97 46 88 88 01 4A 97 46 10 31 04 08 A4 31 04 08 E9 FB 03 08

Hope you guys enjoy!

EDIT:
And just because I worked hard for this, here's where I used my evolutions in my hack:
Spoiler:
Level 10 + Silver Powder - Wurmple - Silcoon
Level 10 + Poison Barb - Wurmple - Cascoon
Level 12 + Beige Belt - Tyrogue - Hitmonlee
Level 12 + Red Belt - Tyrogue - Hitmonchan
Level 12 + Blue Belt - Tyrogue - Hitmontop
Level 20 + DeepSea Tooth - Clamperl - Huntail
Level 20 + DeepSea Scale - Clamperl - Gorebyss
Level 30 + Razor Fang - Gligar - Gliscor
Level 30 + Razor Claw - Sneasel - Weavile
Level 30 + Metal Coat - Nosepass - Probopass
Level 40 + Magnet - Magneton - Magnezone
Level 40 + Dragon Scale - Seadra - Kingdra
Level 40 + Metal Coat - Scyther - Scizor
Level 40 + Electirizer - Electabuzz - Electivire
Level 40 + Magmarizer - Magmar - Magmortar
Level 40 + Spell Tag - Dusclops - Dusknoir
Level 50 + Metal Coat - Onix - Steelix
One thing I feel I should mention on this. Unless I'm mistaken if any pokemon is holding any of these items when they level up, they will evolve. So you can have a Seadra evolve into Kingdra while holding a metal coat.
Because of this, honestly until a program allows both Item and level arguments to be added onto one routine OR have each item have a separate routine where the argument is simply just a level.

Edit: Woo 900 posts
I died and am dead

thedarkdragon11

New World Pirate

Male
Raftel, New World
Seen 1 Day Ago
Posted 1 Day Ago
876 posts
10.5 Years
kearnseyboy6, update your thread!
Got the Level+Item routine working!
Now before I start, the item is kept after the evolution. I'll dig into this now, but me myself, I'll keep items after the evolution. Just a heads up.
There are lots of ways of doing this. While I think the way I did was pretty nice and intuitive (hence why I did it), many people might say it's unefficient or whatever.
But the importante part: IT WORKS!

1. Generic Routine
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global LevelItemEvo

Main:
    mov r0, r8
    mov r5, r2
    mov r10, r3
    bl Decrypt
    mov r2, r5
    mov r5, #0x0
    mov r3, r10
    mov r10, r0
    add r0, r6, r7
    lsl r0, r0, #0x3
    add r0, r2, r0
    add r1, r0, r3
    ldrb r0, [r1, #0x2]
    mov r2, r10
    mov r10, r1

LevelA:
    mov r1, r9
    cmp r1, #0x(A-1)
    bhi LevelAItem1
LevelB:
    cmp r1, #0x(B-1)
    bhi LevelBItem2
    mov r2, #0x0
    b ArgumentCheck

LevelAItem1:
    cmp r2, #0x(Item1 ID)
    bne LevelAItem2
    mov r2, #0x1
    b ArgumentCheck
LevelAItem2:
    cmp r2, #0x(Item2 ID)
    bne LevelB
    mov r2, #0x2
    b ArgumentCheck

LevelBItem1:
    cmp r2, #0x(Item1 ID (not necessarily the same Item1 from Level A))
    bne LevelBItem2
    mov r2, #0x3
    b ArgumentCheck
LevelBItem2:
    cmp r2, #0x(Item2 ID (not necessarily the same Item2 from Level A))
    bne LevelBItem3
    mov r2, #0x4
    b ArgumentCheck
LevelBItem3:
    cmp r2, #0x(Item3 ID)
    bne WrongItem
    mov r2, #0x5
    b ArgumentCheck

Decrypt:
    mov r1, #0xC
    ldr r2, DecryptPoke
    bx r2

WrongItem:
    mov r2, #0x0
    b ArgumentCheck

ArgumentCheck:
    mov r1, r10
    mov r10, r5
    cmp r0, r2
    bne NoEvo
    b Evo

NoEvo:
    ldr r2, NoEvolution
    mov pc, r2

Evo:
    ldrh r0, [r1, #0x4]
    ldr r2, Evolution
    mov pc, r2

.align 2
NoEvolution: .word 0x08043110
Evolution: .word 0x080431A4
DecryptPoke: .word 0x0803FBE9

This first code is the generic version of my code. You only need to update Levels, Items IDs and the labels (that you can name after the items, or however you want. Also, delete all the parenthesis when you are done, or it won't work).
For example, see the code I'll use for my game below.

2. Example Routine
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global LevelItemEvo

Main:
    mov r0, r8
    mov r5, r2
    mov r10, r3
    bl Decrypt
    mov r2, r5
    mov r5, #0x0
    mov r3, r10
    mov r10, r0
    add r0, r6, r7
    lsl r0, r0, #0x3
    add r0, r2, r0
    add r1, r0, r3
    ldrb r0, [r1, #0x2]
    mov r2, r10
    mov r10, r1

Level10:
    mov r1, r9
    cmp r1, #0x9
    bhi Level10SilverPowder
Level12:
    cmp r1, #0xB
    bhi Level12BeigeBelt
Level20:
    cmp r1, #0x13
    bhi Level20DeepSeaTooth
Level30:
    cmp r1, #0x1D
    bhi Level30RazorFang
Level40:
    cmp r1, #0x27
    bhi Level40Magnet
Level50:
    cmp r1, #0x31
    bhi Level50MetalCoat
    mov r2, #0x0
    b ArgumentCheck

Level10SilverPowder:
    cmp r2, #0xBC
    bne Level10PoisonBarb
    mov r2, #0x1
    b ArgumentCheck
Level10PoisonBarb:
    cmp r2, #0xD3
    bne Level12
    mov r2, #0x2
    b ArgumentCheck

Level12BeigeBelt:
    cmp r2, #0xED
    bne Level12RedBelt
    mov r2, #0x3
    b ArgumentCheck
Level12RedBelt:
    cmp r2, #0xEE
    bne Level12BlueBelt
    mov r2, #0x4
    b ArgumentCheck
Level12BlueBelt:
    cmp r2, #0xEF
    bne Level20
    mov r2, #0x5
    b ArgumentCheck

Level20DeepSeaTooth:
    cmp r2, #0xC0
    bne Level20DeepSeaScale
    mov r2, #0x6
    b ArgumentCheck
Level20DeepSeaScale:
    cmp r2, #0xC1
    bne Level30
    mov r2, #0x7
    b ArgumentCheck

Level30RazorFang:
    cmp r2, #0xEB
    bne Level30RazorClaw
    mov r2, #0x8
    b ArgumentCheck
Level30RazorClaw:
    cmp r2, #0xEC
    bne Level30MetalCoat
    mov r2, #0x9
    b ArgumentCheck
Level30MetalCoat:
    cmp r2, #0xC7
    bne Level40
    mov r2, #0xA
    b ArgumentCheck

Level40Magnet:
    cmp r2, #0xD0
    bne Level40DragonScale
    mov r2, #0xB
    b ArgumentCheck
Level40DragonScale:
    cmp r2, #0xC9
    bne Level40MetalCoat
    mov r2, #0xC
    b ArgumentCheck
Level40MetalCoat:
    cmp r2, #0xC7
    bne Level40Electirizer
    mov r2, #0xD
    b ArgumentCheck
Level40Electirizer:
    cmp r2, #0xEA
    bne Level40Magmarizer
    mov r2, #0xE
    b ArgumentCheck
Level40Magmarizer:
    cmp r2, #0xE9
    bne Level40SpellTag
    mov r2, #0xF
    b ArgumentCheck
Level40SpellTag:
    cmp r2, #0xD5
    bne Level50
    mov r2, #0x10
    b ArgumentCheck

Level50MetalCoat:
    cmp r2, #0xC7
    bne WrongItem
    mov r2, #0x11
    b ArgumentCheck

Decrypt:
    mov r1, #0xC
    ldr r2, DecryptPoke
    bx r2

WrongItem:
    mov r2, #0x0
    b ArgumentCheck

ArgumentCheck:
    mov r1, r10
    mov r10, r5
    cmp r0, r2
    bne NoEvo
    b Evo

NoEvo:
    ldr r2, NoEvolution
    mov pc, r2

Evo:
    ldrh r0, [r1, #0x4]
    ldr r2, Evolution
    mov pc, r2

.align 2
NoEvolution: .word 0x08043110
Evolution: .word 0x080431A4
DecryptPoke: .word 0x0803FBE9

As you can see, you can add checks for how many levels and items you want. The evolution argument is not level, not item, but a "combo" of both. For example, in my routine, 1 = Level 10 + Silver Powder, 2 = Level 10 + Poison Barb, 11 = Level 50 + Metal Coat, etc.
So the limitation is 255 combinations of level and item (probably more, but I didn't test, nor will, and I'm weak to think right now)
Now, to change the Pokémon's evolutionary argument, simply add an evolution method on G3HS and as argument type, use Level. Now, it's going to show up as "Level: x" in G3HS, but read "Combo: x", since that number also represents the "combo id" number. You can also go to the Pokémon's Evolutionary Information table at 08249754 and have fun finding your specific Pokémon's argument and simply change it. The rest can be changed in G3HS, you only really have to go there if you have more than 100 combos (same number as level numbers go).
Here's an example of my compiled routine, if anyone is happy with my code in its current disposition.

3. Compiled Example
Spoiler:
40 46 15 1C 9A 46 00 F0 5E F8 2A 1C 00 25 53 46 82 46 F0 19 C0 00 10 18 C1 18 88 78 52 46 8A 46 49 46 09 29 0B D8 0B 29 11 D8 13 29 1B D8 1D 29 21 D8 27 29 2B D8 31 29 41 D8 00 22 48 E0 BC 2A 01 D1 01 22 44 E0 D3 2A ED D1 02 22 40 E0 ED 2A 01 D1 03 22 3C E0 EE 2A 01 D1 04 22 38 E0 EF 2A E3 D1 05 22 34 E0 C0 2A 01 D1 06 22 30 E0 C1 2A DD D1 07 22 2C E0 EB 2A 01 D1 08 22 28 E0 EC 2A 01 D1 09 22 24 E0 C7 2A D3 D1 0A 22 20 E0 D0 2A 01 D1 0B 22 1C E0 C9 2A 01 D1 0C 22 18 E0 C7 2A 01 D1 0D 22 14 E0 EA 2A 01 D1 0E 22 10 E0 E9 2A 01 D1 0F 22 0C E0 D5 2A BD D1 10 22 08 E0 C7 2A 04 D1 11 22 04 E0 0C 21 08 4A 10 47 00 22 FF E7 51 46 AA 46 90 42 00 D1 01 E0 02 4A 97 46 88 88 01 4A 97 46 10 31 04 08 A4 31 04 08 E9 FB 03 08

Hope you guys enjoy!

EDIT:
And just because I worked hard for this, here's where I used my evolutions in my hack:
Spoiler:
Level 10 + Silver Powder - Wurmple - Silcoon
Level 10 + Poison Barb - Wurmple - Cascoon
Level 12 + Beige Belt - Tyrogue - Hitmonlee
Level 12 + Red Belt - Tyrogue - Hitmonchan
Level 12 + Blue Belt - Tyrogue - Hitmontop
Level 20 + DeepSea Tooth - Clamperl - Huntail
Level 20 + DeepSea Scale - Clamperl - Gorebyss
Level 30 + Razor Fang - Gligar - Gliscor
Level 30 + Razor Claw - Sneasel - Weavile
Level 30 + Metal Coat - Nosepass - Probopass
Level 40 + Magnet - Magneton - Magnezone
Level 40 + Dragon Scale - Seadra - Kingdra
Level 40 + Metal Coat - Scyther - Scizor
Level 40 + Electirizer - Electabuzz - Electivire
Level 40 + Magmarizer - Magmar - Magmortar
Level 40 + Spell Tag - Dusclops - Dusknoir
Level 50 + Metal Coat - Onix - Steelix
How about without any specific level? Just holding an item and level up in any level?
Male
São Paulo, Brasil
Seen September 7th, 2019
Posted September 7th, 2019
275 posts
4.5 Years
One thing I feel I should mention on this. Unless I'm mistaken if any pokemon is holding any of these items when they level up, they will evolve. So you can have a Seadra evolve into Kingdra while holding a metal coat.
Because of this, honestly until a program allows both Item and level arguments to be added onto one routine OR have each item have a separate routine where the argument is simply just a level.

Edit: Woo 900 posts
No Joe, I made sure. You have to edit the Pokémon's evolution method to Level+Item and attribute one of the "combo" values as an argument.
Metal Coat and say, Level 30, is combo 5 (for example). If a Pokémon with Level+Item evolution method has a combo 4, it won't evolve on Level 30 holding a Metal Coat. That's what "cmp r0, r2" does in the "Argument Check" section.
=D
Also, I only did this as I tried the method you gave me that used tables and stuff.
I don't know if I was too unexperienced or was doing something wrong, but I decided to make my own Level + Item evolution.
Also, the Level + Specific Item evolution is indeed simpler, but I didn't think of it when I was doing this. Plus, you can have up to 255 combinations of Level and Item. A single routine can take up most of the combinations, so I thought it wouldn't make much of a difference.

How about without any specific level? Just holding an item and level up in any level?
This is easy. Hard is making the item go away.
Maybe hooking into the stone evolution, where you can't cancel. But I haven't found that, and didn't mind to keep looking as nobody seemed to show interest for it.
My Main Team:


Joexv

joexv.github.io

Age 22
Male
Oregon
Seen 4 Weeks Ago
Posted August 7th, 2018
1,031 posts
7.1 Years
No Joe, I made sure. You have to edit the Pokémon's evolution method to Level+Item and attribute one of the "combo" values as an argument.
Metal Coat and say, Level 30, is combo 5 (for example). If a Pokémon with Level+Item evolution method has a combo 4, it won't evolve on Level 30 holding a Metal Coat. That's what "cmp r0, r2" does in the "Argument Check" section.
=D
Also, I only did this as I tried the method you gave me that used tables and stuff.
I don't know if I was too unexperienced or was doing something wrong, but I decided to make my own Level + Item evolution.
Also, the Level + Specific Item evolution is indeed simpler, but I didn't think of it when I was doing this. Plus, you can have up to 255 combinations of Level and Item. A single routine can take up most of the combinations, so I thought it wouldn't make much of a difference.



This is easy. Hard is making the item go away.
Maybe hooking into the stone evolution, where you can't cancel. But I haven't found that, and didn't mind to keep looking as nobody seemed to show interest for it.
Oh I missed that. So for the argument its just which method then correct?
I died and am dead

thedarkdragon11

New World Pirate

Male
Raftel, New World
Seen 1 Day Ago
Posted 1 Day Ago
876 posts
10.5 Years
This is easy. Hard is making the item go away.
Maybe hooking into the stone evolution, where you can't cancel. But I haven't found that, and didn't mind to keep looking as nobody seemed to show interest for it.
I see... Well, I'm interested because I'm planning to make a hack and replace the trade evolution with hold item with that...

By the way, if in trade it is possible, maybe it is also possible to check that (the trade with item) routine?
Male
Seen July 1st, 2016
Posted March 9th, 2016
6 posts
3.7 Years
So I'm not the greatest programmer out there ad I'm fairly new to the community, so any help or advice is greatly appreciated.
My plan was to create a Fire Red Rom where Eevee would have an evolution for each type. But there's not enough methods to do this, so I found the OP and attempted to follow the tutorial the best I could.

-Copied the table at 0x042FC4 to 0x720000
-Changed the pointer at 0x042FC0 from C4 2F 04 08 to 00 00 72 08
-Changed the number of evolutions at 0x042FAA from 0E to 10 (added two I believe)
-Copied the Day Time Held Item and Night Time Held Item evolution method codes from the OP into Notepad, saved them as .asm files, assembled them into .bat files, then used a hex editor to insert them into the rom at 0x720050 and 0x7200D0 respectively
-(I think) I added two pointers to the end of the repointed table at 0x72003C (pointer 50 00 72 08) and 0x720040 (pointer D0 00 72 08)
-Edited the .ini file for G3HS, adding Day Held Item and Night Held Item to the evolutionmethods line and Item and Item to the evomethodproperties line
-Used primaldialga's DNS program to add the RTC and DAN to the rom at 0x900000 and beyond.

The problem I'm having now is that the new evolution methods do not appear in G3HS. Did I miss a step or make some dumb mistake? Any help or advice is welcome and appreciated.
Thanks in advance.

Substitute Doll

An Alolan Exeggutor

Male
Under an alolan exeggutor
Seen 15 Hours Ago
Posted December 23rd, 2017
120 posts
4.5 Years
So I'm not the greatest programmer out there ad I'm fairly new to the community, so any help or advice is greatly appreciated.
My plan was to create a Fire Red Rom where Eevee would have an evolution for each type. But there's not enough methods to do this, so I found the OP and attempted to follow the tutorial the best I could.

-Copied the table at 0x042FC4 to 0x720000
-Changed the pointer at 0x042FC0 from C4 2F 04 08 to 00 00 72 08
-Changed the number of evolutions at 0x042FAA from 0E to 10 (added two I believe)
-Copied the Day Time Held Item and Night Time Held Item evolution method codes from the OP into Notepad, saved them as .asm files, assembled them into .bat files, then used a hex editor to insert them into the rom at 0x720050 and 0x7200D0 respectively
-(I think) I added two pointers to the end of the repointed table at 0x72003C (pointer 50 00 72 08) and 0x720040 (pointer D0 00 72 08)
-Edited the .ini file for G3HS, adding Day Held Item and Night Held Item to the evolutionmethods line and Item and Item to the evomethodproperties line
-Used primaldialga's DNS program to add the RTC and DAN to the rom at 0x900000 and beyond.

The problem I'm having now is that the new evolution methods do not appear in G3HS. Did I miss a step or make some dumb mistake? Any help or advice is welcome and appreciated.
Thanks in advance.
You need to edit the .ini of G3HS or the new evolution methods won't appear.
Male
São Paulo, Brasil
Seen September 7th, 2019
Posted September 7th, 2019
275 posts
4.5 Years
Oh I missed that. So for the argument its just which method then correct?
Sorry bro, didn't understand your question. =/

I see... Well, I'm interested because I'm planning to make a hack and replace the trade evolution with hold item with that...

By the way, if in trade it is possible, maybe it is also possible to check that (the trade with item) routine?
I can try to look into there, but there are a few problems. For starters, using trade evolution's animation might not work, because it's not an evolution that changes screen. It uses the screen that is there after you trade your Pokémon. Second problem is related to how the evolution happens.
Evolutions are triggered after an argument is confirmed true, but it only checks that argument for the type of evolution method (leveling up, using an item or trading), i.e. it won't look up for trade+item if the Pokémon leveled up. It will skip trade and item evolutions and check only the level up routines (which is the one I used to do Level+Item).
The whole evolution routine check that we are hacking here is part of a bigger routine that also calls the evolution animation.
I don't know how the game knows what type of evolution animation to work with, but all three types are checked in the same place, that I'm sure of. So, I don't know if the function returns 3 things: if the Pokémon evolves, to what Pokémon it evolves to and the evolution method type; or if it's checked when the evolution animation is called (not sure if I'm pretty clear).
To delete an item after the evolution animation, I have to get the Pokémon's item an take it from him, which should be simple enough, IF I know where the evolution type the animation wants. Plus, for the Level+Item evolution, either the evolution can't be stopped (which we would have to use other type evolution's animation) or we have to restore the item or not to delete it if the animation is cancelled.
That's how it works.

Originaly posted by Deltakirby:
"You need to edit the .ini of G3HS or the new evolution methods won't appear."

I've already done that, and that's why I'm confused as to why it's not working.
Are you sure you have edited the right G3HS game block? G3HS has a different part of the .ini for each different game, y'know.
My Main Team:


thedarkdragon11

New World Pirate

Male
Raftel, New World
Seen 1 Day Ago
Posted 1 Day Ago
876 posts
10.5 Years
I can try to look into there, but there are a few problems. For starters, using trade evolution's animation might not work, because it's not an evolution that changes screen. It uses the screen that is there after you trade your Pokémon. Second problem is related to how the evolution happens.
Evolutions are triggered after an argument is confirmed true, but it only checks that argument for the type of evolution method (leveling up, using an item or trading), i.e. it won't look up for trade+item if the Pokémon leveled up. It will skip trade and item evolutions and check only the level up routines (which is the one I used to do Level+Item).
The whole evolution routine check that we are hacking here is part of a bigger routine that also calls the evolution animation.
I don't know how the game knows what type of evolution animation to work with, but all three types are checked in the same place, that I'm sure of. So, I don't know if the function returns 3 things: if the Pokémon evolves, to what Pokémon it evolves to and the evolution method type; or if it's checked when the evolution animation is called (not sure if I'm pretty clear).
To delete an item after the evolution animation, I have to get the Pokémon's item an take it from him, which should be simple enough, IF I know where the evolution type the animation wants. Plus, for the Level+Item evolution, either the evolution can't be stopped (which we would have to use other type evolution's animation) or we have to restore the item or not to delete it if the animation is cancelled.
That's how it works.
I see... How about just after a battle by just gaining EXP (whichever the most possible way that includes hold item and EXP? Or just like Gligar/Sneasel's method but without Day or Night condition?
Male
Seen July 1st, 2016
Posted March 9th, 2016
6 posts
3.7 Years
Originally posted by FamiliaWerneck:
Are you sure you have edited the right G3HS game block? G3HS has a different part of the .ini for each different game, y'know. "
I had actually edited all five game blocks just to cover my bases. I honestly think that I might've made my error somewhere in the hex editing, as it definitely isn't my strong suit, but I still cannot tell.
Male
São Paulo, Brasil
Seen September 7th, 2019
Posted September 7th, 2019
275 posts
4.5 Years
I see... How about just after a battle by just gaining EXP (whichever the most possible way that includes hold item and EXP? Or just like Gligar/Sneasel's method but without Day or Night condition?
Getting Pokémon to evolve while holding an item after gaining a level is easy (Gligar's and Sneasel's evolution without the day and night requirement). Again, problem is deleting the item.

I had actually edited all five game blocks just to cover my bases. I honestly think that I might've made my error somewhere in the hex editing, as it definitely isn't my strong suit, but I still cannot tell.
Try again, step by step. It doesn't take much time.
Anyways, making it show up over G3HS doesn't require to have it added in your ROM.
Try this: in the "evolutionmethods" and "evolutionargument (or whatever the name is)", when adding an evolution, don't use spaces between commas. Like this (disconsider the order):
"Level Up,Stone,Trade,Trade + Item,Level Up D,Level Up N"
and this:
"...,None,None,Level,Item,Level,Level,Item"
My Main Team:


thedarkdragon11

New World Pirate

Male
Raftel, New World
Seen 1 Day Ago
Posted 1 Day Ago
876 posts
10.5 Years
Getting Pokémon to evolve while holding an item after gaining a level is easy (Gligar's and Sneasel's evolution without the day and night requirement). Again, problem is deleting the item.
If there's no real way for now, I think that's better than nothing...
Male
Seen July 1st, 2016
Posted March 9th, 2016
6 posts
3.7 Years
Originally posted by FamiliaWerneck
Try this: in the "evolutionmethods" and "evolutionargument (or whatever the name is)", when adding an evolution, don't use spaces between commas. Like this (disconsider the order):
"Level Up,Stone,Trade,Trade + Item,Level Up D,Level Up N"
and this:
"...,None,None,Level,Item,Level,Level,Item"
This was actually the issue, I combed through the .ini and realized I had left spaces. Again, thank you!

Now to take this a step further, I'd like to create another type of evolution no previously listed. It's a night time friendship evo, but instead of checking for max happiness (a value of 255) i'd like to check for min happiness (a value of 0).
I'm sure the night friendship evo code in the op could be modified to make this work, but I'm not sure how it would need to be changed.

Original Night Friendship code:
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


Any thoughts?
Male
São Paulo, Brasil
Seen September 7th, 2019
Posted September 7th, 2019
275 posts
4.5 Years
If there's no real way for now, I think that's better than nothing...
I'm about to enter test week. Gimme a couple of weeks and I'll start looking into this more incisively than what I am right now.

This was actually the issue, I combed through the .ini and realized I had left spaces. Again, thank you!

Now to take this a step further, I'd like to create another type of evolution no previously listed. It's a night time friendship evo, but instead of checking for max happiness (a value of 255) i'd like to check for min happiness (a value of 0).
I'm sure the night friendship evo code in the op could be modified to make this work, but I'm not sure how it would need to be changed.

Original Night Friendship code:
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


Any thoughts?
That probably checks the Friendship value of the Pokémon, always set to maximum. That said, you would just need to go to the Pokémon's evolution argument and make it be 00 instead of FF. If it is done the way I think it is done.
Is this a vanilla routine?
My Main Team:


Male
Seen July 1st, 2016
Posted March 9th, 2016
6 posts
3.7 Years
Originally posted by FamiliaWerneck
That probably checks the Friendship value of the Pokémon, always set to maximum. That said, you would just need to go to the Pokémon's evolution argument and make it be 00 instead of FF. If it is done the way I think it is done.
Is this a vanilla routine?
Just checked this out, the hex code itself has two ff bytes, one in the beginning and one at 0x00000E. I'm going to change the second and see if that works.
As for this being a vanilla routine, I have no clue what that means.
Male
São Paulo, Brasil
Seen September 7th, 2019
Posted September 7th, 2019
275 posts
4.5 Years
Just checked this out, the hex code itself has two ff bytes, one in the beginning and one at 0x00000E. I'm going to change the second and see if that works.
As for this being a vanilla routine, I have no clue what that means.
vanilla = from the original game
not vanilla = hack
If you don't want time to be a factor in your evolution, I think you should just go with the friendship evolution. Again, just changing the number on the Pokémon's argument should do the trick.
My Main Team:


Male
Seen July 1st, 2016
Posted March 9th, 2016
6 posts
3.7 Years
Originally posted by FamiliaWerneck
vanilla = from the original game
not vanilla = hack
If you don't want time to be a factor in your evolution, I think you should just go with the friendship evolution. Again, just changing the number on the Pokémon's argument should do the trick.
Yes, this is a vanilla routine. I've been seeing what needs to be done to do the things I want to do with my hack.
After editing as I described and inserting this method, gameplay was normal until the pokemon was supposed to evolve. the game reset at that point.
The argument that you're referring to, is it actually in the ASM coding?

thedarkdragon11

New World Pirate

Male
Raftel, New World
Seen 1 Day Ago
Posted 1 Day Ago
876 posts
10.5 Years
I'm about to enter test week. Gimme a couple of weeks and I'll start looking into this more incisively than what I am right now.
Thanks a lot man!
Male
Seen 6 Days Ago
Posted September 24th, 2019
85 posts
5.5 Years


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
Found a problem here. If you are using MrDS's patch, you need to change 0xXX to 0x17, not 0x16.


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
Also, why this routine doesn't check level? I know that in routine levelcheckloc set to the right offset, but in game it doesn't check level. It just makes evolve Pokemon when Dark type is in party, whatever level it is.
Male
Seen 6 Days Ago
Posted September 24th, 2019
85 posts
5.5 Years
Long time ago I posted a patch with all evolutions implemented. I hope not many people used it, because it wasn't tested and could have been broken (though it looks like it worked fine). So, with no further text, I present new version of my patch, which includes all evolution methods listed here (except Specific Map Evolution) and is completely tested and it is compatible with MrDs Patch. It is provided with ReadMe file. Read that first to avoid any confusion. So here's the link.

The Delta is coming...

BCTElite

Be still, my heart 'cause it's freakin' out

Male
England
Seen May 23rd, 2017
Posted June 22nd, 2016
84 posts
7.2 Years
can u please reupload that evolution patch that would be so good for my base
http://www.mediafire.com/download/4llg46hhc86n0ha/Pokemon+FireRed+Evolution+Patch+v0.9.rar
Starting Over

Hacks I Support

☾ Team Moon ☽
Advertiser Content