Registrarse

[ASM] FR | Evitar huida de Pokémon Salvaje

MetalKaktus

A la luz del quinto día, mira al este
Miembro insignia
Hola a todo el mundo, hoy traigo una rutina bastante interesante que deshabilita la posibilidad de huir de un combate con un pokemon salvaje. La rutina no es mía, podéis encontrarla aquí.

Los créditos son para MrDollSteak

La rutina hará diferentes cosas dependiendo del valor de una variable, esta variable es la 0x8000 y según su valor lograremos diferentes cosas:

0x0: El juego seguirá normal
0x1: Pokemon no capturable, imposible huir
Cualquier otro valor: Pokemon no capturable, posible huir
Rutina para Fire Red

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

Main:
	ldr r0, .Variable
	ldrb r0, [r0]
	cmp r0, #0x0
	bne CannotRun
Return:
	ldr r1, =(0x2023BE2)
	ldr r0, =(0x2023BCC)
	ldrb r0, [r0]
	strb r0, [r1]
	ldr r1, =(0x2023E8A)
	ldr r0, = (0x8016888 +1)
	bx r0
CannotRun:
	mov r6, #0x0
	ldr r0, = (0x801688C +1)
	bx r0

.align 2
.Variable:
	.word 0x020270B8 + (0x8000 * 2)  [MENTION=26827]Camb[/MENTION]iad el valor de la variable si lo deseáis.
Insertar 01 48 00 47 00 00 xx xx xx 08 en 0801687E

Donde XX XX XX es el offset de nuestra rutina + 1 permutado.

Offset rutina: 0x80A650

80 A6 50

80 A6 51

51 A6 80

Espero que os haya gustado este pequeño aporte y hasta otra ;)
 

~Criisss

Usuario mítico
Respuesta: [ASM][FR] Evitar huida de Pokémon Salvaje

Primero que nada, gracias por traerlo, estos aportes son los que suman.

Ahora, no me quedó muy claro como es que se usa, no se si es que falta algo en la explicación. Setear la variable y hacer el callasm ¿qué resultado tiene? ¿El siguiente combate tiene la modalidad elegida? ¿o es para siempre y hay que desactivarlo haciendo una segunda llamada?
 

MetalKaktus

A la luz del quinto día, mira al este
Miembro insignia
Re: Respuesta: [ASM][FR] Evitar huida de Pokémon Salvaje

Primero que nada, gracias por traerlo, estos aportes son los que suman.

Ahora, no me quedó muy claro como es que se usa, no se si es que falta algo en la explicación. Setear la variable y hacer el callasm ¿qué resultado tiene? ¿El siguiente combate tiene la modalidad elegida? ¿o es para siempre y hay que desactivarlo haciendo una segunda llamada?
No hace falta hacer ningún callasm, simplemente mientras la variable tenga el valor 0x1 todos los combates serán ineludibles. Para volver a dejar el juego tal y como estaba hace falta volver a setear la variable a cero.
 

~Criisss

Usuario mítico
Respuesta: [ASM][FR] Evitar huida de Pokémon Salvaje

Entiendo. Entonces lo ideal sería cambiar que la variable sea la 0x8000. No se si MrDollSteak lo hizo a propósito o qué, pero las variables desde 0x8000 en adelante se suelen usar como temporales (de ahí la confusión con el callasm) y puede que cambie el modo de batalla, de manera indeseada.

Además, si revisas todas las funciones similares que tiene el hacked engine de JPAN, todas estas usan varibles 0x4000 en adelante.
 

MetalKaktus

A la luz del quinto día, mira al este
Miembro insignia
Re: [ASM][FR] Evitar huida de Pokémon Salvaje

Si, bueno pero lo normal es usar esta rutina para casos puntuales que tengan que ver con la historia del hack, pero si, si lo quieres de manera segura y prolongada lo mejor es usar una variable seguro, o incluso una flag (aunque para eso haya que modificar ligeramente la rutina).
 

KERBEROS

Usuario de Platino
Respuesta: FR | ASM | Evitar huida de Pokémon Salvaje

Pregunto!
Como uso el sistema? despues de insertar la rutina, debo hacer
hacer el call 0xoffset
dando valor a la variable 8000 segun mis deseos?
o lo hace de forma aleatoria automaticamente?
 

Gold

Porrero a tiempo parcial
Miembro insignia
Respuesta: FR | ASM | Evitar huida de Pokémon Salvaje

Pregunto!
Como uso el sistema? despues de insertar la rutina, debo hacer
hacer el call 0xoffset
dando valor a la variable 8000 segun mis deseos?
o lo hace de forma aleatoria automaticamente?
Es usando la variable 0x8000. Antes de iniciar una batalla contra un Pokémon salvaje debes de poner un setvar en un script con el valor dependiendo de lo que quieras. Setvar 0x8000 0x0 hará que los Pokémon se capturen normal, setvar 0x8000 0x1 no se podrán capturar, pero si huir, y cualquier otro valor hace que simplemente no puedas atrapas, pero si huir.
 

KERBEROS

Usuario de Platino
Respuesta: FR | ASM | Evitar huida de Pokémon Salvaje

Es usando la variable 0x8000. Antes de iniciar una batalla contra un Pokémon salvaje debes de poner un setvar en un script con el valor dependiendo de lo que quieras. Setvar 0x8000 0x0 hará que los Pokémon se capturen normal, setvar 0x8000 0x1 no se podrán capturar, pero si huir, y cualquier otro valor hace que simplemente no puedas atrapas, pero si huir.
otra cosa. Y disculpa!
Uso base JPAN!
No hay problema?
Y esa variable se reinicia sola verdad?
 

MetalKaktus

A la luz del quinto día, mira al este
Miembro insignia
Re: FR | ASM | Evitar huida de Pokémon Salvaje

Testealo tu mismo, es la mejor forma de saberlo. De todos modos la variable 8000 es temporal y dudo que haya ningún problema, en caso de haberlo dímelo y te daré el offset de otra variable (pero no hará falta)
 

KERBEROS

Usuario de Platino
Respuesta: Re: FR | ASM | Evitar huida de Pokémon Salvaje

Testealo tu mismo, es la mejor forma de saberlo. De todos modos la variable 8000 es temporal y dudo que haya ningún problema, en caso de haberlo dímelo y te daré el offset de otra variable (pero no hará falta)
Perdon, pero si quiero usar otra variable segura, solo debl
Cambiar la ultima linia de la rutina?
 

MetalKaktus

A la luz del quinto día, mira al este
Miembro insignia
Re: FR | ASM | Evitar huida de Pokémon Salvaje

A ver, que no uses variables seguras, las temporales sirven para este proposito
 
Arriba