Registrarse

[ASM] FR | Nuevos métodos evolutivos.

Respuesta: FR | ASM | Nuevos metodos evolutivos.

No he alcanzado a investigar con esas herramientas, te recomiendo la que coloco en el post, lo haga explico en el tema como hacerlo, o si alguien sabe, bienvenido sea su comentario.
Otra cosa que me pasa es que descargué la herramienta pero no me abre.
 

KERBEROS

Usuario de Platino
Respuesta: FR | ASM | Nuevos metodos evolutivos.

inserte los 3 y funcionan perfectamente gracias!
 

Eddie

U Got Woomy
Respuesta: FR | ASM | Nuevos metodos evolutivos.

MasterMachine dijo:
Oye, ¿En que herramienta agregaste los métodos? PGE, G3T, G3HS (...)
Creo que si ves detenidamente las imágenes, puedes observar "Gen 3 Suite Hack" o sea G3HS
 
Última edición:

MACHINE

Space Cowboy
Respuesta: FR | ASM | Nuevos metodos evolutivos.

Creo que si ves detenidamente las imágenes, puedes observar "Gen 3 Suite Hack" o sea G3HS
Se que en el tutorial es G3HS, pero no me gusta esa herramienta, por eso pregunto, para saber si se puede colocar en otras como PGE o GT3. ^^!
 

KERBEROS

Usuario de Platino
Respuesta: FR | ASM | Nuevos metodos evolutivos.

en pge, solo que luego tienes que editar la ini para que te deje editar
ejemplo:

aqui sera el nombre del tipo de evolucion
EvolutionName16=Female
EvolutionName17=Male
EvolutionName18=Attack

aqui el parametro a usar!
Evolution16Param=level
Evolution17Param=level
Evolution18Param=attack

claro, el orden entre tipos depende el lugar donde la pongas.si inserteas primero el de ataque, entonces attack debe ir de 16. tu sabes eso...


sacrifico a mis criaturas para invocar a:

@MasterMachine
@Edsteam811
@Brin
 
Última edición:

MACHINE

Space Cowboy
Respuesta: FR | ASM | Nuevos metodos evolutivos.

en pge, solo que luego tienes que editar la ini para que te deje editar
ejemplo:

aqui sera el nombre del tipo de evolucion
EvolutionName16=Female
EvolutionName17=Male
EvolutionName18=Attack

aqui el parametro a usar!
Evolution16Param=level
Evolution17Param=level
Evolution18Param=attack

claro, el orden entre tipos depende el lugar donde la pongas.si inserteas primero el de ataque, entonces attack debe ir de 16. tu sabes eso...


sacrifico a mis criaturas para invocar a:

@MasterMachine
@Edsteam811
@Brin
Gracias! A esto me refería ^^!
 

Gold

Porrero a tiempo parcial
Miembro insignia
[FR] Evolución por piedra dependiendo del género:

Aplicar este método evolutivo fue un poco dificil de enterder para mí, así que les dejo una mejor explicación de como hacerla funcionar.

Primero ensamblar esta rutina de Doesntknowhowtoplay:
Código:
.org 0x4318e
lsl r0, r0, #0x0
ldr r2, .MethodAddr
bx r2

[B].MethodAddr: .word 0x[COLOR="Lime"]08F02001[/COLOR][/B]  [PLAIN]@Camb[/PLAIN]ia al offset donde el código será insertado +1


[B].org 0x[COLOR="lime"]F02000[/COLOR][/B]  [PLAIN]@Camb[/PLAIN]ia al offset donde el código será insertado (Sin agregar nada)
cmp r0, #0x7
beq StandardStone
[B]cmp r0, #[COLOR="lime"]0x14[/COLOR][/B] [PLAIN]@Camb[/PLAIN]ia por un ID de evolución que esté libre
beq MaleStone
[B]cmp r0, #[COLOR="lime"]0x15[/COLOR][/B]  [PLAIN]@Camb[/PLAIN]ia por un ID de evolución que esté libre
beq FemaleStone
b NoEvo

