[Tutorial|GBA] Estructuras de comparación de valores (Uso de If)

Avisos

Like Tree12Gracias
  • 7 Post By FEL!X
  • 1 Post By InmortalKaktus
  • 1 Post By Sr.Dr.Prof. G0LD
  • 3 Post By eing

Respuesta
 
Herramientas Desplegado
  #1  
03/01/2016
Predeterminado [Tutorial|GBA] Estructuras de comparación de valores (Uso de If)
[Tutorial|GBA] Estructuras de comparación de valores (Uso de If)


Visto la gran cantidad de dudas sobre el tema he decidido explicar el uso de comparaciones, de criterios y su estructura. También dejaré un lista interesante al final de comprobación de valores.

El nivel de éste tutorial será NORMAL (?): se deberá tener conocimientos básicos sobre variables y flags. Como recordatorio digo que ambos son valores de dos bytes pero de diferente extensión:
Flags, variables restringidas a dos valores:
  • 0x0 (desactivada)
  • 0x1 (activada)
Variables, variables que pueden contener valores entre 0x0 y 0xFFFF


* * *

Como ya sabemos, nos interesa comparar valores para que ocurra cierto evento dependiendo del valor de ciertas flags o variables. Entonces, según el tipo de valor o variable relacionado, usaremos un comando de comparación de valores distinto:

checkflag 0x(flag): comprueba si la flag está activada comparando el valor de la flag con el valor 0x1 (activada).

compare 0x(variable) 0x(valor): comprueba el valor de una variable con un valor determinado.

comparevars 0x(variable A) 0x(variable B): comparación entre variables; comprueba el valor de una variable A con el valor de otro variable B.

Pero hacer una comparación no es suficiente; necesitamos los criterios de comparación para decir que tipo de comparación queremos entre los valores. Estos criterios los marca el comando if 0x(criterio):

Código:
0x0: [<] Menor que 
0x1: [=] Igual que 
0x2: [>] Mayor que 
0x3: [≤] Menor o igual que 
0x4: [≥] Mayor o igual que 
0x5: [≠] Diferente de
Entonces establecido el tipo de comparación y el tipo de criterio; “complementamos” el if 0x(criterio) con un comando de salto a otro pointer. Tenemos dos:

goto @pointer: salta al pointer descrito y continua el script desde éste.

call @pointer: salta al pointer descrito y continua el script desde éste. A diferencia del anterior, este nos permitirá volver al lugar dónde llamamos el pointer ya que recuerda la posición anterior del call y permite volver mediante el comando return.

En pocas palabras, tras la comparación tendremos un if 0x(criterio) goto @pointer o un if 0x(criterio) call @pointer.

* * *

Uno de los objetivo de éste tutorial era aclarar el tema del If ya que ha dado muchas confusiones a muchos usuarios dando la creencia de que el término if variaba entre flags y variables cuando el funcionamiento es ¡Exactamente el mismo!

Ésta es la interpretación errónea de los comandos:
Código:
checkflag 0x200 'comprueba si la flag 200 está activada o desactivada
if 0x0 goto @pointer0 'en caso de que esté desativada va a @pointer0
if 0x1 goto @pointer1 'en caso de que esté activada va a @pointer0
Ésta es la interpretación correcta de los comandos
Código:
checkflag 0x200 'comprueba si la flag está activa comparando el valor de la flag 200 con el valor 0x1.
if 0x0 goto @pointer0 'si el valor es menor a 1, su valor será 0 (desactivada) ya que solo varía entre 0 e 1. En tal caso irá al @pointer0
if 0x1 goto @pointer1'si el valor es igual a 1, su valor será 1 (activada) y en tal caso irá al @pointer1
Y es tan válida como usar un 0x5
Código:
checkflag 0x200 ‘ compara el valor de la flag 200 con 1
if 0x5 goto @pointer0 ‘si  el valor es diferente a 1
if 0x1 goto @pointer1 ‘si el valor es igual a 1
Y con esto espero aclarar el tema de los criterios. Pese a ello, me han dicho lo contrario, por lo que he hecho una demostración sencilla que realmente justifica el comportamiento del checkflag e if:

