[ASM] FR | chequeo de teclas


Like Tree26Gracias
  • 14 Post By L!no
  • 1 Post By KrenoZ
  • 3 Post By Skyflyer
  • 1 Post By Sage0ne
  • 1 Post By Sasaki Haise
  • 1 Post By Mr. Luxray
  • 5 Post By CompuMax
Respuesta
 
Herramientas Desplegado
  #1  
17/01/2017
Predeterminado FR | chequeo de teclas
Hoy les traigo una rutina que encontre en pokecommunity para saber que tecla pulso el jugador, la rutina es de FBI,creditos para el.

¿qué necesitamos?
---------------------
HxD
Un cerebro (obligatorio)
---------------------

Empezemos!
Primero descargamos FR compilamos esta rutina y la insertamos en un offset vacio:

rutina

.text
.align 2
.thumb
.thumb_func

main:
ldr r0, =(0x30030F0)
ldrh r1, [r0, #0x2E] @byte in super state for keypress
cmp r1, #0x0
beq cont
ldr r0, =(0x20370B8) @var 0x8000 location
strh r1, [r0]
ldr r4, =(0x806B922 +1)
bx r4

cont:
mov r0, #0x1
and r0, r0, r1
cmp r0, #0x0
beq section
ldr r1, =(0x806B922 +1)
bx r1

section:
ldr r0, =(0x806B8A6 +1)
bx r0

.align 2


Como los amo a todos, les dejare la rutina ya compilada:

rutina

07 48 C1 8D 00 29 03 D0 06 48 01 80 06 4C 20 47 01 20 08 40 00 28 01 D0 03 49 08 47 03 48 00 47 F0 30 00 03 B8 70 03 02 23 B9 06 08 A7 B8 06 08


Para quienes la vayan a insertar ya compilada, el espacio necesario es de 30 bytes.
----------------------------------------------------------------------------------
¡Es muy importante anotar donde la insertaron!
----------------------------------------------------------------------------------
Ok, sigamos.
Vayan al offset 6B89A con ctrl+G y pegen escribiendo ctrl+B esto:
[CODE]00 00 00 48 00 47 XX XX XX 08[CODE]
Donde XX XX XX es el pointer a nuestra rutina +1.

como crear el pointer

Imaginemos que yo puse la primera rutina en la posicion 0x800000:
Tomen su direccion y agregenle 1:
0x800000 - 0x800001
Separenla en 3 grupos de dos numeros/letras:
0x800001 - 0x80 0x00 0x01
Ahora pongan el primer grupo en el ultimo lugar y el ultimo en el primero:
0x80 0x00 0x01 - 0x01 0x00 0x80
Y nuestro pointer es:
01 00 80


¿Que hicimos?
Le dimos a la variable 0x8000 la funcion de guardar la tecla que pulsamos.
Y los valores de las teclas son:
Abajo: 0x80
Arriba: 0x40
Izquierda: 0x20
Derecha: 0x10
A: 0x1
B: 0x2
Select: 0x4
Start: 0x8
Para saber que tecla es pulsada pongan esto en un script:
Código:
pause 0x250
compare 0x8000 0x(valor de la tecla)
if 0x1 goto @(direccion)
Ejemplo:
Código:
#dynamic 0X800000
#org @inicio
lock
msgbox @msg 0x6
pause 0x250
compare 0x8000 0x20
if 0x1 goto @continua
msgbox @msg1 0x6
release
end

#org @continua
msgbox @msg2 0x6
release
end

#org @msg
= maldicion... esta contraseña es\nnueva...\l¿que hago?\lpulsa [R] para poner la contraseña\loriginal o [L] para apretar numeros al\lazar

#org @msg1
= la alarma! yo me piro!

#org @msg2
= uffff...\nabrio!
Rojo: Te da diez segundos para elegir una tecla, una vez elegida, mantener.
Azul: Compara la variable 0x8000 con 0x20, que significa que tocamos izquierda.
Negro: La condicion, sin condicion no hay compare.

Ya ven,con esto pueden hacer el sistema de hacks como pokemon triangulo origen o pokemon ancient en su propio hack.
Y por ultimo,las imagenes del testeo:
Click para ver el album.
Visita mi pagina web para ver algunos de mis proyectos y tech demos.

Última edición por L!no; 20/03/2019 a las 22:16
  #2  
17/01/2017
Predeterminado Respuesta: ASM|chequeo de teclas
Y porqué no han comentado todavía aquí? xD

Muy bueno el aporte,siempre me preguntaba como hacer eso(aunque no se si ya lo habían posteado aquí),pero no sabía que era tan fácil.
Bueno,muchas gracias tío,gran aporte,de seguro lo uso.
Saludos.
Gracias: L!no
Ambos somos tan miserables...
Pero, nos tenemos el uno al otro, y eso es lo único que importa...
A pesar de que...
Ninguno de los dos sea capaz de amar en verdad...
  #3  
17/01/2017
Predeterminado Re: ASM|chequeo de teclas
La verdad es que esto está guay para llevar a cabo ciertos puzles del juego y darle así más variedad.

Por cierto, veo que usas "->" para las flechas, puedes poner el simbolo de flecha como tal si pones en la msgbox:

[U] (Up)
[D] (Down)
[L] (Left)
[R] (Right)

Imagino que no hace falta aclararlo pero por si acaso, es poner la letra en cada caso con sus corchetes (los paréntesis no).

Un saludo!
Gracias: zaux, Corbitto y L!no
El talento sólo son unos pasos que te ahorras en el camino del esfuerzo. Con esfuerzo y paciencia puedes lograr todo lo que te propongas. Incluido hacer tu propio hackrom
  #4  
19/01/2017
Predeterminado Respuesta: ASM|chequeo de teclas
Damn! DamnDammDamn!
Vaya que estoy sorprendido, eres nuevo y ya estas aportando cosas como esta, sin duda es genial, a mucha gente (incluyéndome) le servirá un montón! No sabía que había otra forma de hacerlo sin wbto.
Sin duda acabas de robar mi atención y ganarte mi respeto
Sigue asi!
Gracias: L!no
  #5  
19/01/2017
Predeterminado Respuesta: ASM|chequeo de teclas
Esto ya se podía hacer con WTBO de hecho el script del Pokémon Triángulo Origen está hecho con WTBO si mal no recuerdo.
Pero bueno, nunca vienen mal otros métodos ya que quién sabe, quizá este método te deje hacer cosas con WTBO no.
Puede que lo pruebe en un futuro, gracias por el aporte.
Saludos!
Gracias: L!no
  #6  
20/01/2017
Predeterminado Re: ASM|chequeo de teclas
Muy buen tuto linobigatti te estas llevando bien con los ASM
Gracias: L!no
"Se rien de mi por ser diferente, yo me rio de ustedes por ser todos iguales" -Kurt Cobain


Quieres jugar a Pokémon Sol y Luna en GBA?

Pincha Aqui!

https://whackahack.com/foro/t-47442/pokemon-viajes-en-alola-actu-25-4-17-a

Proyectos:


🎮
  #7  
22/01/2017
Predeterminado Respuesta: ASM|chequeo de teclas
No es muy diferente al método anterior, pero está bien que haya mas de una manera.
No recuerdo pero creo que el engin de jpan tenia algo de esto (NO RECUERDO).
Esta todo bien, todo perfecto y fácil de entender
Lindo aporte!

-------------
Para llevar tan poco tiempo en el RH, te has sabido mover bastante bien colega, sigue así!
COMING SOON

The grass is greener than ever

El mejor tutorial de inserción de Tiles

(Yes, we had to wait until 2020 for this to happen...)
----------------
¡No te olvides de visitar mi galería de mapas!
Exposición del Desastre - !Los mapitas del tío Sub!

Discord: DrakoVinyl#3790
  #8  
22/01/2017
Predeterminado Respuesta: ASM|chequeo de teclas
Primero que nada gracias por traer la rutina a la comunidad (no sé si ya estaba aquí). Yo uso esta rutina desde hace ya un tiempo y tengo que aclarar unas cuantas cosas respecto a ella que no lo has comentado en el post.

1) No hace falta hacer una pausa ni mantener presionado el botón a seleccionar. Para ello puedes llamar la función que "escucha" que presionas alguna tecla en determinado momento y continuar con el script. La función es waitkeypress y lo que hace es esperar que sea presionada una tecla y continúa con la siguiente línea del script donde se puede verificar qué tecla se presionó de acuerdo al valor de la variable, en este caso, la variable 0x8000. Un ejemplo:

Script


#org @loop
waitkeypress 'Espera a que se presione alguna tecla
compare 0x8000 0x10 'Verifica si fué la tecla derecha
if 0x1 goto @derecha 'Va al script correspondiente a la tecla derecha
compare 0x8000 0x20 'Verifica si fué la tecla izquierda
if 0x1 goto @izquierda 'Va al script correspondiente a la tecla izquierda
compare 0x8000 0x80 'Verifica si fué la tecla abajo
if 0x1 goto @abajo 'Va al script correspondiente a la tecla abajo
compare 0x8000 0x40 'Verifica si fué la tecla arriba
if 0x1 goto @arriba 'Va al script correspondiente a la tecla arriba
goto @loop 'Si no se presionó ninguna de las teclas esperadas omite la tecla presionada y sigue monitoreando las teclas
end


2) Se debe tener en cuenta que si se mantiene presionado más de una tecla al mismo tiempo, el valor de la variable 0x8000 será la sumatoria del valor de las teclas presionadas, es decir, que si presionamos A + B , el valor de la variable será 0x3. Quizás parezca insignificante, pero si ven casos como B + START + DERECHA será 0x20, lo que corresponde a la tecla IZQUIERDA. Además de que con un poco de ingenio le dá un mayor espectro de usos a esta maravillosa rutina como hacer condiciones de multiples teclas.