MaleStone:
push {r1-r3}
mov r0, r7
mov r1, r8
ldr r1, [r1, #0x0]
bl DetermineGender
pop {r1-r3}
cmp r0, #0x0
beq StandardStone
b NoEvo


FemaleStone:
push {r1-r3}
mov r0, r7
mov r1, r8
ldr r1, [r1, #0x0]
bl DetermineGender
pop {r1-r3}
cmp r0, #0xFE
beq StandardStone
b NoEvo


StandardStone:
ldrh r0, [r1, #0x2]
cmp r0, r9
beq Finish

NoEvo:
ldr r2, .NoEvoReturn
bx r2

DetermineGender:
ldr r2, .DetermineGenderFunc
bx r2

Finish:
ldr r2, .EvoReturn
bx r2

.NoEvoReturn: .word 0x08043199
.EvoReturn: .word 0x0804317d
.DetermineGenderFunc: .word 0x0803f78d
El cmp r0, #0x14 corresponde a evolución por pieda si es macho y cmp r0, #0x15 si es hembra. Cambia esas definiciones solo si las mismas ya estan ocupadas en tu tabla de metodos de evolución.

Esto generará un archivo .bin lleno de 00s. La rutina ya tiene los fixes y el hook. Solo deber abrir el archivo bin generado e ir a 0x804318E y copiar el hook y pegarlo en tu ROM en la misma dirección. FInalmente desplázate en el bin hasta la dirección odnde especificaste prondrías el código y haces lo mimso y lo pegas en tu ROM.

Finalmente solo es cuestión de editar la evolución de tu Pokémon para que evolucione mediante el item deseado. No es necesario agregar nada en la tabla de evoluciones ya que las evoluciones por piedra son distintas a las evoluciones por nivel. Y puedes editar el ini de PGE, G3Hs o G3T para que las nuevas definiciones sean sencillas de agregar.

 

Gold

Porrero a tiempo parcial
Miembro insignia
[FR] Evolución dependiendo de una variable:

No soy el genio más brillante en cuanto al ASM se refiere. Hice esta rutina bastante ineficiente, pero funcional para evolución mediante una variable. Aquí dejo el código:
Código:
.text
.align 2
.thumb
.thumb_func
.global setvarevo

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, variable
    ldrh r6, [r6, #0x0]
    cmp r6, #0x(VAR_VALUE) @el valor que debe tener la variable para activar la evolución
    beq setvar
    pop {r0-r7}
    ldr r0, noevo
    bx r0

setvar:
    mov r10, r3
    pop {r0-r7}
    mov r1, r10
    ldr r0, levelcheckloc
    bx r0

.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
variable: .word 0x020270B8 + (0x8000 * 2) @variable a usar entre 0x8000 a 0x800A)
Como pueden ver la rutina es muy ineficiente ya que debes de fijar un valor fijo y no puedes usar cualquier variable. Por ende las definiciones del Pokémon a evolucionar deben estar en 0.

Actualizaré cuando pueda hacer algo más eficiente, por el momento esta funciona sin más.
 

MetalKaktus

A la luz del quinto día, mira al este
Miembro insignia
[FR] Evolución dependiendo de una variable:

No soy el genio más brillante en cuanto al ASM se refiere. Hice esta rutina bastante ineficiente, pero funcional para evolución mediante una variable. Aquí dejo el código:
Código:
.text
.align 2
.thumb
.thumb_func
.global setvarevo

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, variable
    ldrh r6, [r6, #0x0]
    cmp r6, #0x(VAR_VALUE) @el valor que debe tener la variable para activar la evolución
    beq setvar
    pop {r0-r7}
    ldr r0, noevo
    bx r0

setvar:
    mov r10, r3
    pop {r0-r7}
    mov r1, r10
    ldr r0, levelcheckloc
    bx r0

.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
variable: .word 0x020270B8 + (0x8000 * 2) @variable a usar entre 0x8000 a 0x800A)
Como pueden ver la rutina es muy ineficiente ya que debes de fijar un valor fijo y no puedes usar cualquier variable. Por ende las definiciones del Pokémon a evolucionar deben estar en 0.

Actualizaré cuando pueda hacer algo más eficiente, por el momento esta funciona sin más.
Quiero hacer un breve apunte. En tu rutina usas un ldrh para leer el valor de la variable y como bien dices solo se pueden usar las variables 8000 arriba. Esto en muchos casos es un absurdo pues esas variables son volatiles y fuera de un script suelen fluctuar sus valores. Por eso pienso que usar una variable segura, de 40FF abajo es mucho mejor. Como esas variables las controla la DMA usaremos la funcion var finder que lleva la propia ROM. Dejo tu rutina modificada.

Código:
.text
.align 2
.thumb
.thumb_func
.global setvarevo

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, variable
    push {r0-r2}
    mov r0, r6
    ldr r1, var_finder
    bl linker
    mov r6, r0
    pop {r0-r2}
    cmp r6, #0x(VAR_VALUE) @el valor que debe tener la variable para activar la evolución
    beq setvar
    pop {r0-r7}
    ldr r0, noevo
    bx r0

linker:
    bx r1

setvar:

    mov r10, r3
    pop {r0-r7}
    mov r1, r10
    ldr r0, levelcheckloc
    bx r0



.align

levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
variable: .word 0x020270B8 + (0x8000 * 2) @variable a usar
var_finder:    .word (0x0806E454+1)
La parte que he añadido:
Código:
 push {r0-r2}
    mov r0, r6
    ldr r1, var_finder
    bl linker
    mov r6, r0
    pop {r0-r2}
r0 debe ser el var ID y la direccion de la funcion la he puesto en el r1. Esa rutina siempre edita los registros r0,r1 y r2 por lo que he tenido que salvar/restaurar contexto.
Salvo ese pequeño matiz es un buen aporte, gracias Gold :)
 

Gold

Porrero a tiempo parcial
Miembro insignia
Quiero hacer un breve apunte. En tu rutina usas un ldrh para leer el valor de la variable y como bien dices solo se pueden usar las variables 8000 arriba. Esto en muchos casos es un absurdo pues esas variables son volatiles y fuera de un script suelen fluctuar sus valores. Por eso pienso que usar una variable segura, de 40FF abajo es mucho mejor. Como esas variables las controla la DMA usaremos la funcion var finder que lleva la propia ROM. Dejo tu rutina modificada.

Código:
.text
.align 2
.thumb
.thumb_func
.global setvarevo

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, variable
    push {r0-r2}
    mov r0, r6
    ldr r1, var_finder
    bl linker
    mov r6, r0
    pop {r0-r2}
    cmp r6, #0x(VAR_VALUE) @el valor que debe tener la variable para activar la evolución
    beq setvar
    pop {r0-r7}
    ldr r0, noevo
    bx r0

linker:
    bx r1

setvar:

    mov r10, r3
    pop {r0-r7}
    mov r1, r10
    ldr r0, levelcheckloc
    bx r0



.align

levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
variable: .word 0x020270B8 + (0x8000 * 2) @variable a usar
var_finder:    .word (0x0806E454+1)
La parte que he añadido:
Código:
push {r0-r2}
    mov r0, r6
    ldr r1, var_finder
    bl linker
    mov r6, r0
    pop {r0-r2}
r0 debe ser el var ID y la direccion de la funcion la he puesto en el r1. Esa rutina siempre edita los registros r0,r1 y r2 por lo que he tenido que salvar/restaurar contexto.
Salvo ese pequeño matiz es un buen aporte, gracias Gold :)
Salvandome la vida como siempre xD
No estaba muy seguro de cómo acceder correctamente a las variables seguras. Agradezco un montón la corrección. Tengo todavía que aprender.
 

Versekr Dark

Usuario mítico
[FR] Evolución por piedra dependiendo del género:

Aplicar este método evolutivo fue un poco dificil de enterder para mí, así que les dejo una mejor explicación de como hacerla funcionar.

Primero ensamblar esta rutina de Doesntknowhowtoplay:
Código:
.org 0x4318e
lsl r0, r0, #0x0
ldr r2, .MethodAddr
bx r2

[B].MethodAddr: .word 0x[COLOR="Lime"]08F02001[/COLOR][/B]  [PLAIN]@Camb[/PLAIN]ia al offset donde el código será insertado +1


[B].org 0x[COLOR="lime"]F02000[/COLOR][/B]  [PLAIN]@Camb[/PLAIN]ia al offset donde el código será insertado (Sin agregar nada)
cmp r0, #0x7
beq StandardStone
[B]cmp r0, #[COLOR="lime"]0x14[/COLOR][/B] [PLAIN]@Camb[/PLAIN]ia por un ID de evolución que esté libre
beq MaleStone
[B]cmp r0, #[COLOR="lime"]0x15[/COLOR][/B]  [PLAIN]@Camb[/PLAIN]ia por un ID de evolución que esté libre
beq FemaleStone
b NoEvo

MaleStone:
push {r1-r3}
mov r0, r7
mov r1, r8
ldr r1, [r1, #0x0]
bl DetermineGender
pop {r1-r3}
cmp r0, #0x0
beq StandardStone
b NoEvo


FemaleStone:
push {r1-r3}
mov r0, r7
mov r1, r8
ldr r1, [r1, #0x0]
bl DetermineGender
pop {r1-r3}
cmp r0, #0xFE
beq StandardStone
b NoEvo


StandardStone:
ldrh r0, [r1, #0x2]
cmp r0, r9
beq Finish

NoEvo:
ldr r2, .NoEvoReturn
bx r2

DetermineGender:
ldr r2, .DetermineGenderFunc
bx r2

Finish:
ldr r2, .EvoReturn
bx r2

.NoEvoReturn: .word 0x08043199
.EvoReturn: .word 0x0804317d
.DetermineGenderFunc: .word 0x0803f78d
El cmp r0, #0x14 corresponde a evolución por pieda si es macho y cmp r0, #0x15 si es hembra. Cambia esas definiciones solo si las mismas ya estan ocupadas en tu tabla de metodos de evolución.

Esto generará un archivo .bin lleno de 00s. La rutina ya tiene los fixes y el hook. Solo deber abrir el archivo bin generado e ir a 0x804318E y copiar el hook y pegarlo en tu ROM en la misma dirección. FInalmente desplázate en el bin hasta la dirección odnde especificaste prondrías el código y haces lo mimso y lo pegas en tu ROM.

Finalmente solo es cuestión de editar la evolución de tu Pokémon para que evolucione mediante el item deseado. No es necesario agregar nada en la tabla de evoluciones ya que las evoluciones por piedra son distintas a las evoluciones por nivel. Y puedes editar el ini de PGE, G3Hs o G3T para que las nuevas definiciones sean sencillas de agregar.

Muchas gracias ruki la verdad yo no habia entendido esa rutina y si llevo mucho tiempo viendola en pokecommunity en asm thread, otra vez nos haz salvado la vida.
 

JorgeV

Pequeño saltamontes
La verdad necesito ayuda. Ya inserte un metodo pero cuando auiero agregar ptro no me sale odea copio los mismos 3c de espacios Hex y hago los mismos procedimientos para cada nueva evolucion o todas las evolucipnes seram del mismo metodo?
 

KERBEROS

Usuario de Platino
La verdad necesito ayuda. Ya inserte un metodo pero cuando auiero agregar ptro no me sale odea copio los mismos 3c de espacios Hex y hago los mismos procedimientos para cada nueva evolucion o todas las evolucipnes seram del mismo metodo?
tienes que seguir los mismos pasos, menos el de repuntear la tabla.
 

Azulado

Ex-Creador de Genshin Emblem no es un hack de PKMN
no entiendo mucho la parte de copiar la rutina exactamente cual es la parte que debo editar
 

SombraMetalica

Knight of Shadows
no entiendo mucho la parte de copiar la rutina exactamente cual es la parte que debo editar
No te he entendido muy bien, pero si deseas aplicar la rutina de las evoluciones por genero al final debes editar lo que dice: pokemondata: .word 0x08254784
A: pokemondata: .word 0x8XXXXXX
XXXXXX= tu tabla de pokemondata

Esto solo aplica si ya has expandido la tabla de pokémon.
 

Azulado

Ex-Creador de Genshin Emblem no es un hack de PKMN
No te he entendido muy bien, pero si deseas aplicar la rutina de las evoluciones por genero al final debes editar lo que dice: pokemondata: .word 0x08254784
A: pokemondata: .word 0x8XXXXXX
XXXXXX= tu tabla de pokemondata

Esto solo aplica si ya has expandido la tabla de pokémon.
y como le hago para hacer mas evoluciones que no tengan esa tabla que dice pokemondata como por ejemplo estas
evolucion con movimiento tipo hada (KDS Credits)

.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 @reemplace XX con 16 si está usando rombase de MrDollSteak, de lo contrario, mantenga el índice que ha establecido al agregar el tipo de hada
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 @si ha vuelto a señalar la tabla de movimientos, esto también debe cambiarse, para el rombase de MrDollSteak establecido en 0x08900000
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9


evolucion con pokemon tipo siniestro en el equipo (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



evolucion segun el mapa especifico (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



evolucion con lluvia (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



evolucion de noche + subir nivel (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



evolucion de dia + subir nivel (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



Evolucion de noche con item equipado
(Si editó la tabla de estructura de datos de Pokémon en la RAM, el item no funcionará)

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


Evolucion de dia con item equipado (Si editó la tabla de estructura de datos de Pokémon en la RAM, el item no funcionará)

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



Evolucion con amistad de noche (Ya puede editar la rutina en la tabla porque no funcionan en 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



Evolucion con amistad de dia (Ya puede editar la rutina en la tabla porque no funcionan en 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



Evolucion con Movimiento

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



Evolucion con otro pokemon en el equipo

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



Evolucion por nombre de mapa Especifico (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
 

methis69

Usuario de platino
Les comparto un parche con los tres metodos usando como base el parche 100 en español; En este parche tambien cuenta el tipo hada agregado pero sustituyendo el atritubo ?? como hada (se actualizo la tabla de efectividad) y se expandio la tabla de evolucion 5 a 8.

NOTA: El pokedex regional se modifico de 151 a 251 (OJO: no lo expandi usando PGE); Si se pregunta como lo hice? use el programa HexManiacAdvance (una chulada de herramienta); Si desean retonarlo a su valor de origen (o modificarlo a la cantidad de su agrado) hagan lo siguiente: Scripts > Pokédex > Regional Length; donde dice 251 modifiquenlo 151, guardar y listo (el resto lo hara el programa automaticamente).

PD: Les agrego el ini del G3HS
 

Adjuntos

Última edición:
Arriba