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

Like Tree18Gracias
  • 16 Post By IStillLoveCheve
  • 1 Post By Xabier2012
  • 1 Post By Corbitto
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
CHEVE: Mod, Admin, Black Cat, Writer, 4x1, Mayor, Fire-fighter, War Hero, USA President, Kaiser, il Duce, Mein Führer...
But at the end of the day...



IT'S JUST CHEVE

LUV U CHEVE <3

Última edición por IStillLoveCheve; 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



"Esto ya no eres tu
ni se acerca a ti
mira bien donde estas
deja de fingir
recupera de nuevo la dirección"


  #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.
Gracias: ♠Subzero♠


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 09:36.