[Vídeo YT] Demostración del uso de chekflag e if

Script para la demostración

#dynamic 0x800000

// Activación o desactivación de flags

#org @flag200x1
lock
setflag 0x200
msgbox @activa 0x6
release
end

#org @flag200x0
lock
clearflag 0x200
msgbox @desactiva 0x6
release
end

#org @activa
= ¡La flag 200 está activa!

#org @desactiva
= ¡La flag 200 está desactivada!

// Revisión de criterios

#org @flag200criterio0
lock
checkflag 0x200
if 0x0 goto @if
release
end

#org @flag200criterio1
lock
checkflag 0x200
if 0x1 goto @if
release
end

#org @flag200criterio2
lock
checkflag 0x200
if 0x2 goto @if
release
end

#org @flag200criterio3
lock
checkflag 0x200
if 0x3 goto @if
release
end

#org @flag200criterio4
lock
checkflag 0x200
if 0x4 goto @if
release
end

#org @flag200criterio5
lock
checkflag 0x200
if 0x5 goto @if
release
end

#org @if
lock
msgbox @msg 0x6
release
end

#org @msg
= ¡El criterio era cierto!


Dicho lo anterior paso una lista interesante de otros comandos de comparación interesantes para usar. Empezaré por el LASTRESULT, el más importante de todos.

LASTRESULT se trata de una variable, concretamente la 0x800D, que almacena el último valor variable observado. Es interesante sabes su valor, para ello lo trataremos como cualquier otra variable. Ejemplos de uso son:
compare LASRESULT 0x(valor): Compara el valor de la variable 0x800D con otro valor.
comparevars LASRESULT 0x(variable): Compara el valor de la variable 0x800D con el valor de otra variable
(Al poner LASRESULT en XSE el programa lo identificará como la variable 0x800D, es decir, la podemos escribir de ambas maneras)

checkmoney 0x(cantidad) 0x0:
compara la variable dinero con una cantidad determinada. Técnicamente es como un compare 0x(variable) 0x(valor) con la diferencia de que tiene integrado la variable dinero en el comando.

checktrainerflag 0x(flag):
compara el valor de la flag del entrenador con el valor 1 (el entrenador perdió)

* * *

A continuación añado varios comandos de comprobación de valores. Esto comandos se usan para comprobar cierto valor y guardarlo en LASTRESULT, es decir, la variable 0x800D.

checkgender: comprueba el sexo del protagonista. Si es chico la variable 0x800D tendrá valor 0x0, 0x1 en caso contrario

countpokemon:
cuenta el número de pokemon que hay en el equipo almacenando así de 0x0 a 0x5 en la variable 0x800D.

checkitem 0x(ítem index) 0x(cantidad):
comprueba si el jugador tiene cierta cantidad de un ítem en concreto. Si la tiene 0x800D será 0x1, 0x0 en caso contrario.

checkpcitem 0x(ítem index) 0x(cantidad):
comprueba si el jugador tiene cierta cantidad de un ítem en concreto en el PC. Si la tiene 0x800D será 0x1, 0x0 en caso contrario.

checkitemroom 0x(ítem index) 0x(cantidad): comprueba si el jugador tiene algo de espacio para cierta cantidad de cierto ítem. Si lo tiene 0x800D será 0x1, 0x0 en caso contrario.

checkattack 0x(attack índex): comprueba si algún pokemon del equipo tiene cierto ataque, y guarda la ubicación de éste en 0x800D. Si hay, se guardará según la posición de 0x0 a 0x5, 0x6 en caso contrario.

* * *



Espero que se entienda perfectamente el funcionamiento de cada comando. Sobre todo lo he hecho de cara a los usuarios que, al empezar con variables, se equivocan entendiendo los criterios con los valores ya que entendieron mal el tema de las flags.

Un abrazo.

Click para ver la firma




FEL!X



Premios




Galería (Link directo)



Aportaciones y participaciones



Algunas respuestas a posts y más posts





Respuesta: Cuantos años teneis? Que año Conocisteis Wah?

