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

Hachiman Hikigaya
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

Hachiman Hikigaya
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 ^^!
 

Dr._Seuss

Que soy Gold Carajo >:c
[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.

 

Dr._Seuss

Que soy Gold Carajo >:c
[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.
 

Annatar

A la luz del quinto día, mira al este
[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 :)
 

Dr._Seuss

Que soy Gold Carajo >:c
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

Profesional de WaH
[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.
 
Arriba