Finalmente agradezco una vez más que hayas traido la rutina al foro, pero creo que no debería ser solo traducir lo que medio se entiende y postearlo sin tener un conocimiento a fonde de lo que se está publicando. No sé si será una falta, pero ni siquiera te has tomado la molestia de publicar el enlace al post original. Espero que mejores la manera en que haces tus publicaciones y que sigas trayendo estos maravillosos aportes a la comunidad.

Saludos!

Max.

  #9  
01/08/2019
Predeterminado Re: FR | ASM | chequeo de teclas
Dicho por L!no Ver mensaje
Hoy les traigo una rutina que encontre en pokecommunity para saber que tecla pulso el jugador, la rutina es de FBI,creditos para el.

¿qué necesitamos?
---------------------
HxD
Un cerebro (obligatorio)
---------------------

Empezemos!
Primero descargamos FR compilamos esta rutina y la insertamos en un offset vacio:

rutina

.text
.align 2
.thumb
.thumb_func

main:
ldr r0, =(0x30030F0)
ldrh r1, [r0, #0x2E] @byte in super state for keypress
cmp r1, #0x0
beq cont
ldr r0, =(0x20370B8) @var 0x8000 location
strh r1, [r0]
ldr r4, =(0x806B922 +1)
bx r4

cont:
mov r0, #0x1
and r0, r0, r1
cmp r0, #0x0
beq section
ldr r1, =(0x806B922 +1)
bx r1

section:
ldr r0, =(0x806B8A6 +1)
bx r0

.align 2


Como los amo a todos, les dejare la rutina ya compilada:

rutina

07 48 C1 8D 00 29 03 D0 06 48 01 80 06 4C 20 47 01 20 08 40 00 28 01 D0 03 49 08 47 03 48 00 47 F0 30 00 03 B8 70 03 02 23 B9 06 08 A7 B8 06 08


Para quienes la vayan a insertar ya compilada, el espacio necesario es de 30 bytes.
----------------------------------------------------------------------------------
¡Es muy importante anotar donde la insertaron!
----------------------------------------------------------------------------------
Ok, sigamos.
Vayan al offset 6B89A con ctrl+G y pegen escribiendo ctrl+B esto:
[CODE]00 00 00 48 00 47 XX XX XX 08[CODE]
Donde XX XX XX es el pointer a nuestra rutina +1.

como crear el pointer

Imaginemos que yo puse la primera rutina en la posicion 0x800000:
Tomen su direccion y agregenle 1:
0x800000 - 0x800001
Separenla en 3 grupos de dos numeros/letras:
0x800001 - 0x80 0x00 0x01
Ahora pongan el primer grupo en el ultimo lugar y el ultimo en el primero:
0x80 0x00 0x01 - 0x01 0x00 0x80
Y nuestro pointer es:
01 00 80


¿Que hicimos?
Le dimos a la variable 0x8000 la funcion de guardar la tecla que pulsamos.
Y los valores de las teclas son:


Para saber que tecla es pulsada pongan esto en un script:
Código:
pause 0x250
compare 0x8000 0x(valor de la tecla)
if 0x1 goto @(direccion)
Ejemplo:
Código:
#dynamic 0X800000
#org @inicio
lock
msgbox @msg 0x6
pause 0x250
compare 0x8000 0x20
if 0x1 goto @continua
msgbox @msg1 0x6
release
end

#org @continua
msgbox @msg2 0x6
release
end

#org @msg
= maldicion... esta contraseña es\nnueva...\l¿que hago?\lpulsa [R] para poner la contraseña\loriginal o [L] para apretar numeros al\lazar

#org @msg1
= la alarma! yo me piro!

#org @msg2
= uffff...\nabrio!
Rojo: Te da diez segundos para elegir una tecla, una vez elegida, mantener.
Azul: Compara la variable 0x8000 con 0x20, que significa que tocamos izquierda.
Negro: La condicion, sin condicion no hay compare.

Ya ven,con esto pueden hacer el sistema de hacks como pokemon triangulo origen o pokemon ancient en su propio hack.
Y por ultimo,las imagenes del testeo:
Click para ver el album.
Lino ando tratando de desarrollar lo siguiente, un d-pad con las direciones de caminar invertidas. Peri necesito que se ejecute la inversión durante un tiempo. Esto serviría? Es decir poder caminar de forma invertida durante un tiempo o al menos que se pueda activar o desactivar.

PREMIOS SABROSOS


Respuesta

Herramientas
Desplegado

Permisos para publicar mensajes
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los BB code están Activado
Los Emoticones están Activado
El código [IMG] está Activado
El Código HTML está Desactivado
Trackbacks are Activado
Pingbacks are Activado
Refbacks are Desactivado



Extra
Estilo clásico
La franja horaria es GMT +1. Ahora son las 19:19.