Respuesta: Con qué Pokémon te has encariñado y porqué?

Respuesta: GBA | Gráficos | [AVANZADO] ¡Añadir más frames a tus minis!

[Vídeo] Cuando Pokemon GO se vuelve violento
Respuesta: Rap de los Hackrom - Sage [A capella]
Respuesta: GBA | ASM | Clase Número 3: Instrucciones Básicas
Respuesta: ¿Cómo olvido a una chica? No puedo.
Respuesta: [Encuesta]¿Que encuentras mas divertido/entretenido al Rom Hackear/Makear?
* * *
Respuesta: [Cosas De WaH Ep2]¡¡5 Cosas Paranormal Que Nos Han Sucedido!!
Respuesta: FR| ASM| Salto en cualquier dirección.
Respuesta: [Cosas De WaH Ep1]¡¡10 Cosas Sobre Nosotros!!
¡fel!xidades! (Gracias a todos)

¡Ya están aquí!: Resultados PWaH 2015

Respuesta: ¿Qué estás escuchando ahora? (2)
* * *

Respuesta: [Relato de invierno] Chicago.
Respuesta: ¡TIPOS DE HACKERS! ¡Dime qué clase eres tú!
[TAG del MangaAnime]
Respuesta: [FR][DUDA]Comandos de dinero
[Por Una Wah Unida]
Respuesta: Mis motivos de estar aqui
* * *

Respuesta: Psicólogo para el psicólogo, filósofo para el filósofo~
Respuesta: ¿Qué estás escuchando ahora?
Respuesta: [Historia] Hijos del bosque, hijos del viento
Respuesta: [IDEA] Jugador se pueda liar
Respuesta: ¿Cuál es vuestro arquetipo de personaje favorito?
Respuesta: [Encuesta] ¿Cuál fue tu primer juego de pokemon?
* * *


Respuesta: [Test] ¿Qué tipo de personalidad eres?(Viva el comandante FEL!X)

Tu TOP 5 de animes (Mi propio top)
Respuesta:Pregunta a todos los spriters (Mi punto de vista)
Respuesta: IDEA | Nuevos Tipos Elementales 8El tipo experto)
Respuesta: IDEA | Nuevos Tipos de Evolucion (El caso de Machamp )

¡Un abrazo!


Última edición por FEL!X; 09/01/2016 a las 21:50 Razón: Racismo contra los usuarios de otras plataformas de GBA jajaja
  #2  
03/01/2016
Predeterminado Respuesta: [Tutorial| FR] Estructuras de comparación de valores (Uso de If)
Buen aporte, Felix. Encima eres la primera persona que conozco que explica las diferencias entre goto y call(y @~Ruki! ; se me olvidaba)(y mira que es útil saberlo).

PD: Felix, ¿puedes entrar a tu perfil? Porque a mí no me carga ni en el móvil ni en el ordenador...

Última edición por Laquin; 03/01/2016 a las 16:58
  #3  
03/01/2016
Predeterminado Respuesta: [Tutorial| FR] Estructuras de comparación de valores (Uso de If)
Pues para serte sincero yo confundía esto

Código:
0x0: [<] Menor que 
0x1: [=] Igual que 
0x2: [>] Mayor que 
0x3: [≤] Menor o igual que 
0x4: [≥] Mayor o igual que 
0x5: [≠] Diferente de
Y pensaba que 0x0 era igual a no y 0x1 era igual a sí x'D

Gran aporte Felih
Gracias: Laquin
  #4  
03/01/2016
Predeterminado Respuesta: [Tutorial| FR] Estructuras de comparación de valores (Uso de If)
Dicho por Laquin Ver mensaje
Buen aporte, Felix. Encima eres la primera persona que conozco que explica las diferencias entre goto y call(y mira que es útil saberlo).
really?

Buen aporte, siempre es útil saber este tipo de cosas
Gracias: Laquin

  #5  
03/01/2016
Predeterminado Respuesta: [Tutorial| FR] Estructuras de comparación de valores (Uso de If)
Buen aporte realmente. mas tarde lo leo a fondo y veo que tal, aunque a simple vista se ve muy completo.


  #6  
