Scripts de gatillo y condición mayor a $FF: ¿Hemos vivido engañados todas nuestras vidas?

Avisos

Like Tree15Gracias
  • 14 Post By Inquisidor K. Frank
  • 1 Post By Xabier2012

Respuesta
 
Herramientas Desplegado
  #1  
06/11/2016
Predeterminado Scripts de gatillo y condición mayor a $FF: ¿Hemos vivido engañados todas nuestras vidas?
Saludos, gente.
Trasteando algunas cosas el otro día me encontré con algo muy interesante: veamos los campos que el A-Map nos muestra al seleccionar (en la pestaña "Eventos") un script de gatillo.

Script de gatillo


Para el que no lo sepa, los scripts de gatillo son las casillas de fondo verde que vemos en A-Map y tienen una S encima. Las he rodeado con un cuadrado rojo



Var number: Ahí ponemos la variable que usaremos para el script.
Var value: Ahí va el valor que debe tener la variable anterior para que el script de gatillo se ejecute.

Como sabemos, una variable almacena 2 bytes. Es decir, cualquier valor entero entre 0 y 65535 (0xFFFF). Por lo tanto, es lógico que A-Map nos de cuatro lugares para llenar en el campo "Var value", ¿no?

Sin embargo, lo que LU-HO (creador de A-Map) al parecer ignoraba por completo es que el juego no lee los 2 bytes. ¿Por qué? No tengo idea, pero la verdad es que no lo hace.

¿Cómo lo sé?
Todo empezó cuando intentaba ejecutar un script de gatillo si y sólo si la variable $40FF tenía valor $FFFF. Sin embargo, a pesar de hacer todo correctamente, el script simplemente no sucedía nunca.

¿Y cómo sé que no es un simple error mío?
Para verificar mis sospechas busqué la rutina ASM que carga el byte y lo compara con el valor de la variable. Tras verla, me quedó claro que solamente leía 1 byte, ya que la instrucción era ldrb (b = byte) en lugar de ldrh (h = halfword = 2 bytes).

¿Entonces estamos condenados a usar como condición para los scripts de gatillo valores menores o iguales a $FF (255)?
Nop, claro que no. Como ya dije, para cargar 2 bytes deberíamos usar la instrucción ASM ldrh en lugar de ldrb. Entonces, podemos lograr que nuestro ROM cargue ambos valores haciendo algo tan simple como modificando 2 dígitos en un editor hexadecimal.

¿Cómo? ¡DÍMELO YA!
Abrimos nuestro ROM con un editor hexadecimal (por ejemplo, HxD) y nos vamos al offset que corresponda:

Fire Red: 0x06DDA6
Ruby: 0x068DA2
Emerald: 0x09D072

En tal offset deberíamos ver: "21 7A" (o bien "7A21", según cómo tengan configurado el editor).
Simplemente lo convertimos en un "21 89" (o bien "8921").
Y listo, ahora ya pueden usar valores mayores a $FF como condición para un script de gatillo.

¿Y qué carajo hice?
Hicimos el siguiente cambio:
"ldrb r1, [r4, #8]" => "ldrh r1, [r4, #8]"

Espero que esto le sirva a alguien. Un saludo

GMod de un tono algo insolente, hiciste que a la gente le duela tu dolor.
GMod, de staff equilibrista, más que GMod artista con vicios de GMod...
¿Crees que Flame ha hecho un buen trabajo? ¡Entra!
Ya ves, a mí y a Whack a Hack nos falta tanto el aire cuando no está el GMod...

100% STAFFMIGUISTA
¡VIVA EL STAFFMIGUISMO!

Edo...Volvé y sé millones




EDO 4 ADMIN



Última edición por Inquisidor K. Frank; 06/11/2016 a las 00:06 Razón: Puta pizarra deformable, ya arréglenla hijos de puta
  #2  
06/11/2016
Predeterminado Respuesta: Scripts de gatillo y condición mayor a $FF: ¿Hemos vivido engañados todas nuestras vidas?
Muy buena esa. Muy buena.

edit: Realmente todo puede ser culpa de LU-HO, pero bueno, realmente yo no utilizo vars con valores muy altos.

Última edición por Xabier2012; 06/11/2016 a las 00:25
  #3  
06/11/2016
Predeterminado Respuesta: Scripts de gatillo y condición mayor a $FF: ¿Hemos vivido engañados todas nuestras vidas?
Creí que ya leía los dos bytes, ya que el documento sobre comandos de scripts de DavidJcobb menciona que, efectivamente, las variables almacenan 0xFFFF y las variables ocultas 0xFFFFFF. Gracias por el aporte.

  #4  
06/11/2016
Predeterminado Respuesta: Scripts de gatillo y condición mayor a $FF: ¿Hemos vivido engañados todas nuestras vidas?
Incredible, a estas alturas y descubriendo algo tan simple como eso, Franco sos un grande!

No es algo que me esperase para nada, y la verdad que me ha dejado a cuadros que nadie lo hubiese probado antes. definitivamente la tecnología inversa es demasiado complicada, pasaros todos a Unity!!
Si no sigues al Pokémon Verde Hierba, entonces eres un mierda!!


Gracias a todos!

MIS HACKS FAVORITOS DE WAH:

  #5  
06/11/2016
Predeterminado Respuesta: Scripts de gatillo y condición mayor a $FF: ¿Hemos vivido engañados todas nuestras vidas?
Jajaja! Rly nigga? Are you fukking kidding me? wadafack broh!
_____

Me cago en todo lo cagable! Tantos años viviendo una mentira!

¡Aportazo!

Retirado del RomHacking




Skype: scriptercheve
Twitter: The Moon Lover



"Cuando oigas a un niño preguntar
Por qué el sol viene y se va
Dile: porque en esta vida no hay
Luz sin oscuridad"


  #6  
06/11/2016
Predeterminado Re: Scripts de gatillo y condición mayor a $FF: ¿Hemos vivido engañados todas nuestras vidas?
Nunca es tarde para aprender nuevas cosas.

Tengo que aprender ASM si o si.

  #7  
06/11/2016
Predeterminado Respuesta: Scripts de gatillo y condición mayor a $FF: ¿Hemos vivido engañados todas nuestras vidas?
Nu maa :v are you fucking kidding me? xdxd
Eso no me lo esperaba xdxd

Aportazo! :v

Postdata

PD:Te odio Corbitto :'v

Última edición por ~4n1ma~; 06/11/2016 a las 05:32
  #8  
06/11/2016
Predeterminado Respuesta: Scripts de gatillo y condición mayor a $FF: ¿Hemos vivido engañados todas nuestras vidas?
oh valla, estas cosas nos demuestran que no todo esta descubierto, genial aporte.


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 21:52.