Ante de todo quiero decir que yo escribí esto pequeno truco para mi tutorial "Al descubrimento de...emerald!", solo que, para un problema de el foro, mi update se perdi!
Pero ok...està bien asì, vamos a explicar de que se trata!
[HR]
Lo que voy a explicar no es una routine ASM, ni un script...solo una pequena curiosidad que se podría utilizar si se tiene un poco de inventiva ^^
De que se habla?
Asì como dice el titulo, nos encargamos de crear una wilde double battle como en los nuevos juego de Pokèmon Black y White.
[HR]
De que necesitamos?
Nada màs que de nuestro VBA!
[HR]
Empezamos...
- Cargamos nuestra ROM en el VBA y empezamos a jugar.
- Vamos en la hierba y esperamos que un wilde pokèmon nos asaltos (<== se dice asì?? XD)
- Quando la pantalla volverà màs o menos como aquella de esto screen...
paramos el nuestro emulador y vamos en: tools ==> memory viewer.
- nos vemos la habitual lista de valores hexadecimales, pero bien, no es importante. Vamos en el espacio libre y insertamos estos offset:
FIRE RED: 02022B4C
RUBY: 020239F8
EMERALD: 02022FEC
(La nuestra versión no es importante, el procedimiento siempre es el mismo...no hay distinción)
- bien, ahora la única cosa que tenemos que acher es sostituir lo que nos aparece con 01 y...voilà!
- continuamos a jugar y veremos las nuestra double wilde battle!!
! Para mejo entendir...mira esto video echo por grandmaster101587458.
Hay BUG...??
El segundo pokemon es igual al 100% al primiero (stat, HP, tipe, etc...)
[HR]
Como puedo usar esto en un script?
mhm...creo que un simple Writebytetooffset seria perfecto. Por ejemplo se podria poner uno script ante de la hierba y poner esto:
writebytetooffset 0x1 0x(Offset de tu ROM base)
[HR]
[HR]
Bien amigos...no hay nada que decir...esto es mi "knowledge". Como utilzar esto dependerá de usted!! Muchas suerte amigos!!
Ah SteveN, adelantaste-te a mi unos dias. Yo vengo investigando eso hace varios meses.
Saludos de Sonic1 de PokeCo.
La verdad es que ese WriteByteToOffset no funciona. La razón es porque el juego hace 2 'writes' a ese offset (BattleFlag). El primer es cuando en el momento que te apercibes que vas a tener una wild battle (cuando la musica comienza), y da reset a flag (mete 00), y el segundo es para añadir 4 a ese offset, tornando la batalla en WildBattle. Eso quiere decir que cualquier valor anterior será borrado.
Asi que tendrás que modificar el r1 en la rutina que escribe para ese offset para 1, para que el game añada 4, resultando en 5, que significa Double Wild Battle.
Yo tengo una rutina para firered:
En el offset 01065c, pongan un Bx para esta rutina.
.thumb
.align 2
main:
LDR R5, =0x20370CA ' var 8009
LDRB R5, [R5]
CMP R5, #0xF 'Si la var 8009 es 0xF entonces va al nuevo codigo. Si no, continua el viejo
BEQ new_code
STR R1, [R2]
LDR R1, =0x2023E82
MOV R0, #0xF
STRB R0, [R1]
LDR R4, =0x8010665
BX R4
new_code: 'Añade 1 al registro 1, activando el Bit de Double Battle, quedando Double Wild Battle
ADD R1, #1
STR R1, [R2]'----------El resto de la rutina
LDR R1, =0x2023E82
MOV R0, #0xF
STRB R0, [R1]
LDR R4, =0x8010665
BX R4
Asi que cuando la variable 0x8009 tiene el valor 0xF, todas las batallas seran Double, incluso las Wild Battles.
He logrado cargar dos pokemons del mapa diferentes, pero no consigo hacer la música 'Win Battle' solo tocar cuando derroto el 2º Pokemon.
De cualquier de las maneras, buena knowledge ;)
Sonic1,Sonicarvalho
quando mire el titulo pensé que era la double battle como en pokemon crono *-*
pero despues he visto "wilde" = ( ,en fin sigue siendo bueno : 3
seria original ponerlo en un script ^^ pero con !pokemons diferentes!
como latios y latias o algo parecido xD en una wildBattle ^-^
Ah SteveN, adelantaste-te a mi unos dias. Yo vengo investigando eso hace varios meses.
Saludos de Sonic1 de PokeCo.
La verdad es que ese WriteByteToOffset no funciona. La razón es porque el juego hace 2 'writes' a ese offset (BattleFlag). El primer es cuando en el momento que te apercibes que vas a tener una wild battle (cuando la musica comienza), y da reset a flag (mete 00), y el segundo es para añadir 4 a ese offset, tornando la batalla en WildBattle. Eso quiere decir que cualquier valor anterior será borrado.
Asi que tendrás que modificar el r1 en la rutina que escribe para ese offset para 1, para que el game añada 4, resultando en 5, que significa Double Wild Battle.
Yo tengo una rutina para firered:
En el offset 01065c, pongan un Bx para esta rutina.
.thumb
.align 2
main:
LDR R5, =0x20370CA ' var 8009
LDRB R5, [R5]
CMP R5, #0xF 'Si la var 8009 es 0xF entonces va al nuevo codigo. Si no, continua el viejo
BEQ new_code
STR R1, [R2]
LDR R1, =0x2023E82
MOV R0, #0xF
STRB R0, [R1]
LDR R4, =0x8010665
BX R4
new_code: 'Añade 1 al registro 1, activando el Bit de Double Battle, quedando Double Wild Battle
ADD R1, #1
STR R1, [R2]'----------El resto de la rutina
LDR R1, =0x2023E82
MOV R0, #0xF
STRB R0, [R1]
LDR R4, =0x8010665
BX R4
Asi que cuando la variable 0x8009 tiene el valor 0xF, todas las batallas seran Double, incluso las Wild Battles.
He logrado cargar dos pokemons del mapa diferentes, pero no consigo hacer la música 'Win Battle' solo tocar cuando derroto el 2º Pokemon.
De cualquier de las maneras, buena knowledge ;)
Sonic1,Sonicarvalho
oh woooow! Amigo tu ayuda ha sido muy muy util! muchas gracias! ^^
En verdad, acerca de el WBTO yo no fue del todo seguro...porque no tengo mi pc conmigo y no he podido testar eso. solo fue una mi asunción :P
Tenía miedo de que el juego hubiera sido una especie de "refresh" que tomava el valor a su posición normal y que solo una routine ASM podría arreglar,
Bien amigo...muchas gracias de nuevo por tu aporte! :)
Iniciado por ObscureSideMt2
quando mire el titulo pensé que era la double battle como en pokemon crono *-*
pero despues he visto "wilde" = ( ,en fin sigue siendo bueno : 3
seria original ponerlo en un script ^^ pero con !pokemons diferentes!
como latios y latias o algo parecido xD en una wildBattle ^-^
!Saludos!
eheheh! amigo...la de Crono es bastante complicada. Nada ASM, solo HEX pero ahora no tengo màs el crono y todos mi datos para poder escribir el tutorial...disculpame amigo...^^"