03/01/2016
Predeterminado Respuesta: [Tutorial| FR] Estructuras de comparación de valores (Uso de If)
Vaya mierda de tutorial, dislike, vete del foro pls (?
Graaaacias, buen trabajo!
  #7  
03/01/2016
Predeterminado Respuesta: [Tutorial| FR] Estructuras de comparación de valores (Uso de If)
No sabia que uno de los principios mas básicos de scripting fuese exclusivamente para FR.

Luego viene cuando decis que solo fr esta documentada hahaha los que no estais documentados sois vosotros!

Anyways.. Buen aporte de scripting.
Gracias: Foxz., ~SAGE y FEL!X

Me voy de gira con la gamba mariachi.
¡Hasta siempre WAHeros!
  #8  
09/01/2016
Predeterminado Respuesta: [Tutorial| FR] Estructuras de comparación de valores (Uso de If)
Dicho por eing Ver mensaje
No sabia que uno de los principios mas básicos de scripting fuese exclusivamente para FR.

Luego viene cuando decis que solo fr esta documentada hahaha los que no estais documentados sois vosotros!

Anyways.. Buen aporte de scripting.
¡Ostras! Lo siento.

Jajaja, tienes razón eing, aclaro que éste principio se aplica a todos los RomHackers de GBA. La idea sería enfocarlo a Gba no solo a FR. Se me ha colao; es la costumbre . Así que... ¡Cambiado!

Un abrazo.

PD:Lo que pasa es que soy un racista de usuarios no FR (Muahaha) (?)

Click para ver la firma




FEL!X



Premios




Galería (Link directo)



Aportaciones y participaciones



Algunas respuestas a posts y más posts





Respuesta: Cuantos años teneis? Que año Conocisteis Wah?

Respuesta: Con qué Pokémon te has encariñado y porqué?

Respuesta: GBA | Gráficos | [AVANZADO] ¡Añadir más frames a tus minis!

[Vídeo] Cuando Pokemon GO se vuelve violento
Respuesta: Rap de los Hackrom - Sage [A capella]
Respuesta: GBA | ASM | Clase Número 3: Instrucciones Básicas
Respuesta: ¿Cómo olvido a una chica? No puedo.
Respuesta: [Encuesta]¿Que encuentras mas divertido/entretenido al Rom Hackear/Makear?
* * *
Respuesta: [Cosas De WaH Ep2]¡¡5 Cosas Paranormal Que Nos Han Sucedido!!
Respuesta: FR| ASM| Salto en cualquier dirección.
Respuesta: [Cosas De WaH Ep1]¡¡10 Cosas Sobre Nosotros!!
¡fel!xidades! (Gracias a todos)

¡Ya están aquí!: Resultados PWaH 2015

Respuesta: ¿Qué estás escuchando ahora? (2)
* * *

Respuesta: [Relato de invierno] Chicago.
Respuesta: ¡TIPOS DE HACKERS! ¡Dime qué clase eres tú!
[TAG del MangaAnime]
Respuesta: [FR][DUDA]Comandos de dinero
[Por Una Wah Unida]
Respuesta: Mis motivos de estar aqui
* * *

Respuesta: Psicólogo para el psicólogo, filósofo para el filósofo~
Respuesta: ¿Qué estás escuchando ahora?
Respuesta: [Historia] Hijos del bosque, hijos del viento
Respuesta: [IDEA] Jugador se pueda liar
Respuesta: ¿Cuál es vuestro arquetipo de personaje favorito?
Respuesta: [Encuesta] ¿Cuál fue tu primer juego de pokemon?
* * *


Respuesta: [Test] ¿Qué tipo de personalidad eres?(Viva el comandante FEL!X)

Tu TOP 5 de animes (Mi propio top)
Respuesta:Pregunta a todos los spriters (Mi punto de vista)
Respuesta: IDEA | Nuevos Tipos Elementales 8El tipo experto)
Respuesta: IDEA | Nuevos Tipos de Evolucion (El caso de Machamp )

¡Un abrazo!

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:30.